于方軍 賈剛
聲音文件可以簡單看是一組頻率、響度、音色構成的數(shù)據(jù),這些數(shù)據(jù)遵從一定的規(guī)律按照時間維度組織起來,就構成了音樂和語言,由于增加了時間維度,所以它不像圖像那樣用一張紙就能保存下來。在物理學中,關于聲音的描述是它由物體振動產(chǎn)生的,振動的本質是位移關于時間的函數(shù)。在現(xiàn)實生活中,聽到的聲音信號都是隨時間連續(xù)變化的,這種信號叫模擬信號,而計算機存儲和使用的都是數(shù)字信號,所以需要把模擬信號轉化成數(shù)字信號后才能在計算機中使用。
本文將以聲音數(shù)據(jù)為核心,探尋如何對聲音進行數(shù)字表示與處理,并通過開源硬件實驗讓學生體驗音樂的構成。
● 聲音編碼:模擬聲音的數(shù)字化過程
模擬聲音轉化為數(shù)字信號分為采樣、量化、編碼三個過程,如圖1所示。在計算機上錄音就是把模擬聲音信號轉換成數(shù)字信號,而播放時則是把數(shù)字信號還原成模擬信號輸出,這兩個過程一般通過計算機上配置的聲卡來實現(xiàn)。采樣過程是按照一定的時間間隔在連續(xù)的波上進行間隔取值,如圖1取了10個樣。1秒鐘采樣次數(shù)稱為采樣頻率,常用采樣頻率有8kHz、11.025kHz、32kHz、44.1kHz、48kHz等,8kHz就是1秒鐘采樣8000次,采樣頻率越高,聲音的還原就越真實越自然,但數(shù)據(jù)量就會越大。量化過程就是給縱坐標定一個刻度,記錄每個采樣的縱坐標值。編碼過程是將每個量化后的樣本值轉換成二進制編碼。而整個數(shù)字化過程就是將所有樣本二進制編碼連起來存儲在計算機上,這樣就把模擬信號轉換成了數(shù)字信號。
● 聲音讀?。河贸绦蜃x取一段音頻文件
標準的Python包含Wave庫,且支持wav格式的音頻文件的讀寫,wav文件由頭部信息和音頻采樣數(shù)據(jù)構成,前44個字節(jié)為頭部信息,包括聲道數(shù)、量化位數(shù)、采樣頻率、采樣點數(shù)等信息,后部為音頻采樣數(shù)據(jù)。用Python讀取Scratch圖形化編程中的小貓叫文件Meow.wav的相關參數(shù),如圖2所示。
f.getparams()可以獲取音頻的屬性參數(shù),其中比較關鍵的是聲道數(shù)(nchannels)、量化位數(shù)(sampwidth)、采樣頻率(framerate)、采樣點數(shù)(nframes)等,本音頻文件是1個聲道,量化位數(shù)是2B(也就是用2個字節(jié)16位二進制數(shù)據(jù)表示聲音縱坐標),采樣頻率為11025,一共采樣6512個數(shù)據(jù)點。利用這些數(shù)據(jù)我們可以計算聲音文件的一些信息,如用采樣數(shù)據(jù)點數(shù)除以采樣頻率:6512/11025=0.5906,得到聲音播放時長約為0.59秒。接著,用每個采樣點的時間作為橫坐標,每個時間點的聲音數(shù)據(jù)作為縱坐標,就能做出聲音波形,如圖3所示。
● 聲音修改:觀察聲音變化
可以用代碼改變數(shù)組中某一段采樣點數(shù)值,如1000~1500采樣點值都改為0(如圖4),重新繪制波形文件后會發(fā)現(xiàn)波形圖像中間少了一段,重新生成wav文件播放,會聽到中間有一段是沒有聲音的。
● 聲音重寫:用計算機數(shù)據(jù)方式生成音樂
下面,用wave庫寫一段音樂(歌曲《兩只老虎》的第一句),如下頁圖5所示。
代碼中先定義一個寫音符函數(shù),函數(shù)包含每個音符時長、音調、采樣頻率、文件、音量、量化位數(shù)6個參數(shù)。在寫入lzlh.wav文件時,要把聲道數(shù)、采樣頻率、量化位數(shù)規(guī)定好,寫入文件頭中,完成后可以用播放器打開生成文件試聽效果。
● 聲音交互:用掌控板做一個趣味鋼琴
用掌控板模擬鋼琴演奏,是通過觸摸p、y、t、h、o、n按鍵,讓蜂鳴器發(fā)出Do、Re、Mi、Fa、So、La的聲音。如果要做得更有趣味性,可以在掌控板的OLED屏上顯示模擬鋼琴圖片,并在鋼琴鍵上顯示提示音符。為了確定“鋼琴”是否按下,按的是哪一個音符,可以在觸摸按鍵時在對應位置顯示模擬手指。
為了簡化代碼,我們只顯示按鍵演奏對應音符部分代碼,代碼用mPython完成,如圖6所示,通過對比圖形化代碼塊和純代碼編程,學生更容易理解程序的邏輯構成,并發(fā)現(xiàn)每一個音符對應一組數(shù)據(jù),如C4中音Do對應(262,500),代表該音符頻率是262hz時長是500毫秒,完成后就可以用它彈奏簡單樂曲。
至此,從讀取、修改、重寫三個維度展現(xiàn)了數(shù)據(jù)的編碼、改寫、仿真的過程,最后通過一個創(chuàng)客作品完成了聲音交互的作品的設計,如圖7所示。通過本案例實驗,學生會發(fā)現(xiàn)聲音文件的處理與圖像文件的處理有著相同的方式,都需要把模擬信號轉成計算機識別的數(shù)字信號,轉換成相關的二進制編碼。
數(shù)字技術的發(fā)展給我們提供了一種更好地處理信息的方式。把各種信息轉換為二進制代碼的形式會更方便保存和遠距離傳播;反之,進行模擬輸出時還要經(jīng)過一個數(shù)模轉換的過程。理解了這兩個過程,學生就會更好地理解基于計算機技術的人工智能是如何感知周圍環(huán)境信息并做出反應的。這也是進一步理解語音識別相關技術的基礎。