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 🚧
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 ,辨識音節。
知名工具 HTK 、 libdnn 、 Kaldi ,大可不必自己實作。
之所以採用分類演算法、採用機率模型,是因為要包容每一個人的說話腔調。
延伸閱讀: 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 model 、 Fujisaki model ,大膽假設 F0 的變化是由那些因素造成的。
韻律可以比擬成語言的風格。相近的文化人種,韻律多半相似。心情起伏、健康好壞,韻律經常隨之變動。計算學也許可以解析這些事情。不過台灣沒人用計算學研究韻律,台灣最接近的單位是中研院語言學研究所。
使用現成工具處理語音
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 ,得到音節。知名工具 HTK 、 libdnn 、 Kaldi 。
文字部分。建立大型語料庫,統計每個詞彙的出現頻率,套用 n-gram 或者 directed acyclic graph ,統計最有可能出現的句子。知名工具 NLTK 、 CoreNLP 。
大型語料庫是搜尋引擎公司的絕活,導致語音辨識過程必須透過網路:先在手機解決聲音部分,再上傳谷歌解決文字部分。一來是讓大家使用最新的語料庫、辨識流行關鍵字,一來避免大家拷貝整個語音辨識程式。
語音辨識應用非常廣泛。例如自動生成字幕:
語音查號:
語音搜尋:
語音揀貨:
語音控制:
終極目標是靠一張嘴寫程式。另外,語音辨識也可以作為關鍵步驟,發展其他功能,諸如語音翻譯、語音轉手語。
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
歌曲分離出人聲與伴奏。
知名的應用是伴唱帶。