如何將聲音翻譯成沒有靈魂的0和1?。我們來看看熟悉的裝置:計算機聲音、影片、MP3、廣播和流媒體、各種演算法等等是如何工作的。
本文沒有實用價值,純屬娛樂。
一點點物理知識
聲音是空氣中的振動。就像水面上的波浪,在空氣中。氣壓進入耳朵,耳朵裡有敏感的部分,可以微妙地感受到空氣的振動。這些振動被人們感知為聲音。外太空沒有聲音,因為沒有空氣。
頻率。振動越快,我們感知到的聲音就越弱。一個人感知的振動從每秒 20 次到每秒大約 2 萬次不等。換句話說,這被稱為振盪頻率:赫茲。也就是說,我們聽到的範圍是從 20 赫茲到 20 千赫茲。
相比之下,狗聽到的頻率為 40 赫茲到 60 千赫茲,因此狗的哨聲不會被人類感知,但狗卻能聽到。狗哨的聲音只是在 23-54 kHz 的範圍內。
振幅。振動越強,聲音越大,反之亦然。你可以想象這是池塘表面波浪的高度:可能有小的漣漪(安靜的聲音),也可能有很大的強大波浪。
將聲音分成幾段
現在讓我們這樣做:我們將第二個部分分成 4 個部分,併為每個部分找到幅度值:
我們在一秒鐘內測量了四次波的狀態。這稱為取樣。
我們測量了四個點中每個點的幅度值,相對而言,收到了四個數字:+30、-50、-50 和 -60。從理論上講,如果我們透過電流並將這四個電壓施加到揚聲器上,我們將能夠再現相同的聲音。但是有幾個問題:
• 由於我們只在四個地方測量,錯過了整個振盪。
•我們最終會得到與原始聲音相比非常失真的聲音。
以 4 的速率取樣,對於聲音來說太少了。要獲得至少可以理解的語音,需要將一秒分成 8000 段,而對於音樂,通常 41000 段就足夠了。
讓我們提高取樣率:在同一單位時間內將聲音切成更小的片段:
現在測量會更加準確,產生的聲音也會更加自然。
轉換為數字
在我們將聲音分成小段並測量每個小段的幅度值後,我們可以用表格的形式記錄下來:
時間⠀⠀⠀⠀⠀ 振幅
0.01 秒。⠀⠀⠀⠀ 5
0.02 秒。⠀⠀⠀⠀ 7
0.03 秒。⠀⠀⠀⠀ 10
如果我們把整個聲音分成相等的段,那麼時間就不能寫了,因為我們知道它是如何變化的,在一行中寫振幅值就足夠了:
5 7 10 … −21
為了讓計算機理解這些數字,讓我們把這些數字翻譯成 二進位制數系統。為簡單起見,我們假設一個數字恰好佔用 1 個位元組的記憶體,但實際上,分配給該數字的位元組越多,測量和音質就越準確。翻譯後,我們得到:
00000101
00000111
00001010
…
11101011
計算機已經可以理解並以聲音的形式重現現這個序列。
現在如何播放聲音
• 使用揚聲器或耳機——任何可以“推動空氣”(即產生聲波)的東西。在揚聲器會產生空氣振動。
• 對揚聲器施加一些電流。根據電流的強度,揚聲器音圈會以不同的方式移動。
• 要獲得這種變化的電流,需要一個稱為DAC 的特殊晶片——數模轉換器。它將一個數字作為輸入併產生一個電流作為輸出。所有的智慧手機和電腦都有這些 DAC。
全部的:
1. 處理器將聲音檔案中的數字傳送到 DAC。
2. DAC接收數字並根據這些數字輸出不同的電流。
3. 電流傳輸到揚聲器上。
4. 揚聲器因電力而開始移動揚聲器音盆。
5. 音盆開始推動它前面的空氣,產生聲波。
6. 聲波到達我們的耳朵,我們將它們視為聲音。
下一步是什麼
這種方法有一個問題:檔案太大不方便使用。想象一下:一秒鐘內有 44000 個數字!
為了減小檔案大小,他們提出了兩種解決方案:有失真壓縮和無失真壓縮。下一篇文章將分別分析有失真壓縮和無失真壓縮,儘管它們有很多共同點。
