sound
sound 🚧
sound analysis 🚧
sound synthesis 🚧
audio recording 🚧
audio coding 🚧
speech 🚧
speech analysis 🚧
speech synthesis 🚧
singing voice 🚧

sound 🚧

sound

sound pressure 。

聲波振幅與聲音能量的關係
http://www.indiana.edu/~emusic/acoustics/amplitude.htm

麥克風的構造以及頻率響應
http://www.sounderpro.com.tw/reviw/microphone/mic_01.html

人耳感受空氣振動。模仿人耳耳膜構造,使用一片薄片,測量空氣振動。而物理上測量空氣振動的方式,是測量「壓力」而非「振幅」。

為了配合人類的聽覺系統,壓力值再取 log10 ,變成分貝。

Doppler effect 。

聲源和聽者的速度向量改變之時,播放頻率自動增加減少。

                             音速 - D × 聽者速度 
播放頻率變化值 = 取樣頻率 x ---------------------
                             音速 -     聲源速度 

subharmonic 。

acoustics / computational acoustics

wave equation
acoustic wave equation
mode
http://www.acs.psu.edu/drussell/demos/membranecircle/circle.html
sound resonance
sound focusing
Helmholtz resonance

sound analysis 🚧

audition

equal-loudness contour :相同響度等高線圖。

這是原創者的版本,稱作 Fletcher–Munson curves 。

這是國際標準 ISO 226:2003 ,做了訂正、做了外插。

橫軸頻率,縱軸聲壓。對數尺度,橫軸調整格線間距,縱軸數值取對數算分貝。頻率 1000Hz 作為基準,聲壓逐步增加 10dB 。

測試過程如下。先播放頻率 1000Hz 、聲壓 0dB ,作為基準。再播放另一個頻率、微調聲壓,直到受試者認為兩個聲音一樣大聲(響度相同),畫成一個函數點。重複上述步驟,枚舉各種頻率,畫成一條函數曲線,稱作相同響度曲線(最底部曲線)。

第二輪,聲壓增加 10dB 。先播放頻率 1000Hz 、聲壓 10dB ,再播放其他頻率、微調聲壓。最後畫成一條曲線(底部數來第二條曲線)。全部曲線構成等高線圖。

最底部曲線、最頂部曲線(人類聽覺範圍,最小聲壓和最大聲壓)
左端曲線陡升、右端曲線陡升(人類聽覺範圍,最小頻率和最大頻率)
曲線兩側高中央低(人類對高頻低頻的聲壓感受較弱。也許是防衛機制。)
左下區塊,空白直角三角形(聽不見)
左上區塊,曲線密集(分辨能力差,聽起來差不多大聲)
中央區塊,曲線大致水平且等距(分辨能力佳,呈對數尺度)
4000Hz垂線,曲線共同低谷(聽覺最靈敏,可以聽到並分辨微小聲音)
最底部曲線低谷甚至低於0dB(用了1000Hz的人類聽覺最小聲壓當作分貝的分母)
祝你考試一百分。

absolute threshold of hearing

auditory masking

equivalent rectangular bandwidth

gammatone

G(f) =  [ 1 + j(f-fc) / b(fc) ] ^ -N   (0 < f < oo)   N = 4
ERB(f) = 0.108f + 24.7
https://auphonic.com/blog/2012/08/02/loudness-measurement-and-normalization-ebu-r128-calm-act/
https://www.zhihu.com/question/20591198/answer/85277089
http://www.newgrounds.com/portal/view/636785

同時播放兩種頻率的聲音,聽覺可能取決於:相對頻率、絕對頻率、音色。可能不能明確二分。

是否在相同頻帶。

dichotic listening test

auditory scene analysis

聽覺景象分析。人類會理解聲音,並且自動控制自己去聆聽哪些聲音。聽覺景象分析,就是在發掘理解與聆聽的機制。屬於醫學與心理學的領域。

