自主學習成果紀錄
Note
這是我的高二上學期自主學習成果報告,主要拿來當報告撰寫用的草稿用,完全是流水帳,看看就好。
對我還沒寫報告
Note
寫到一半發現好像會寫很久,乾脆一邊寫一邊給各位看好了。
因為時間已經間隔很久,有些事情我已經忘記了,如果想到會繼續加入東西。
本次自主學習標題
為你而聲:AI 虛擬歌手實作
目標
- 使用 Diffsinger 製作自己的虛擬歌手
- 將現有程式優化後開源
- 提供中文教學
內容
動機
自己平常喜歡聽音樂,聽到喜歡的歌會另外看有沒有其他歌手的 cover,因此常找到來自 AI 虛擬歌手的 cover 作品。
聽到 AI 虛擬歌手的聲音,發現它和真實人類的表現不分上下,開始對虛擬歌手產生興趣,於是開始著手研究。
探索虛擬歌手領域時,發現其軟體多數為商業軟體,均需要付費才能使用,或免費版有多重限制。
e.g. Synthesizer V, Vocaloid, ACE Studio…
另外有一軟體稱為 UTAU,但它是用數學公式計算音高,再用聲音資料庫(以下簡稱聲音庫)的資料做音素拼接並調整每個字的音高,導致聲音不像真人。
我開始好奇有沒有開源的 AI 虛擬歌手軟體,於是開啟了這次自主學習的契機。
專案原形
原本打算從頭自己打造一個虛擬歌手軟體,於是做了以下的心智圖,作為整體架構(電腦對圖片按右鍵開新分頁放大):
(獻醜了)
我把這張架構圖交給 ChatGPT,它幫我轉成了大約的時間線:
# 🎵 AI Vocal 專案藍圖
## 📌 專案開發 Roadmap / Timeline
### 階段一 (MVP) [1-3 個月]
- 建立資料集(語音 + 歌唱樣本)
- SoVITS baseline 訓練 voicebank
- Python backend 推理
- 基礎 GUI(PyQt / PySide) → 輸入歌詞生成聲音
- **目標**:輸出 wav 檔、基本 pitch 控制
---
### 階段二 (功能增強) [4-6 個月]
- 加入情感控制 (warm, sweet, dark, whisper, breath)
- AI Retake(pitch/timing 自動修正)
- 即時低延遲預覽播放 + 高品質背景渲染
- **目標**:使用者可以更自然編輯聲音
---
### 階段三 (與 DAW 整合) [6-12 個月]
- Vocaline 進階 GUI(Piano Roll、MIDI + 歌詞輸入)
- DAW 連動(輸出 MIDI → plugin)
- C++ + JUCE 開發 VST/AU 插件
- **目標**:真正能放進音樂製作工作流程
---
### 階段四 (差異化 & 社群) [12 個月以上]
- Diffusion-based voice synthesis(更擬真)
- 多語言支援(中/英/日)
- 雲端加速(Server 推理 + Client GUI)
- 開放社群 voicebank(像 UTAU 生態系)
- **目標**:打造差異化優勢,形成使用者社群
---
## 📌 GUI 技術選型決策樹
你需要「最快速做出原型」嗎?
└─ 是 → Python + Qt (PyQt5 / PySide6)
[開發快,不卡卡,適合 MVP]
不是 → 你要「做專業音樂插件 (VST/AU)」嗎?
└─ 是 → C++ + JUCE
[業界標準,高效能,專業 DAW 整合]
不是 → 你要「跨平台桌面 GUI」嗎?
└─ 是 → C# + Avalonia / .NET MAUI
[效能穩定,開發體驗好]
不是 → 你想要「輕量 + 新潮 + 高效能」嗎?
└─ 是 → Rust + Tauri / egui
[現代技術,資源佔用低,但生態還不成熟]

