不同的聲音是怎麼存儲的啊?
我可以理解音調的存儲,但是不同的讀音是怎麼存儲的啊,比如我說"一"和"二",用相同的音高,音色發出,它們在存儲的時候有什麼不同嗎?
首先你說「一」和「二」的時候,發出的並不是純音,而擁有非常豐富的頻率成分,就算只考慮基頻,在說普通話的情況下,「一」的發音勉強可以認為是相同的基頻,但「二」是四聲,不可能保持基頻不變。發出這兩個讀音的時候頻率成分的差別就更大了。
想必題主問的是數字音頻的儲存,為此我們邀請居住在Adobe星球的Microsoft Lily老師來幫我們做一個實驗。
可以看出在200Hz和400Hz之間有大量的能量,也能看出來基頻可以認為是保持不變的。
可以很明顯看出「二」的頻譜特點與「一」有很大不同,在頻譜里可以看出發音過程中頻率也就是音調的高低變化,最後明顯的下降趨勢就是所謂的四聲了。
其實波形不同,那麼時域上每一點的採樣值就會不同,儲存的結果自然也不同,問題到此已經解決了。但是我們還可以做得更直觀一點。
然後我們選取相同的長度,0.42s,用相同的標準儲存著兩個文件。
然後用Matlab導入,可以方便的查看具體的量化數據。
可以看出來,在44100hz的採樣率、32bit量化深度下,0.42秒的雙聲道wav文件,在計算機里就是儲存為18522×2=37044個浮點數,外加少量的wav文件編碼信息。這些浮點數在經過相應的編碼方式變成0和1就可以儲存在硬碟和內存中了。
打開後你甚至可以查看這些數字到底是多少。
所以最後的結果是:
(本來我把所有的數值都粘到知乎編輯器的代碼塊里了,結果提交的時候說字數超出限制……)
(那就看個圖意思一下好了)
後面的「0」對應的就是語音說完後,這0.42秒時間內餘下的靜默時間,因為語音是電腦生成的,沒有其他的噪音,所以採樣值全都是0。
所以,Lily老師的「一」和「二」最終存儲的結果就是這樣的數字了,這麼牛逼的數字,每行都有18522個哦。
- 聲音是一種一維波(實際上現實中的聲音是一種三維縱波,但記錄在電腦中的聲音是每個聲道為一個一維波,通過立體聲以及環繞聲等技術模擬現實中的三維立體感)
- 既然是一維波,那就可以以等時間間隔採樣成一維離散信號
- 採樣以後的數據通常用 PCM 格式存儲,當然如果是 wav 等文件格式,還需要加一個頭部用來存儲一些元信息,如採樣率、聲道數等等
- 如果經過壓縮,那就不是 PCM 格式,但一般可以解碼成 PCM
- 當然,也有非典型的採樣方法,如 DSD
人聲一與二是音色與音調的差別,本質上是泛音列的差別。
不嚴謹的舉個例子(因為人說話相比樂音來講沒有固定音高),就像鋼琴彈一個do,小提琴拉一個do si,只是很久之前人們就把鋼琴的do規定為一,小提琴的do si 規定為二罷了推薦閱讀:
※HBase底層基於HDFS, 它們是對數據存儲,組織,提供介面的一種方式,有了文件系統為何要有資料庫?
※UWP 的應用程序存儲區有什麼區別?
※不在系統中"彈出"U盤就拔出U盤,是否會損壞U盤?
※怎麼讓我媽媽相信把文件存在網上沒有安全問題?
※內存條改造為U盤可行嗎?