人類的聽覺不見得只依賴耳膜振動。人類的聽覺通常受其他感官影響,甚至很可能有人類尚未確認的感官(例如中醫說的氣、後眼等等)。然而計算學家的當前進度,僅僅分析了麥克風(模仿耳膜振動)汲取到的數據。

sound source separation

聲源分離。區分不同種類的聲音,將每一種聲音分離獨立出來。

sound source localization

聲源定位。掌握聲音的遠近、來源。

sound synthesis 🚧

sound propagation

聲音傳播。根據物理原理,調整聲音。

sound rendering

聲音描繪。根據物理原理,產生現實生活的聲音。

振動產生聲音。

integrate { (eigenfunction)^2 * dV }
sum the amplitude for all position ---> sound intensity

sound filter

audio recording 🚧

stereophonic sound

audio panning

單聲道變多聲道。適當調配比重。

head-related transfer function

head-related impulse response

surround sound

3D sound localization

3D sound reconstruction

audio coding 🚧

audio coding

編碼。將聲音變成二元碼,以便存檔、傳輸。

audio compression

壓縮。主要的應用是聲音檔案,盡量減少檔案容量、盡量維持聲音品質。例如大家耳熟能詳的 MP3 、 AAC 。

如果你想要研究原始碼, MP3 可以參考 LAME , AAC 可以參考這個表格

audio player

播放器。播放音樂,一幀一幀處理。沒什麼特別的。知名應用是隨身聽。

開發韌體時,從硬碟或網路讀取聲音資料、將處理後的聲音資料傳送到音效卡,兩者的時間是不同步的,前者斷斷續續,後者必須連續。此時你需要一個 circular queue 作為緩衝。 circular queue 和 frame 的相對大小,決定了播放品質。

audio stream

串流。主要的應用是線上音樂。例如背景雄厚的 KKBox 和被人告發的 Now.in

我沒有研究背後技術。估計黑白兩道的問題遠比技術問題困難的多。

audio surveillance

聲音監控。大致上有如 visual detection 、 visual tracking 、 …… 的發展路線。

https://arxiv.org/abs/1409.7787

speech 🚧

speech

語音。人類說話聲音。 audio 與 text 兩大領域的合體。

articulation

發音。以聲帶發出聲音,以喉腔、鼻腔、口腔、舌頭、牙齒、嘴唇調整聲音。整體稱做聲道 vocal tract 。

http://www.cs.princeton.edu/~prc/SingingSynth.html

phoneme / syllable

音素。ㄅㄆㄇㄈ …… ㄢㄣㄤㄥㄦ。

音節。例如ㄏㄠ ˇ 、ㄎㄜ ˇ 、ㄞ ˋ 。中文很特別,一個中文字一定是一個音節。唯一例外是兒化音:尾端連著ㄦ音。不過台灣人不說兒化音。

語言學以音素為基本單位,計算學則傾向以音節為基本單位。兩個音素拼在一起,仔細觀察波形,中間有著過渡過程,中間有著連續變化。各種拼法、各種變化,難以分解,只好視作一個整體,以音節為基本單位。

一、音節變成聲音訊號:

理論上必須模擬口腔、舌頭、送氣。至今無人成功。

實務上是真人錄音。人工朗讀四百餘種音節,儲存成聲音檔案,建立音節與聲音檔案的對照表。

二、聲音訊號變成音節:

理論上必須分析各種音節的波形特性。至今無人成功。

實務上是分類演算法。給定一種音節的聲音訊號,切 frame ,求聽覺特徵 MFCC ,額外綜合一次微分、二次微分,用 DCT 壓縮,得到一串數列(一項是一個向量共 39 個係數,一項是一個 frame )。套用數列分類演算法 hidden Markov model 或者 neural network ,辨識音節。

知名工具 HTKlibdnnKaldi ,大可不必自己實作。

之所以採用分類演算法、採用機率模型,是因為要包容每一個人的說話腔調。

延伸閱讀: phonetic transcription

