目錄spa
IIS是飛利浦公司開發的一種用於數字音頻設備之間進行數據傳輸的總線,IIS只負責音頻數據的傳輸,對音頻的控制須要另外的芯片來控制,通常聲卡都會有IIS接口和控制接口,二者共同協做來完成聲音數據的傳輸和控制。如圖 11所示:
圖 11 聲音傳輸示意圖
主要介紹數字聲音的幾個指標:
採樣頻率fs就是錄音時每秒對聲音信號的採樣次數,播放時最好也以採樣頻率播放,不然聲音聽起來會變音。常見的採樣頻率有22.050kHz、44.100kHz、48.000kHz等。
量化位數指對聲音採樣結果用幾位數據保存,這和聲卡中的ADC的位數相關,常見的有8位、16位等。
分爲單聲道和雙聲道,雙聲道就是左右兩個聲道,又稱爲立體聲,另外更高級的有5聲道和7聲道。
單聲道聲音採樣如圖 21所示,橫軸表示時間,縱軸表示採樣結果,藍色線條表示聲音的原始波形。
圖 21 聲音採樣示意圖
如圖 31所示,WAV音頻文件由3部分組成:頭部區域、格式描述區域和數據區域。其中格式區域記錄了音頻的聲道數、採樣頻率、和量化位數等信息,數據區域記錄了聲音的數據,這些數據是原始數據,沒有通過壓縮的。像mp3等格式的音頻文件中的數據都是通過壓縮的數據。
圖 31 WAV文件格式
如圖 32所示,爲4種狀況下WAV文件中音頻數據的組織方式。
圖 32 WAV聲音數據組織方式
如圖 41所示,在mini2440中,聲卡的型號爲UDA1341TS,和IIS接口相關的有5根線,還有另外3條線用於音頻控制。
圖 41 聲卡鏈接圖
CDCLK:聲卡工做時鐘,通常爲採樣頻率的25六、38四、512倍,即256fs、384fs、512fs
I2SSCLK:數據串行時鐘,數值爲量化位數*聲道數*採樣頻率。若是量化位數爲16,聲道數爲2,則I2SSCLK=32fs
I2SLRCLK:左右聲道切換頻率,該數值應等於採樣頻率
I2SSDI:音頻數據輸入,即由聲卡傳輸數據給2440,錄音狀態
I2SSDO:音頻數據輸出,即由2440傳輸數據給聲卡,播放狀態
控制接口:根據聲卡的不一樣,接口也不一樣,好比有的是I2C接口,有的是L3接口,具體看聲卡手冊。控制接口主要控制聲音的音量,是否靜音,增益等。
播放和錄音時,三個時鐘頻率要設置正確,不然沒有聲音或者聲音失真。
SylixOS下的OSS音頻驅動接口能夠在SylixOS\system\device\sound\soundcard.h中查看,主要有幾點須要注意:
播放和錄音是經過讀寫/dev/dsp設備來實現的
音量、增益等控制是經過讀寫/dev/mixer設備來實現的
應用程序經過ioctl來進行參數設置、控制等操做,而且具體操做對應ioctl中的命令都在soundcard.h定義好了,好比:
設置量化位數是用"SNDCTL_DSP_SETFMT",設置採樣頻率是"SNDCTL_DSP_SPEED",設置音量是用"SOUND_MIXER_WRITE_VOLUME"等等。
1. CPU從上層拷貝音頻數據到緩衝區,拷貝完成一個緩衝區後發送一個DMA傳輸請求,這時DMA開始傳送剛剛拷貝好的緩衝區數據,同時CPU繼續從上層拷貝音頻數據到下一個緩衝區,如圖 61所示。
圖 61 CPU拷貝,DMA傳輸
2. CPU拷貝數據的速度是比DMA傳送數據速度快的,因此當發生CPU要拷貝到的緩衝區和DMA當前正在處理的緩衝區重疊時,須要阻塞線程,這是經過信號量實現的,如圖 62所示。
圖 62 阻塞線程
3. 當DMA傳送完成後產生中斷,在中斷處理程序中喚醒剛纔阻塞的線程,CPU就能夠繼續拷貝數據到剛纔DMA處理的緩衝區裏了,如圖 63所示。
圖 63 喚醒線程
錄音的流程和播放流程大致類似,只是先由DMA傳送數據到緩衝區,而後由CPU拷貝緩衝區內容給上層應用程序。當CPU處理的緩衝區和DMA當前處理的緩衝區重合時,一樣阻塞線程,直到DMA處理完後在中斷中喚醒。