合成器和波接收
轉譯引擎有兩個部分:
合成器,採用 MIDI 訊息,並將其轉換成波浪音訊樣本。
波浪接收,提供波樣本的目的地,並協助同步處理輸出。
根據預設,DirectMusic 應用程式會使用 Microsoft 軟體合成器 (dmsynth.dll) 做為合成器,而 DirectSound 則作為波浪輸出裝置。
在 DirectX 6.1 和 DirectX 7 中,DirectMusic 應用程式可以覆寫這些預設值。 例如,應用程式可能會使用 Microsoft 軟體合成器,但將輸出導向至 .wav 檔案,或實作可搭配預設波浪接收使用的自訂合成器。 後者的案例較可能,因為預設波接收應該適用于大部分合成器。
在 DirectX 8 和更新版本中,DirectMusic 一律使用其內建波浪接收,從使用者模式合成輸出資料,但應用程式可以覆寫預設的軟體合成。 這表示 DirectMusic 應用程式可以實作自訂的使用者模式合成器,但合成器必須使用 DirectMusic 的內建波浪接收。
下圖顯示 DirectMusic 架構如何納入使用者模式合成器和波接收。 請注意,下圖中標示為 「DirectMusic Port」 的區塊不應與 PortCls 系統驅動程式模組中的核心模式 DMus 埠驅動程式 混淆,portcls.sys。 DirectMusic 埠是具有 IDirectMusicPort 介面的使用者模式物件, (DirectMusic API) 的一部分,並在 dmusic.dll 中實作。 如需 DirectMusic 埠的詳細資訊,請參閱Microsoft Windows SDK檔。
在上圖中,應用程式會將資料傳送至使用者模式 DirectMusic 埠,該埠會將資料 (MIDI 或 DLS) 向下傳遞至軟體合成 (dmsynth.dll,依預設會) ,以便將筆記轉譯成波浪資料。 波浪接收會管理時間,並在準備好接收高載資料時,交握要填滿的緩衝區。 根據預設,synth 會將緩衝區填滿 (IDirectSoundBuffer 物件,) 資料,以便傳遞至 DirectSound。 DirectSound 可透過 KMixer 系統驅動程式 播放資料,或透過音訊裝置上的 DirectSound 硬體加速轉譯針腳播放資料, (如果有的話,請參閱 DirectSound 硬體加速 概觀) 。
這個相同的基本架構也適用于核心模式實作,但例外狀況是波浪接收會將資料緩衝區直接交給硬體或 KMixer 系統驅動程式。 DMus 埠驅動程式會實作核心模式軟體合成器的波接收。 如需詳細資訊,請參閱 Kernel-Mode 軟體合成器的波接收。
完成這些步驟時,使用者模式 DirectMusic 埠應該開啟並啟用以供使用。 一旦這大部分的驅動程式程式碼正常運作,您就可以開始實作功能。 使用使用者模式 Microsoft 軟體合成器的原始程式碼作為範本,並開始新增新功能。
使用者模式軟體合成器可以實作為具有 IDirectMusicSynth 介面的物件。 使用者模式波浪接收可以實作為具有 IDirectMusicSynthSink 介面的物件。 如需詳細資訊,請參閱 IDirectMusicSynth 和 IDirectMusicSynthSink。