使用者模式與核心模式
自訂合成器可以寫入,以在使用者模式或核心模式中執行。 一般而言,軟體合成更容易在使用者模式中實作,但它們通常可以在核心模式中達到較低的延遲。 硬體元件只能在核心模式中受到支援。 不過,即使最終實作是在核心模式中執行,仍存在良好的原因,以使用者模式開始開發。
在使用者模式中,) 建置軟體合成器 (和波浪接收會比較簡單。 使用者模式介面很容易使用,偵錯會簡化。 另一個優點是產生的元件是 Microsoft Windows 可執行檔。 因為這個可執行檔是 COM 物件,所以安裝它只是從命令列使用 regsvr32.exe 進行自我註冊。 (RegSvr32 系統應用程式會呼叫 DLL 的DllRegisterServer 函式。如需詳細資訊,請參閱 Microsoft Windows SDK documentation.)
如果需要使用者模式實作,您可以使用應用程式程式來提供產品,而不是驅動程式。 使用者可避免複雜的驅動程式安裝程式,而且安裝之後不需要重新開機。 然後,您可以列舉使用者模式元件做為其中一個可用的埠,視您是否希望其他應用程式能夠使用它而定。 如需詳細資訊,請參閱 註冊合成器。
核心模式軟體實作的優點是延遲較低。 不過,隨著時間戳記訊息的問世,這項優點不如前所述。 舊版 MIDI API 沒有時間戳記,因此當您播放附注時,正好是排入佇列播放的時間。 時間戳記可讓您將筆記排入佇列,以在未來的指定時間播放。 使用時間戳表示除非預先警告小於系統中固有的延遲,否則附注會在正確的時間播放。
延遲只是當音效排入佇列以播放少量或沒有預先警告時的問題。 因此,只有在使用者模式軟體實作或支援硬體加速時,才建議使用核心模式實作。
如果您決定執行核心模式實作,最佳方法是在使用者模式中開始開發。 Microsoft 使用者模式合成的原始程式碼是在 Microsoft Windows Driver Kit (WDK) 中提供,因此您不需要從頭開始撰寫新的合成。 您可以使用現有的程式碼來瞭解如何剖析 DLS (DLS) 下載的可下載音效。 然後,您可以新增任何新功能 (,例如剖析其他區塊) ,並先在使用者模式中偵錯此邏輯,然後調整存取硬體的常式。 (stubbed-out 常式可以在 software 中執行任何動作或模擬硬體功能。) 如需 DLS 的詳細資訊,請參閱 Windows SDK 檔。
當您的實作在使用者模式中運作時,您可以將它向下移至核心模式,讓它可以在那裡運作。 在核心模式中運作軟體版本之後,下一個步驟是開始將功能移至硬體。 使用者模式和核心模式軟體合成程式在取得硬體合成並執行的過程中,可作為有用的中繼步驟。
摘要說明上述建議:
若為僅限軟體的元件,請先在使用者模式中實作元件 (,以便解決設計問題,並輕鬆地進行介面、偵錯、安裝和移除) ,然後視需要因延遲或其他考慮而轉換成核心模式。
若為硬體元件,請先在使用者模式中實作軟體版本 (,以便解決簡單介面、偵錯、安裝和移除) 的設計問題,然後將它轉換成核心模式軟體版本。 最後,將核心模式元件連線到硬體,一次一個功能,直到一切如預期般運作為止。