欸不是,至少要做一年?!就算有 AI 幫忙也弄不完吧?不行不行,我需要更好的解決方案。
找其他解決方案
為了找到更好的解決方案,我花了快一個月在找到底有什麼開源的 AI 虛擬歌手程式(不要問我為什麼是一個月),中間搜尋引擎和 GPT 一直把我帶回 Vocaloid, SynthV 之類的商業軟體,彷彿在告訴我:「別找了就這些軟體可以用而已」。
我發現虛擬歌手領域幾乎已經被這些商業軟體壟斷,但依照我對開源社區的了解,他們應該沒有忘記開發開源虛擬歌手軟體才對。
果不其然,在我堅持不懈研究、逼問詢問了 ChatGPT 之後,找到了一套叫 Diffsinger 的開源虛擬歌手軟體。
先確定到底行不行
關於 Diffsinger
其實 Diffsinger 不是真的軟體,而是一套 AI 聲音生成「引擎」,它並沒有獨立的軟體界面。
後來查了一下才發現原來 Diffsinger 是當作 UTAU 的套件用。欸等等,我不是才在前面嫌 UTAU 生成的聲音不好嗎?不是這樣啦,UTAU 是被拿來當作 Diffsinger 的顯示介面,使用者在 UTAU 上做完設定,UTAU 再把參數們都交給 Diffsinger 處理,再送回 UTAU 上。1
怎麼訓練?
Diffsinger 訓練程式要求電腦一定要有 Nvidia 顯卡,而且獨立顯示記憶體一定要至少 8 GB,至於訓練速度的話就看顯卡性能了。
有些人(就是我)沒有配備那麼好的電腦,這時候有其他方式可以用:
- 用別人寫好的 ipynb 在 Google Colab 訓練
- 把處理好的資料交給別人幫你訓練(在中國的社群有人在專門幫忙訓練)
- 在其他平台上跑訓練程式(中國平台居多)
中國的雲端平台就先算了 … 不是我要歧視對岸,是沒辦法用啊,要交給別人處理幾乎不可能也不適合,畢竟是要做自主學習嘛,那當然就是選 Google Colab 啦。
(不過 Google Colab 也很會亂搞,後面會寫到)
確定了之後就可以開始了 … 嗎?
好不容易找到了可以用的軟體之後,接著就是開始探索軟體和社群活動了。
一開始先在 YT 上看看有沒有相關內容,搜尋結果確實很多東西,都是用 Diffsinger 做出來的 cover 欸!不過我想看的是做 Diffsinger 虛擬歌手的教學,但似乎怎麼找都找不太到?
英文的教學內容偏少,多數資源都在 B 站或中國國內的平台(有些需要平台帳號),所以有些東西我是沒辦法看到的,例如訓練程式對樣本的要求。
當然英文版還是可以用啦,不過程式會一直更新,教學可不一定啊!有些設定早就跟原本教學不一樣了!
那怎麼辦?就一邊試錯一邊訓練吧,只是會消耗非常多時間就是了,我也不知道做不做得完。
就硬著頭皮做吧
先到網路上找些資源,看到了原本英文教學用的訓練程式(當然程式已經更新了),想說哪些一樣的就先照做,其他的看狀況處理。
聲優和設備勒?
不過在做訓練之前,有個很重要的事沒做:樣本哪裡來?
要做樣本就需要有人錄音2,設備的話跟指導老師借就好。
至於聲優呢 … 我想要女生的聲音,因為我手上有的 ust,本家是女虛擬歌手的聲音(我懶得再自己做,而且我時間應該不夠 🤪)。
一開始我找了快三個星期,但一直找不到人,原本想說如果還是找不到的話就得自己夾起來了,就在這個時候,班上有個女生知道我需要 vocal,就突然來找我說她想當聲優,問題就這樣看起來意外解決了?
(暴雷:不是找到人就結束了,然後我也不知道她為什麼要主動找我 🤔)
剛開始的小插曲
因為找不到可以跟聲優一起錄音的時間,所以只能在對方有空的時間,把麥克風交給她,錄完的檔案再傳給我處理。
看起來應該可以直接錄音了,所以我就跟指導老師借了麥克風,確定完設備沒問題,就交給聲優處理。
準備開始的時候大概是在第一次段考完時,我大概有兩個星期可以處理她的錄音,第三個星期我就要開始忙其他事了,所以我跟對方說可以的話盡快錄音,對方同意了,也順便教麥克風怎麼接,然後意外就發生了 …
第一個星期都一直沒有收到檔案,當時想說她是不是在忙,想說再等一下好了,結果第二個星期快過完了還是沒收到檔案,問了才發現對方根本忘記這件事,前面的時間都跟朋友出門玩了,聽到我整個人差點沒暈倒。
第三個星期開始(我一直打成刑期,但真的是我的刑期 XD),我才收到檔案,我只能在半夜3一邊做其他事一邊處理檔案了。
原本想說應該處理完檔案就可以先休息了,結果就在我把檔案送進 Audacity、開了頻譜分析,去背景噪音之後,發現有點奇怪的事情。