音標。音素所對應的文字符號。以文字記載發音方式。

音標已有國際標準,稱作國際音標,可以表示全世界所有語言的發音。中文並未使用國際音標,而是自創拼音(中國)注音(台灣)。本篇文章採用後者。

延伸閱讀: vowel / consonant

元音與輔音。母音與子音。不好解釋,請讀者自己查資料。

注音(台灣)的聲母ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ …… ,介母與韻母ㄧㄨㄩㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦ,不等於子音和母音。

母音,嘴巴有送氣,聲帶有震動,能明顯看到 pitch 。子音,嘴巴有送氣,聲帶無震動,抓不太到 pitch 。根據嘴巴送氣的方式,子音區分成爆音、摩擦音、氣音。

既然以音節為基本單位,那麼母音子音不太重要。不過還是稍微提一下如何辨識母音子音。

一、辨識母音,可以使用 F1-F2 vowel chart 。

二、辨識子音,可以使用 voice onset time :氣流通過與聲帶震動的時機。清音濁音可以套用 voice onset time 的概念來分類。

不過想藉由聲音訊號計算出 voice onset time ,幾乎是天方夜譚,因為麥克風偵測不太到嘴巴送氣,只偵測的到聲帶震動。如果可以加個氣流計,肯定有幫助。

目前已有軟體產品 SpiroSmart ,從聲道共振,反推氣流大小。

tone

聲調。單一音節的頻率變化。

普通話(中國)、國語(台灣)的聲調,共四種,即是一二三四聲。注意到輕聲不是聲調,輕聲是音量較低。粵語的聲調,共九種。閩南語的聲調,共七種。都不好學。

世界上大部分的語言都缺乏聲調,他們的聲調僅僅是多音節單字的頻率起伏。日語只有持平、上揚、下降,例如「あめ」,下降是「下雨」、上揚是「糖果」。英語只有持平、主重音、次重音,例如「 present 」,主重音在前是「現在」、主重音在後是「呈現」。

大部分的語言都缺乏聲調。聲調不是顯學,聲調沒有知名演算法。讀者請自行搜尋期刊論文。

http://person2.sol.lu.se/SidneyWood/praate/wavformedform.html
https://speechformants.files.wordpress.com/2007/12/methods-of-formant-tracking-fadhlis.pdf

下面是「紅豆生南國,春來發幾枝」。綠色線是音量( dBSPL )。黃色線是音高( F0 )。音高不變就是一聲、音高上升就是二聲、音高下降就是四聲、下去再上來就是三聲。

🗎

延伸閱讀:歌曲與聲調

歌曲常常受到聲調影響。

音階的頻率是固定不動的,聲調的頻率是一直變動的,兩者互相衝突。唱歌時,若想講求音準,就不能做聲調變化。

中文歌曲不做聲調變化,很難聽得懂歌詞;若做了轉音技巧,更加聽不懂。英文歌曲不做聲調變化,仍然聽得懂歌詞;若做了轉音技巧,更加好聽。

常有人說:中文歌曲不看字幕根本聽不懂在唱什麼;英文歌曲轉音好美、爆發力十足。這種崇洋媚外的心理,原罪就是聲調。

想要解決聽不懂的問題,最好的解決方式是在編曲填詞之時,仔細考慮聲調(以及稍後提到的韻律),讓樂曲的音階變化符合歌詞的聲調變化。經典範例是江蕙的家後,唱歌即唸歌,十足有味道。

國語流行歌手所寫的台語歌,常常讓人覺得缺乏味道,正是因為沒有考慮聲調。

prosody

韻律。說話的節奏和聲調。說話的抑揚頓挫。

例如口語說「星期天我們去郊遊」,「星期天」速度輕快,「我們」相對地緩慢沉重。

語言學家自有一套解釋韻律的方式。由於這不是我的專長,就不多提了。計算學家解釋韻律,只能從聲音訊號的基本要素下手:音量變化、音高變化、發聲長短。例如口語說「可愛」與「真可愛」,通常後者的「可」字時間較短、音高較低、音量較低。

