一、前言
今天玩兒點兒特別的,AI大行其道的今天,還沒玩過AI模型的程式設計師絕對不是個好廚子。我本人比較喜歡音樂,但是一直沒有出道,很是遺憾。那麼今天,我就使用AI模型親手打造一個堪比真人的歌手,讓她C位霸氣出道。
首先,讓這位女歌手露一嗓子:點我試聽
唱的還不錯吧,接下來我們們來分析這位歌手是如何打造出來的。
二、技術
飛槳(PaddlePaddle)以百度多年的深度學習技術研究和業務應用為基礎,集深度學習核心框架、基礎模型庫、端到端開發套件、工具元件和服務平臺於一體,2016 年正式開源,是全面開源開放、技術領先、功能完備的產業級深度學習平臺。
上面的介紹是不是很唬人?從百度飛槳官網貼過來的。顯然,本文使用的技術是基於百度飛槳框架打造,當然了,你要讓我從零開始搞AI......那我還是選擇當廚子。
飛槳Hub(PaddleHub)是基於PaddlePaddle生態下的預訓練模型,旨在為開發者提供豐富的、高質量的、直接可用的預訓練模型。
說白了,這個飛槳Hub是模型集中營,提供了很多已經訓練好的模型,使用者可以拿來直接使用,而不需要再耗費過多的精力、資源去自己訓練模型。
Python,飛槳平臺基於Python語言實現,不必多說了,畢竟,Python是世界上最好的語言.java。
Anaconda,是一個常用的python包管理程式,可以方便的管理我們的多個Python環境。比如你的A軟體需要基於Python3.7,B軟體需要基於Python3.8,用Anaconda可以方便的對不同的環境進行管理和切換。
三、環境搭建
1、安裝Anaconda
到官網https://www.anaconda.com/或者https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下載一個較新的版本即可。
安裝過程很簡單,猛點下一步即可,建議你安裝到C盤之外的盤。
即便你裝在了D盤,但是建立環境的時候,環境資訊預設還是會被建立到C盤,所以還應該做如下操作:
編輯C:\Users\你的使用者名稱\.condarc檔案(如果沒有此檔案請手動建立),檔案內容如下:
channels:
- defaults
envs_dirs: [D:\anaconda3\envs]
pkgs_dirs: [D:\anaconda3\pkgs]
這樣環境資訊就會被儲存在D盤了。
2、建立Python環境
找到剛剛安裝的anaconda,開啟Anaconda Prompt命令列工具,執行如下語句:
conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
以上程式碼表示,建立一個Python3.8的環境,環境名稱為paddle_env,軟體源從https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 地址下載。
3、安裝百度飛槳環境
輸入如下命令,表示接下來的所有操作,我要在剛才建立的那個名為paddle_env的環境中進行:
conda activate paddle_env
輸入如下命令,表示安裝百度飛槳基礎環境:
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
輸入如下命令,表示安裝百度飛槳Hub:
pip install paddlehub -i https://mirror.baidu.com/pypi/simple
最後,我們再新建一個環境變數HUB_HOME。因為paddlehub的模型下載安裝時,會預設裝在c盤。我們將HUB_HOME指到其他的磁碟即可。
四、安裝模型
上面將基礎環境搭建好了,接下來我們安裝語音合成模型Diffsinger。
DiffSinger,一個基於擴散機率模型的 SVS 聲學模型。DiffSinger 是一個引數化的馬爾科夫鏈,它可以根據樂譜的條件,迭代地將噪聲轉換為旋律譜。透過隱式最佳化變異約束,DiffSinger 可以被穩定地訓練併產生真實的輸出。
上面在說什麼,我也看不太懂。但通俗的說,這個模型可以將樂譜轉換為旋律譜。
首先,這個模型依賴如onnxruntime包,我們透過如下命令進行安裝:
pip install onnxruntime -i https://mirror.baidu.com/pypi/simple
然後,我們安裝Diffsinger模型:
hub install diffsinger==1.0.0
五、創造歌手
目前萬事俱備,我們開始創造歌手。
首先我們看這個模型的呼叫引數是怎樣的:
inputs (Dict[str, str]): 輸入資料格式如下;
{
'text': '小酒窩長睫毛AP是你最美的記號',
'notes': 'C#4/Db4 | F#4/Gb4 | G#4/Ab4 | A#4/Bb4 F#4/Gb4 | F#4/Gb4 C#4/Db4 | C#4/Db4 | rest | C#4/Db4 | A#4/Bb4 | G#4/Ab4 | A#4/Bb4 | G#4/Ab4 | F4 | C#4/Db4',
'notes_duration': '0.407140 | 0.376190 | 0.242180 | 0.509550 0.183420 | 0.315400 0.235020 | 0.361660 | 0.223070 | 0.377270 | 0.340550 | 0.299620 | 0.344510 | 0.283770 | 0.323390 | 0.360340',
'input_type': 'word'
}
sample_num (int): 生成音訊的數量;
save_audio (bool): 是否儲存音訊檔案;
save_dir (str): 儲存處理結果的檔案目錄。
其中需要以下說明:
text:就是指要唱的歌曲歌詞;
notes:表示歌詞對應的曲譜;
notes_duration:表示歌詞中每個字要唱的時長;
接下來,我們準備以下Python程式碼:
import paddlehub as hub
module = hub.Module(name="diffsinger")
results = module.singing_voice_synthesis(
inputs={
'text': '小酒窩長睫毛AP是你最美的記號',
'notes': 'C#4/Db4 | F#4/Gb4 | G#4/Ab4 | A#4/Bb4 F#4/Gb4 | F#4/Gb4 C#4/Db4 | C#4/Db4 | rest | C#4/Db4 | A#4/Bb4 | G#4/Ab4 | A#4/Bb4 | G#4/Ab4 | F4 | C#4/Db4',
'notes_duration': '0.407140 | 0.376190 | 0.242180 | 0.509550 0.183420 | 0.315400 0.235020 | 0.361660 | 0.223070 | 0.377270 | 0.340550 | 0.299620 | 0.344510 | 0.283770 | 0.323390 | 0.360340',
'input_type': 'word'
},
sample_num=1,
save_audio=True,
save_dir='./outputs'
)
我們執行以上指令碼:
python test.py
最終生成了開頭貼出的唱段。
上面生成的是翻唱歌曲。接下來,我們再為歌手寫一首原創主打歌曲,鄙人不才作詞如下哈哈:
雙手敲下黑白鍵盤,這首音樂你是否會喜歡
作曲可難倒我了,我打算找AI來幫忙,找百度文心一言生成以下曲譜:
C#4/Db4 | F#4/Gb4 | G#4/Ab4 | A#4/Bb4 | F#4/Gb4 | F4/G4 | C#4/Db4 | C#4/Db4 | rest | C#4/Db4 | A#4/Bb4 | G#4/Ab4 | F#4/Gb4 | C#4/Db4 | G#4/Ab4 | A#4/Bb4 | G#4/Ab4 | F#4 | C#4/Db4
每個字的持續時間瞎編一下:
0.407140 | 0.376190 | 0.242180 | 0.509550 | 0.183420 | 0.315400 0.235020 | 0.361660 | 0.223070 | 0.377270 | 0.340550 | 0.299620 | 0.344510 | 0.283770 | 0.323390 | 0.360340 | 0.509550 | 0.183420 | 0.315400 0.235020 | 0.661660
重新執行Python指令碼,主打歌生成了:點我試聽
六、結語
AI大時代,AI技術每個人都可以觸手可及,程式設計師群體更是近水樓臺,最起碼可以起到自我娛樂的效果。
我們可以將以上技術部署到伺服器,做成網站、小程式、APP等,藉助AI平臺的能力,實現自動生成歌詞,自動生成曲譜,自動生成唱段等,實現全民娛樂。
作為一個程式設計師,雲伺服器現在應該是標配了,學生可以用來學習,菜鳥可以用來練手,老鳥玩點有趣的東西偶爾賺點小錢。你如果想買一臺雲伺服器來玩兒,下面是直達騰訊雲優惠專區的連結: