신시사이저 및 웨이브 싱크
렌더링 엔진에는 다음 두 부분이 있습니다.
MIDI 메시지를 가져와서 웨이브 오디오 샘플로 변환하는 신시사이저입니다.
웨이브 싱크는 웨이브 샘플의 대상을 제공하고 출력을 동기화하는 데 도움이 됩니다.
기본적으로 DirectMusic 애플리케이션은 Microsoft 소프트웨어 신시사이저(dmsynth.dll)를 신시사이저로 사용하고 DirectSound를 웨이브 출력 디바이스로 사용합니다.
DirectX 6.1 및 DirectX 7에서 DirectMusic 애플리케이션은 이러한 기본값을 재정의할 수 있습니다. 예를 들어 애플리케이션은 Microsoft Software Synthesizer를 사용하지만 출력을 .wav 파일로 보내거나 기본 웨이브 싱크에서 작동하는 사용자 지정 신시사이저를 구현할 수 있습니다. 기본 웨이브 싱크가 대부분의 신시사이저에서 잘 작동해야 하므로 후자의 시나리오는 더 가능성이 높습니다.
DirectX 8 이상에서 DirectMusic은 항상 기본 제공 웨이브 싱크를 사용하여 사용자 모드 신디사이저에서 데이터를 출력하지만 애플리케이션은 기본 소프트웨어 신디사이저를 재정의할 수 있습니다. 즉, DirectMusic 애플리케이션은 사용자 지정 사용자 모드 신시사이저를 구현할 수 있지만 신시사이저는 DirectMusic의 기본 제공 웨이브 싱크를 사용해야 합니다.
아래 그림에서는 DirectMusic 아키텍처가 사용자 모드 신시사이저와 웨이브 싱크를 통합하는 방법을 보여 줍니다. 다음 그림에서 "DirectMusic Port"라는 레이블이 지정된 블록은 portcls.sys PortCls 시스템 드라이버 모듈의 커널 모드 DMus 포트 드라이버 와 혼동해서는 안 됩니다. DirectMusic 포트는 IDirectMusicPort 인터페이스(DirectMusic API의 일부)를 사용하는 사용자 모드 개체이며 dmusic.dll 구현됩니다. DirectMusic 포트에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.
앞의 그림에서 애플리케이션은 데이터를 사용자 모드 DirectMusic 포트로 전송합니다. 이 포트는 데이터(MIDI 또는 DLS)를 소프트웨어 신디사이저(기본적으로 dmsynth.dll)로 전달하여 메모를 웨이브 데이터로 렌더링할 수 있습니다. 웨이브 싱크는 타이밍을 관리하고 데이터 버스트를 받을 준비가 되면 채우기 위해 신디사이저에 버퍼를 건네줍니다. 신디사이저는 DirectSound에 전달할 수 있도록 버퍼(기본적으로 IDirectSoundBuffer 개체)를 데이터로 채웁니다. DirectSound는 KMixer 시스템 드라이버를 통해 데이터를 재생하거나 오디오 디바이스에서 DirectSound 하드웨어 가속 렌더링 핀을 통해 재생합니다(사용 가능한 경우 )(DirectSound 하드웨어 가속 개요 참조).
이 동일한 기본 아키텍처는 웨이브 싱크가 데이터 버퍼를 하드웨어 또는 KMixer 시스템 드라이버에 직접 전달하는 것을 제외하고 커널 모드 구현에도 적용됩니다. DMus 포트 드라이버는 커널 모드 소프트웨어 신시사이저에 대한 웨이브 싱크를 구현합니다. 자세한 내용은 Kernel-Mode Software Synthesizers용 웨이브 싱크를 참조하세요.
이러한 단계가 완료되면 사용자 모드 DirectMusic 포트를 열고 사용하도록 활성화해야 합니다. 이 많은 드라이버 코드가 작동하는 즉시 기능 구현을 시작할 수 있습니다. 사용자 모드 Microsoft Software Synthesizer의 소스 코드를 템플릿으로 사용하고 새 기능 추가를 시작합니다.
사용자 모드 소프트웨어 신시사이저는 IDirectMusicSynth 인터페이스를 사용하여 개체로 구현할 수 있습니다. 사용자 모드 웨이브 싱크는 IDirectMusicSynthSink 인터페이스를 사용하여 개체로 구현할 수 있습니다. 자세한 내용은 IDirectMusicSynth 및 IDirectMusicSynthSink를 참조하세요.