這三者當中,目前研究最多的是音高變化。針對 F0 變化。知名的模型是 PENTA modelFujisaki model ,大膽假設 F0 的變化是由那些因素造成的。

韻律可以比擬成語言的風格。相近的文化人種,韻律多半相似。心情起伏、健康好壞,韻律經常隨之變動。計算學也許可以解析這些事情。不過台灣沒人用計算學研究韻律,台灣最接近的單位是中研院語言學研究所。

使用現成工具處理語音

知名的語音處理工具有 PraatSFSVOICEBOX

speech analysis 🚧

voice activity detection

聲音活動偵測。判斷是否正在說話。

1.
butterworth 低通濾波器就是k點平均數,篩選頻率44100/k
公式 y[i] = a1*x[i+1] + a2*x[i+2] + ...
            b1*y[i-1] + b2*y[i-2]
篩個400Hz可做VAD
用滑動視窗求441點訊號(0.01秒)的平方和當作個準則

2.
先LPC再做FFT,頻譜會比較圓滑,第一高峰第二高峰就是F1與F2。
http://clas.mq.edu.au/acoustics/speech_spectra/fft_lpc_settings.html
44100Hz成年大叔44+2個,成年大姐姐36+2個
http://mi.eng.cam.ac.uk/~ajr/SA95/node38.html

a = lpc(hamming(512) .* sig, 16);
h = (1 ./ fft([a zeros(1, 512-17)])).';

3.
訊號/頻譜平方和,算10log10(sum)

voice quality testing

聲音品質測試。判斷說話是否清晰。

經典的品質指標是 PESQ

speaker verification / speaker recognition

語者驗證、語者辨識。分辨說話的人是否本人、是哪一人。

早期做法是找共振峰。近期做法是 embedding ,例如 joint factor analysis 與 i-vector 。最新做法是 neural network ,例如 WavLM

語者辨識的應用是身分鑑識,類似指紋辨識。

speaker diarization

尚無中譯。從多人對談當中,分辨每個人在什麼時間、說什麼話。

speech verification / speech evaluation

語音驗證、語音評分。判斷當事人說話是否標準、有多標準。

目前做法是比對數列的演算法 dynamic time warping 、分類數列的演算法 hidden Markov model 、 neural network 。音高、 F1-F2 圖也許有幫助。

實際應用如英語學習軟體、聽障人士的語言訓練。

speech emotion recognition

語音情緒辨識。從當事人的說話聲音,了解其心情。

已經有人建立語音情緒的聲音資料庫。目前做法是直接套用 classification 演算法,缺乏內涵。

speech synthesis 🚧

speech synthesis ( text-to-speech )

語音合成。文字變成聲音訊號。經典演算法是 MBROLA 。知名專案是 Tacotron

台灣國語由工業研究院網際智慧(自然輸入法)解決,台灣話由意傳科技解決,沒有對外公開技術。我推測的作法是:

一、人工朗讀四百餘種音節(甚至兩音節、三音節),儲存成聲音檔案。
二、建立中文字(詞)與音節的對照表。
三、以自然語言處理的演算法,進行分詞。
四、汲取對應的聲音檔案。
五、適當調整音高、音量、音長,符合台灣人說話韻律。

也有基於訊號處理的語音合成演算法,不過都有點舊了:

1. VOSIM
https://www.cs.cmu.edu/~music/icm-online/readings/icm-week-9.pdf

2. Formant Wave Function Synthesis
http://www.music.mcgill.ca/~gary/courses/projects/307_2022/Huang_MUMT307_FinalProjectReport.pdf
https://github.com/HuangYifan-Emma/FOF-synthesizer

3. McAulay–Quatieri Partial Tracking Analysis/Synthesis (HMM)
https://www.clear.rice.edu/elec301/Projects02/lorisFor/mqmethod2.html
peak detection + peak continuation = partial tracking

