為何合成而非打字
文字準確,但嗓音遠不止於其逐字稿。直接合成的目標,是連同韻律、重音與對話中快速你來我往的節奏,一併還原使用者本人的嗓音——一個隨意圖展開而即時串流聲音、而非等整句完成才輸出的即時語音 BCI。對許多使用者而言,重點在於找回一個富表現力、屬於自己的嗓音,而不只是傳達訊息。
合成管線
合成串接兩個習得的映射與一個聲碼器。一個神經網路把神經特徵 r_{1:T} 轉成中介的聲學表徵——梅爾頻譜(或先經第二篇的構音瓶頸,轉成聲道動作學)——再由神經聲碼器 g_\phi 重建波形:
\hat{m}_{1:T} = f_\theta(r_{1:T}), \qquad \hat{s} = g_\phi(\hat{m}_{1:T}), \qquad \mathcal{L} = \sum_{t=1}^{T} \bigl\lVert m_t - \hat{m}_t \bigr\rVert_2^2神經到梅爾到波形。解碼器 f_\theta 以對梅爾目標的迴歸訓練;聲碼器 g_\phi(WaveNet 或 HiFi-GAN 風格的模型)把頻譜框還原成音訊。
直接語音合成走的是「神經 → 梅爾頻譜 → 聲音」。解碼器藉由對準一個目標,學會把腦活動轉成頻譜框,而聲碼器再把這些框還原成可聽的波形。
- r_{1:T}
- 隨時間的神經訊號。
- \hat{m}_{1:T} = f_\theta(r_{1:T})
- 由解碼器 f_\theta 預測出的梅爾頻譜。
- \hat{s} = g_\phi(\hat{m}_{1:T})
- 由聲碼器 g_\phi 產生的波形。
- \mathcal{L} = \sum_{t=1}^{T} \lVert m_t - \hat{m}_t \rVert_2^2
- 相對於真實頻譜的平方誤差。
解碼器逐框被評判「它的頻譜與真實頻譜有多接近」——這是直接語音合成的目標。
即時閉合迴圈
一旦閉合迴圈,一切都不同了。離線時,你從預先錄好的神經資料重建音訊,再從容評分。線上時,使用者在不到一秒內聽見自己合成的嗓音並隨之調整——這正是閉迴路 BCI的定義。這要求整條鏈路都受嚴格的延遲預算約束:
t_{\text{loop}} = t_{\text{acq}} + t_{\text{feat}} + t_{\text{dec}} + t_{\text{synth}} \;\lesssim\; 50\text{--}100\ \text{ms}粗略的即時預算:擷取、特徵抽取、解碼與合成加總,每框應維持在數十毫秒內,才能讓人感覺即時、並支撐自然的對話輪替。
要讓合成語音感覺即時、並允許自然的一來一往,每一階段——擷取訊號、抽取特徵、解碼、合成——加總起來每一框都不能超過數十毫秒。
- t_{\text{loop}}
- 每一框的總來回延遲。
- t_{\text{acq}} + t_{\text{feat}} + t_{\text{dec}} + t_{\text{synth}}
- 四個階段的時間:擷取、特徵、解碼、合成。
若光是擷取就吃掉 40 毫秒,其餘三個階段就得共用剩下的迴路延遲預算。
聲調、韻律與多語言語音
韻律並非裝飾。在聲調語言——華語、粵語、台語——中,音高曲線是辨義的:同一個音節換個聲調就是不同的字。因此聲調與多語言解碼必須還原設定音高的喉部控制,而不只是音段層次的發音姿勢。文字解碼器可以倚賴語言模型從上下文消解聲調歧義,但合成解碼器則必須在物理上把音高做對,否則輸出便無法聽懂。
靜默與內在言語
最後談輸入端。靜默語音介面解碼的是不產生聲音的嘗試發聲——即癱瘓使用者的情況——而它之所以運作良好,正是因為通往 vSMC 的運動驅動依然存在且有組織。內在(默想)言語完全沒有構音嘗試,則是另一頭困難得多的野獸:訊號更弱、更因人而異、空間結構性遠遠不足,目前的效能也相應偏低。嘗試相對於想像的抉擇,是語音 BCI 中影響最深遠的單一設計決策——它同時決定了你的效能上限與你的倫理處境。