欸等一下為什麼有一大片的頻率直接消失?隔天我問她才發現錄音的時候因為用手機外接麥克風錄音,但是為了方便就亂接,所以收到的聲音都是用手機內建麥克風錄的。我差點又要暈倒了,現在只能全部重來吧。
終於正式開始了
接下來處理檔案的時間都是在半夜,老實說半夜聽錄音總覺得有點毛毛的,就算農曆七月沒到 XD
中間重錄了幾次,但次數因為能處理的時間都在半夜,所以一天最多就只能要求一次錄音,隔幾天4聲優再傳新的檔案給我,然後再進行一樣的流程。
收到檔案後的處理流程
流程大概是這樣:
- 收到 m4a 檔案
- 篩選要的檔案
- 要的檔案用 ffmpeg 轉成 wav 檔案
- 個別送進 Audacity 處理
- 轉成 44100 Hz、16 位元的單聲道 wav
- 個別標記檔案的每個子、母音(見「標記聲音」段落)
- 標記的檔案另外轉換成電腦讀取的格式
- 轉換完的檔案跟轉出的 wav 打包成 zip 檔,當成訓練資料
- 送進訓練程式處理和訓練
- 訓練完的模型轉換成歌手庫並打包
- 檢查歌手庫能不能用,重新打包後發布到 GitHub 上
在 Audacity 處理的流程大概是這樣:
- 先用 Amplify 把音量加大(約 15 ~ 18 dB)
- 用 Noise Reduction 把檔案雜音去掉(降低 10 dB、敏感度設為 2),重複執行三次
- 用 Filter Curve EQ 把 100 Hz 以下去掉(大部分都是雜音)
- 看狀況把 bass 加大一點,去掉空白、NG 部份跟混在 vocal 裡的雜音
但每個檔案要調整的效果大小都不太一樣,所以要個別處理。一份檔案處理要約 10 分鐘,要做大概十幾次(包含檢查要不要重錄)。
標記聲音
標記的目的要讓電腦知道每個音是對應到哪個字(電腦不可能辨識得出來唱了什麼音,除非另外開 Whisper 辨識,但通常也不準 )
標記聲音的流程像這樣:
- 先爬一下歌詞
- 轉換成拼音、檢查哪裡有錯音(e.g. 多音字)
- 把「每個字」拆成子、母音
- 在 Audacity 按照時間標記(標記部份最痛苦的步驟)
- 輸出標記 txt 檔
- 轉換成 .lab 格式
(Audacity 標記縮時)
轉換標記的檔案
(原本嘗試機器處理,結果標記時間完全不準,子母音還會偷加料,直接改全部手動)
有問題?全部打掉重來!
不是處理好樣本就好了
(訓練程式本身就有問題)
Google Colab 亂入
(Google Colab 把我原本 12 小時的額度降到 5 小時、要連接 Google Drive 需要身份驗證,但是一直不傳驗證碼,還繼續計時)
跟社群求救!
(因為程式有問題,不知道怎麼修,所以直接跟社群求救,但社群活躍度好像不高)
還是有問題啊!
(新程式還是有問題,只能直接自己除錯,花了一個星期除錯完又出其他錯,又花三個星期處理)
最後 …
處理完問題之後,已經剩下大概兩個星期可以用,只能想辦法用最快速度重來了。
發現&感想
與其說 AI 是人工智慧,倒不如說是人工智障 (artifical idiot),沒事別學我搞自殺行為 XD
其實中間也學到不少東西啦,例如在訓練過程中,觀察生成的聲波圖和聲音,可以觀察到形狀從一開始醜不啦嘰一樣的東西變成越來越像原本聲波的形狀,還有訓練的進步幅度越來越小,不覺得有點像人類的學習方式嗎?

訓練模型有點像人在記憶東西,一開始完全記不起來,後來越記越熟悉。講難聽點就是浪費時間跟 GPU 算力在叫 AI 死背東西🤣
相關資料
我的 GitHub repo: https://github.com/itsxiaobai/Diffsinger-self-learning
生成範例: https://odysee.com/@itsxiaobaibackupchannel:d/output:d0e?r=14jXQtjTESfN1aJK6reBREAq9421Lz6v
因為 UTAU 介面實在太難看也不好操作,而且又只有 Windows 版,所以我用的是有開源、跨平台的 OpenUTAU,UI 重新設計過真的差很多。 ↩︎
對於 AI 不懂的人可能會想說就叫 AI 生成聲音就好了(至少我身邊一堆人都這樣想)。會有這種想法的人通常是因為用 ChatGPT 或 Suno 太習慣,只知道丟問題給它就會有答案。但都不知道背後 AI 模型其實都是靠網路上的公開資料訓練的。換句話說,要訓練 AI 模型就一定要有訓練資料,AI 是不可能憑空生出東西的。 ↩︎
白天在上課,晚上在補習(想逃離 QQ),只有半夜能做了。 ↩︎
其實 … 那個隔幾天是看幾天後她會想到才錄音,有時候根本就忘記了,就跟前面寫的一樣,通常要我傳訊息催她才會錄音(但我超討厭一直催別人做事)。 ↩︎