用AI打造一個屬於自己的歌手,讓她C位霸氣出道

2023-10-27 12:01:14

一、前言

今天玩兒點兒特別的,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平臺的能力,實現自動生成歌詞,自動生成曲譜,自動生成唱段等,實現全民娛樂。

作為一個程式設計師,雲伺服器現在應該是標配了,學生可以用來學習,菜鳥可以用來練手,老鳥玩點有趣的東西偶爾賺點小錢。你如果想買一臺雲伺服器來玩兒,下面是直達騰訊雲優惠專區的連結:

https://cloud.tencent.com/act/cps/redirect?redirect=5186&cps_key=814b8b5d55ef58acc94a1b6bf43d5a2b&from=console