AI天后,線上飆歌,人工智慧AI孫燕姿模型應用實踐,復刻《遙遠的歌》,原唱晴子(Python3.10)

2023-05-11 09:00:49

忽如一夜春風來,亞洲天后孫燕姿獨特而柔美的音色再度響徹華語樂壇,只不過這一次,不是因為她出了新專輯,而是人工智慧AI技術對於孫燕姿音色的完美復刻,以大江灌浪之勢對華語歌壇諸多經典作品進行了翻唱,還原度令人咋舌,如何做到的?

本次我們藉助基於Python3.10的開源庫so-vits-svc,讓亞洲天后孫燕姿幫我們免費演唱喜歡的歌曲,實現點歌自由。

so-vits-svc是基於VITS的開源專案,VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一種結合變分推理(variational inference)、標準化流(normalizing flows)和對抗訓練的高表現力語音合成模型。

VITS通過隱變數而非頻譜串聯起來語音合成中的聲學模型和聲碼器,在隱變數上進行隨機建模並利用隨機時長預測器,提高了合成語音的多樣性,輸入同樣的文字,能夠合成不同聲調和韻律的語音。

環境設定

首先確保本機已經安裝好Python3.10的開發環境,隨後使用Git命令克隆專案:

git clone https://github.com/svc-develop-team/so-vits-svc.git

隨後進入專案的目錄:

cd so-vits-svc

接著安裝依賴,如果是Linux或者Mac系統,執行命令:

pip install -r requirements.txt

如果是Windows使用者,需要使用Win系統專用的依賴檔案:

pip install -r requirements_win.txt

依賴庫安裝成功之後,在專案的根目錄執行命令,啟動服務:

python webUI.py

程式返回:

PS D:\so-vits-svc> python .\webUI.py  
DEBUG:charset_normalizer:Encoding detection: ascii is most likely the one.  
C:\Users\zcxey\AppData\Roaming\Python\Python310\site-packages\gradio\deprecation.py:43: UserWarning: You have unused kwarg parameters in UploadButton, please remove them: {'variant': 'primary'}  
  warnings.warn(  
DEBUG:asyncio:Using proactor: IocpProactor  
Running on local URL:  http://127.0.0.1:7860  
  
To create a public link, set `share=True` in `launch()`.

說明服務已經正常啟動了,這裡so-vits-svc會在後臺執行一個基於Flask框架的web服務,埠號是7860,此時存取原生的網址:127.0.0.1:7860:

此時,我們就可以載入模型,模型訓練先按下不表,這裡先使用已經訓練好的孫燕姿音色模型:

連結:https://pan.baidu.com/s/1RwgRe6s4HCA2eNI5sxHZ9A?pwd=7b4a   
提取碼:7b4a

下載模型檔案之後,將模型檔案放入logs/44k目錄:

D:\so-vits-svc\logs\44k>dir  
 驅動器 D 中的卷是 新加捲  
 卷的序列號是 9824-5798  
  
 D:\so-vits-svc\logs\44k 的目錄  
  
2023/05/10  12:31    <DIR>          .  
2023/05/10  11:49    <DIR>          ..  
2023/04/08  15:22       542,178,141 G_27200.pth  
2023/04/08  15:54        15,433,721 kmeans_10000.pt  
2023/05/10  11:49                 0 put_pretrained_model_here  
               3 個檔案    557,611,862 位元組  
               2 個目錄 475,872,493,568 可用位元組  
  
D:\so-vits-svc\logs\44k>

接著將模型的組態檔config.js放入configs目錄:

D:\so-vits-svc\configs>dir  
 驅動器 D 中的卷是 新加捲  
 卷的序列號是 9824-5798  
  
 D:\so-vits-svc\configs 的目錄  
  
2023/05/10  11:49    <DIR>          .  
2023/05/10  12:23    <DIR>          ..  
2023/04/08  12:33             2,118 config.json  
               1 個檔案          2,118 位元組  
               2 個目錄 475,872,493,568 可用位元組  
  
D:\so-vits-svc\configs>

隨後,在頁面中點選載入模型即可,這裡環境就設定好了。

原始歌曲處理(人聲和伴奏分離)

如果想要使用孫燕姿的模型進行推理,讓孫燕姿同學唱別的歌手的歌,首先需要一段已經準備好的聲音範本,然後使用模型把原來的音色換成孫燕姿模型訓練好的音色,有些類似Stable-Diffusion的影象風格遷移,只不過是將繪畫風格替換為音色和音準。

這裡我們使用晴子的《遙遠的歌》,這首歌曲調悠揚,如訴如泣,和孫燕姿婉轉的音色正好匹配。好吧,其實是因為這首歌比較簡單,方便新手練習。

需要注意的是,模型推理過程中,需要的歌曲樣本不應該包含伴奏,因為伴奏屬於「噪音」,會影響模型的推理效果,因為我們替換的是歌手的「聲音」,並非伴奏。

這裡我們選擇使用開源庫Spleeter來對原歌曲進行人聲和伴奏分離,首先安裝spleeter:

pip3 install spleeter --user

接著執行命令,對《遙遠的歌》進行分離操作:

spleeter separate -o d:/output/ -p spleeter:2stems d:/遙遠的歌.mp3

這裡-o代表輸出目錄,-p代表選擇的分離模型,最後是要分離的素材。

首次執行會比較慢,因為spleeter會下載預訓練模型,體積在1.73g左右,執行完畢後,會在輸出目錄生成分離後的音軌檔案:

C:\Users\zcxey\Downloads\test>dir  
 驅動器 C 中的卷是 Windows  
 卷的序列號是 5607-6354  
  
 C:\Users\zcxey\Downloads\test 的目錄  
  
2023/05/09  13:17    <DIR>          .  
2023/05/10  20:57    <DIR>          ..  
2023/05/09  13:17        26,989,322 accompaniment.wav  
2023/05/09  13:17        26,989,322 vocals.wav  
               2 個檔案     53,978,644 位元組  
               2 個目錄 182,549,413,888 可用位元組

其中vocals.wav為晴子的清唱聲音,而accompaniment.wav則為伴奏。

關於spleeter更多的操作,請移步至:人工智慧AI庫Spleeter免費人聲和背景音樂分離實踐(Python3.10) , 這裡不再贅述。

至此,原始歌曲就處理好了。

歌曲推理

此時,將晴子的清唱聲音vocals.wav檔案新增到頁面中:

接著就是引數的調整:

這裡推理歌曲會有兩個問題,就是聲音沙啞和跑調,二者必居其一。

F0均值濾波(池化)引數開啟後可以有效改善沙啞問題,但有概率導致跑調,而降低該值則可以減少跑調的概率,但又會出現聲音沙啞的問題。

基本上,推理過程就是在這兩個引數之間不斷地調整。

所以每一次推理都需要認真的聽一下歌曲有什麼問題,然後調整引數的值,這裡我最終的引數調整結果如上圖所示。

推理出來的歌曲同樣也是wav格式,此時我們將推理的清唱聲音和之前分離出來的伴奏音樂accompaniment.wav進行合併即可,這裡推薦使用FFMPEG

ffmpeg -f concat -i <( for f in *.wav; do echo "file '$(pwd)/$f'"; done ) output.wav

該命令可以把推理的人聲wav和背景音樂wav合併為一個output.wav歌曲,也就是我們最終的作品。

結語

藉此,我們就完成了自由點歌讓天后演唱的任務,如果後期配上畫面和歌詞的字幕,不失為一個精美的AI藝術品,在Youtube(B站)搜尋鍵碼:劉悅的技術部落格,即可欣賞最終的成品歌曲,歡迎諸君品鑑。