1.1 WINCE的聲音模型
标準的WINDOWS CE下的聲音處理模型。
1) 聲音應用在使用WAVE接口函數的時候被COREDLL子產品分了類:如果是簡單的PCM資料,則直接進入ADM子產品,進行SoftWare Mixer或者連Mixer也省了,直接調用Driver放音;如果是壓縮模式的資料則進入ACM子產品進行解壓處理後(比如:GSM/G7XX等等…)再次進入ADM子產品。 此外,如果DRIVER支援硬體的Mixer,則應用層直接Bypass掉ACM和ADM,直接進入到驅動進行軟體或者硬體進行混音和放音。
2) ACM、Software Mixer都是可選配單元,可以通過系統資料庫或者CE核心配置參數添加或者删除。
1.2 WINCE的聲音驅動模型
l 分層模型
這是一個标準的分層 MDD-PDD 流式接口模型。 應用層的WAVEAPI都使用WaveAPI Manager(WaveApi.DLL)通過DeviceIOControl映射成為WAV_IOControl函數進行處理。
MDD層是微軟的标準實作,通過DDSI (device driver service-provider interface )和PDD層實作進行連接配接。MDD通過消息來通知PDD層(PDD_WaveProc處理)
MDD層接口函數
· WAV_Close
· WAV_Deinit
· WAV_Init
· WAV_IOControl
· WAV_Open
· WAV_PowerDown
· WAV_PowerUp
· WAV_Read
· WAV_Seek
· WAV_Write
DDSI接口函數
· PDD_AudioDeinitialize
· PDD_AudioGetInterruptType
· PDD_AudioInitialize
· PDD_AudioMessage
· PDD_AudioPowerHandler
· PDD_WaveProc
但是分層模型也有一定的限制
· 隻支援一個裝置
· 不支援多個流
· 對循環支援的不好
· 對多個流資料支援的不是很好
l 單片模型
對于單片模型,WINCE是希望過渡到這個方案上的。該模型下,驅動的移植
還是很簡單的。同時,該模型也客服了以前隻能通過核心的MIXER來支援多個流的局限,在驅動層面即支援輸入和輸出多個流的混音操作。
l 分層模型的基本運轉
分層模型支援同時放音和錄音操作。MDD層管理着一個中斷處理程式和多個
DMA BUFFERS,一般放音和錄音都使用雙DMA 緩沖。
比如,放音的時候,應用通過WAVEAPI傳遞過來一些資料,MDD層通過 PDD_WaveProc 函數發送 WPDM_START消息給PDD,PDD層将資料拷貝到DMA緩沖,并啟動硬體放音。當DMA完成一個BUFFER的資料傳送後,會産生一個硬體中斷,PDD層會設定一個 AUDIO_STATE_OUT_PLAYING标志 。如果MDD發現有更多的資料要傳送就會通過WPDM_CONTINUE.消息讓PDD層繼續負責填充DMA緩沖,否則就發送一個WPDM_ENDOFDATA.消息讓PDD層停止DMA。
<a href="http://blog.csdn.net/cnhighway/archive/2009/03/18/4001945.aspx"></a>