4. Spectral Modeling Synthesis
https://en.wikipedia.org/wiki/Spectral_modeling_synthesis

函式庫、工具:

https://itinerarium.github.io/phoneme-synthesis/
https://www.masswerk.at/mespeak/
https://github.com/numediart/MBROLA

專案:

https://github.com/microsoft/unilm
https://valle-demo.github.io/

語音合成非常實用。例如機場與火車的時刻地點廣播、服務專線、文章朗誦、盲人網頁瀏覽器、電子字典(不過現在都是真人發音居多)、機器人、初音未來等等。

speech recognition ( speech-to-text )

語音辨識。聲音訊號變成文字。

Mozilla 正在建立公開的語音資料庫,讓大眾有機會發展自己的語音辨識演算法。

目前做法是將問題分成聲音與文字兩大部分,依序擊破。

聲音部分:聲音變成音節。
文字部分:音節變成文字。即是輸入法!

聲音部分。給定聲音訊號,切 frame 、算 MFCC 、用 DCT 壓縮,得到一條數列(一個數值對應一個 frame ,數值是向量),套用數列分類演算法 hidden Markov model 或者 neural network ,得到音節。知名工具 HTKlibdnnKaldi

文字部分。建立大型語料庫,統計每個詞彙的出現頻率,套用 n-gram 或者 directed acyclic graph ,統計最有可能出現的句子。知名工具 NLTKCoreNLP

大型語料庫是搜尋引擎公司的絕活,導致語音辨識過程必須透過網路:先在手機解決聲音部分,再上傳谷歌解決文字部分。一來是讓大家使用最新的語料庫、辨識流行關鍵字,一來避免大家拷貝整個語音辨識程式。

語音辨識應用非常廣泛。例如自動生成字幕:

語音查號:

語音搜尋:

語音揀貨:

語音控制:

終極目標是靠一張嘴寫程式。另外,語音辨識也可以作為關鍵步驟,發展其他功能,諸如語音翻譯、語音轉手語。

speech translation ( speech-to-speech )

語音翻譯。語音變成文字、翻譯文字、文字變成語音。

科學家和工程師正在克服這個問題!

speech summarization

語音摘要。找到說話內容重點。

其實就是文字摘要,另外再考慮語調、情緒等等。我不清楚有沒有人做。

time-compressed speech

長話短說。

singing voice 🚧

vocoder

聲碼器。人聲實施聲音特效。知名專案是 WORLD

改變頻率高低之後,聽起來宛如變性。一般來說男生低、女生高,所以調高頻率後聽起來像女聲,調低頻率後聽起來像男聲。

vocal effect

人聲特效。

vocal technique      發聲技巧
singing technique    歌唱技巧
vocal effect         人聲特效
vibrato        抖音
runs and riffs 轉音
falsetto       假音
whistle        海豚音
modal 
vocal fry      氣泡音

singing voice correction ( pitch correction )

校正音高。音痴救星。偶像歌手必備工具。知名軟體是 Auto-Tune 。

校正之後再合聲,難聽的聲音的也會變得好聽,單調的曲子的也會變得豐富。所有流行歌曲都是這樣處理。大家也都習慣聽造假的聲音。

singing voice synthesis ( speech-to-singing )

文字轉歌曲。給定樂譜和文字,變成歌聲。

目前做法是直接錄製人類發聲(略過 text-to-speech ),然後套用 vocoder 調整節拍和音高。

知名專案是 VOCALOID 初音未來、 UTAU 夏語遙、 CeVIO 。夏語遙官方網站提供了人類發聲的聲音檔案。

至於拉丁語系的音節系統也有人做,例如 oddcast

singing voice recognition ( singing-to-speech )

歌曲轉文字。

知名的應用是伴唱帶。

singing voice separation

歌曲分離出人聲與伴奏。

知名的應用是伴唱帶。