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

歌曲分離出人聲與伴奏。

知名的應用是伴唱帶。