忽如一夜春風來,亞洲天后孫燕姿獨特而柔美的音色再度響徹華語樂壇,只不過這一次,不是因為她出了新專輯,而是人工智能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站)搜索關鍵字:劉悅的技術博客,即可欣賞最終的成品歌曲,歡迎諸君品鑒,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/552144.html
標籤:其他
上一篇:CSP-何以包郵?
下一篇:返回列表
