Share via


IDirectMusicSynth e IDirectMusicSynthSink

Come descritto in Sintetizzatori e Sink Wave, è possibile implementare un sintetizzatore software personalizzato o un sink a onda che viene eseguito in modalità utente e comunica con DirectMusic. L'oggetto sintetizzatore deve avere un'interfaccia IDirectMusicSynth. L'oggetto sink wave deve avere un'interfaccia IDirectMusicSynthSink.

DirectMusic comunica con un sintetizzatore software tramite la sua interfaccia IDirectMusicSynth . DirectMusic supporta questa interfaccia in DirectX 6.1 e versioni successive. IDirectMusicSynth supporta i metodi illustrati nella tabella seguente, che organizza i metodi nei gruppi funzionali.

Raggruppare Nomi dei metodi
Activation IDirectMusicSynth::Activate
Canali IDirectMusicSynth::GetChannelPriority, IDirectMusicSynth::SetChannelPriority
Strumenti IDirectMusicSynth::D ownload, IDirectMusicSynth::Unload
Informazioni IDirectMusicSynth::GetAppend, IDirectMusicSynth::GetFormat, IDirectMusicSynth::GetLatencyClock, IDirectMusicSynth::GetPortCaps , IDirectMusicSynth::GetRunningStats
Riproduzione IDirectMusicSynth::P layBuffer, IDirectMusicSynth::Render
Porte IDirectMusicSynth::Open, IDirectMusicSynth::Close, IDirectMusicSynth::SetNumChannelGroups
Parametri vari IDirectMusicSynth::SetMasterClock, IDirectMusicSynth::SetSynthSink

La maggior parte delle applicazioni non deve chiamare direttamente i metodi nell'interfaccia IDirectMusicSynth ; la porta DirectMusic gestisce in genere il sintetizzatore. Tuttavia, l'applicazione può interfacciarsi direttamente al sintetizzatore durante lo sviluppo e il test.

Il sintetizzatore non è completo senza una connessione a un sink di onda, rappresentato come oggetto con un'interfaccia IDirectMusicSynthSink . Il sink di onda connette il flusso di output audio del sintetizzatore a un modulo di rendering audio, ad esempio DirectSound, DirectShow o l'API WaveOut multimediale di Windows.

Per impostazione predefinita, DirectMusic usa l'implementazione interna di IDirectMusicSynthSink per gestire i dati dell'onda generati dal sintetizzatore software. Questo sink di onda alimenta i dati in DirectSound.

Prima che sia possibile attivare il sintetizzatore, è necessario prima creare un sink di onda e connettersi al sintetizzatore tramite una chiamata a IDirectMusicSynth::SetSynthSink. Questa deve essere la prima chiamata dopo aver creato il sintetizzatore perché molte delle chiamate correlate ai tempi, tra cui IDirectMusicSynth::GetLatencyClock e IDirectMusicSynth::SetMasterClock, vengono effettivamente passate a chiamate equivalenti su IDirectMusicSynthSink.

Solo DirectX 6.1 e DirectX 7 supportano l'implementazione di un sink wave in modalità utente personalizzato con un'interfaccia IDirectMusicSynthSink . IDirectMusicSynthSink supporta i metodi illustrati nella tabella seguente, che organizza i metodi nei gruppi funzionali.

Raggruppare Nomi dei metodi
Inizializzazione IDirectMusicSynthSink::Activate, IDirectMusicSynthSink::GetDesiredBufferSize
IDirectMusicSynthSink::Init, IDirectMusicSynthSink::SetDirectSound
Intervallo IDirectMusicSynthSink::GetLatencyClock, IDirectMusicSynthSink::RefTimeToSample
IDirectMusicSynthSink::SampleToRefTime, IDirectMusicSynthSink::SetMasterClock

In DirectX 8 e versioni successive DirectMusic usa sempre il sink a onda interna con un sintetizzatore in modalità utente. Queste versioni successive di DirectMusic non supportano implementazioni personalizzate di IDirectMusicSynthSink.

In DirectX 6.1 e DirectX 7, tuttavia, è possibile implementare il proprio oggetto IDirectMusicSynthSink e usarlo per gestire il flusso di output audio del sintetizzatore in qualsiasi modo. Ad esempio, è possibile inserire i dati dell'onda in DirectShow o nell'API waveOut . Se si crea un oggetto stream wave, deve avere un'interfaccia IDirectMusicSynthSink per collegare l'oggetto IDirectMusicSynth .

Oltre a gestire il flusso di onde, il sink di onda è responsabile del controllo della tempistica per il sintetizzatore. Il sink di onda riceve l'orologio master da una chiamata a IDirectMusicSynth::SetMasterClock, che passa l'origine dell'ora master su con una chiamata identica a IDirectMusicSynthSink::SetMasterClock. Poiché l'orologio master non viene generato dallo stesso cristallo del flusso d'onda, il sink dell'onda deve mantenerli sincronizzati compensando la deriva dell'orologio.

Inoltre, in modo che il sintetizzatore possa tenere traccia del tempo appropriato, fornisce due chiamate per convertire dall'ora master all'ora di esempio e indietro:

  • IDirectMusicSynthSink::RefTimeToSample

  • IDirectMusicSynthSink::SampleToRefTime

Il sink di onda genera l'orologio di latenza perché gestisce effettivamente i tempi in cui gli esempi vengono scritti dalle chiamate a IDirectMusicSynth::Render. Quando DirectMusic chiama IDirectMusicSynth::GetLatencyClock sulla porta DirectMusic , si gira semplicemente e chiama IDirectMusicSynthSink::GetLatencyClock.

Quando viene aperto un sintetizzatore software, DirectMusic fornisce al sintetizzatore una struttura DMUS_PORTPARAMS (descritta nella documentazione di Microsoft Windows SDK) che specifica la frequenza di campionamento e il numero di canali per il flusso di output audio. Il sintetizzatore converte quindi questi in una struttura WAVEFORMATEX standard che passa al sink di onda quando il sink di onda chiama il metodo IDirectMusicSynth::GetFormat .

Per altre informazioni, vedere le descrizioni delle interfacce IDirectMusic e IDirectMusicPort nella documentazione di Windows SDK.