Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Anwendungsprogramme basieren auf einer Kombination aus dem Benutzermodus- und dem Kernelmoduskomponenten, um Wellenströme zu erfassen (Eingabe) und darzustellen (Ausgabe). Ein Wellenstrom ist ein digital-audio-Stream, dessen Datenformat durch eine WAVEFORMATEX - oder WAVEFORMATEXTENSIBLE-Struktur beschrieben wird.
Eine Anwendung kann eine der folgenden Softwareschnittstellen für das Wellenrendering und die Erfassung verwenden:
Microsoft Windows Multimedia waveOut-Xxx- und waveIn-Xxx-Funktionen
DirectSound- und DirectSoundCapture-APIs
Das Verhalten der WaveOutXxx - und waveInXxx-Funktionen basiert auf den Funktionen von älteren Wellentreibern und -geräten. Ab Windows 98 übersetzt der WDMAud-Systemtreiber Aufrufe dieser Funktionen in Befehle in WDM-Audiotreiber. Durch Emulieren des Verhaltens älterer Software und Hardware opfern die WaveOutXxx-Funktionen jedoch die 3D-Soundeffekte und Hardwarebeschleunigung, die jetzt über die DirectSound-API verfügbar sind. Weitere Informationen zu DirectSound und den Windows Multimedia Wave-Funktionen finden Sie in der Microsoft Windows SDK-Dokumentation.
DirectSound und die Windows Multimedia Wave-Funktionen sind Clients des SysAudio-Systemtreibers, der die Audiofilterdiagramme erstellt, die die Welle und DirectSound-Datenströme verarbeiten. Die Graph-Erstellung ist für die Anwendungen transparent, die diese Softwareschnittstellen verwenden.
Wellenkomponenten
Die folgende Abbildung zeigt die Komponenten des Benutzermodus und des Kernelmodus, die eine Wave-Anwendung zum Rendern oder Erfassen eines digitalen Audiodatenstroms verwendet, der aus PCM-Wellendaten besteht.
Die Renderingkomponenten werden auf der linken Seite der vorherigen Abbildung angezeigt, und die Aufnahmekomponenten werden rechts angezeigt. Die Kästchen, die den Wellen-Miniporttreiber darstellen, werden abgedunkelt, um anzugeben, dass es sich um vom Hersteller gelieferte Komponenten handelt. Die anderen Komponenten in der Abbildung sind vom System bereitgestellt.
Oben links in der Abbildung stellt die Wellenrendering-Anwendung (oder "Wave-out") eine Verbindung zu den WDM-Audiotreibern her, indem sie die WaveOutXxx-Funktionen verwendet, die in der WinMM-Systemkomponente im Benutzermodus implementiert sind, Winmm.dll. Die Anwendung liest Blöcke von Wellenaudiobeispielen aus einer Datei und ruft die WaveOutWrite-Funktion auf, um sie zu rendern.
WDMAud, das aus Komponenten des Benutzermodus und Kernelmodus (Wdmaud.drv und Wdmaud.sys) besteht, puffert die Wellendaten aus dem WaveOutWrite-Aufruf und gibt den Wellenstrom an den KMixer-Systemtreiber aus, der unter WDMAud in der Abbildung angezeigt wird.
KMixer ist eine Systemkomponente, die Wellen-PCM-Datenströme aus einer oder mehreren Quellen empfängt, und mischt sie zusammen, um einen einzelnen Ausgabestrom zu bilden, der sich auch im Wellen-PCM-Format befindet.
KMixer gibt einen Wellenstrom an ein WaveCyclic- oder WavePci-Gerät aus, dessen Port- und Miniporttreiber unterhalb von KMixer auf der linken Seite der vorherigen Abbildung angezeigt werden. Der Miniporttreiber bindet sich an den Porttreiber, um den Wellenfilter zu bilden, der das zugrunde liegende Audiorenderinggerät darstellt. Ein typisches Renderinggerät gibt ein analoges Signal aus, das eine Reihe von Lautsprechern oder eine externe Audioeinheit steuert. Ein Renderinggerät gibt möglicherweise auch digitale Audiodaten über einen S/PDIF-Connector aus. Weitere Informationen zu WaveCyclic und WavePci finden Sie unter Wave Filters.
Alternativ kann KMixer seinen Ausgabedatenstrom an ein USB-Audiogerät übergeben, das vom USBAudio-Klassensystemtreiber (nicht in Abbildung dargestellt) anstelle eines WaveCyclic- oder WavePci-Geräts gesteuert wird.
Ein Adaptertreiber erstellt eine Instanz eines WaveCyclic- oder WavePci-Porttreibers durch Aufrufen von PcNewPort mit einem GUID-Wert von CLSID_PortWaveCyclic bzw. CLSID_PortWavePci.
Auf der rechten Seite der vorherigen Abbildung sind die Komponenten dargestellt, die erforderlich sind, um eine Anwendung zu unterstützen, die Wellendaten in einer Datei erfasst. Die Wave-Capture-Anwendung (oder "Wave-In") kommuniziert mit den WDM-Audiotreibern über die WaveInXxx-Funktionen , die in der WinMM-Systemkomponente implementiert werden.
In der unteren rechten Ecke der Abbildung wird das Wellenaufzeichnungsgerät durch Wave Miniport- und Porttreiber gesteuert. Die Port- und Miniporttreiber, die vom Typ WaveCyclic oder WavePci sein können, binden zusammen, um einen Wellenfilter zu bilden, der das Aufnahmegerät darstellt. Dieses Gerät erfasst in der Regel ein analoges Signal von einem Mikrofon oder einer anderen Audioquelle und konvertiert es in einen Wave PCM-Datenstrom. Das Gerät kann auch einen digitalen Audiodatenstrom über einen S/PDIF-Connector eingeben.
Der Wellenporttreiber gibt seinen Wellenstrom entweder an KMixer oder direkt an WDMAud aus. Der Datenstrom muss KMixer durchlaufen, wenn er vor der Übergabe an WDMAud in seiner Abtastrate konvertiert werden muss. Ein System, das gleichzeitiges Rendern und Aufzeichnen von Audiodatenströmen durchführt, erfordert möglicherweise zwei Instanzen von KMixer, wie in der Abbildung dargestellt. Beachten Sie, dass SysAudio diese Instanzen bei Bedarf automatisch erstellt.
Alternativ kann es sich bei der Quelle des erfassten Wellenstroms um ein USB-Audiogerät anstelle eines WaveCyclic- oder WavePci-Geräts handeln. In diesem Fall übergibt der USBAudio-Treiber (nicht in Abbildung dargestellt) den Datenstrom an KMixer.
Unabhängig davon, ob der Wellenstrom von einem USB-Gerät oder von einem WaveCyclic- oder WavePci-Gerät erfasst wird, führt KMixer bei Bedarf eine Samplerate-Konvertierung für den Datenstrom durch, jedoch keine Mischung mit anderen Datenströmen. KMixer gibt den resultierenden Datenstrom an Wdmaud.sysaus, die Kernelmodushälfte des WDMAud-Systemtreibers. Die Hälfte des Benutzermodus, Wdmaud.drv, gibt den Wellenstrom über die WaveInXxx-Funktionen an das Anwendungsprogramm aus, die in Winmm.dllimplementiert werden. Schließlich schreibt die Wave-Capture-Anwendung oben in der Abbildung die Wellendaten in eine Datei.
Zum Zeitpunkt, zu dem die Wave-Capture-Anwendung die WaveInOpen-Funktion aufruft, um den Aufnahmedatenstrom zu öffnen, übergibt sie einen Zeiger an die Rückrufroutine. Wenn ein Wave-Capture-Ereignis eintritt, ruft das Betriebssystem die Rückrufroutine mit einem Puffer auf, der den nächsten Block von Wellenbeispielen vom Aufnahmegerät enthält. Als Reaktion auf den Rückruf schreibt die Anwendung den nächsten Wellenblock in die Datei.
DirectSound-Komponenten
Die folgende Abbildung zeigt die Komponenten des Benutzermodus und des Kernelmodus, die von einem DirectSound-Anwendungsprogramm zum Rendern oder Erfassen von Wellendaten verwendet werden.
Die Renderingkomponenten werden in der linken Hälfte der vorherigen Abbildung angezeigt, und die Aufnahmekomponenten werden rechts angezeigt. Die Wellen-Miniporttreiber werden als abgedunkelte Kästchen angezeigt, um anzugeben, dass sie vom Hersteller gelieferte Komponenten sind. Die anderen Komponenten in der Abbildung sind vom System bereitgestellt.
Oben links in der Abbildung lädt eine DirectSound-Anwendung Wellendaten aus einer Datei in einen Soundpuffer, den die DirectSound-Systemkomponente des Benutzermodus (Dsound.dll) verwaltet. Diese Komponente sendet einen Wellenstrom an ein WaveCyclic- oder WavePci-Gerät, dessen Port- und Miniporttreiber unten links in der Abbildung angezeigt werden. Wenn ein Hardwaremixer-Pin auf dem Gerät verfügbar ist, wird der Datenstrom direkt zum Wellenanschlusstreiber übergeben, um KMixer zu umgehen. Andernfalls durchläuft der Datenstrom zuerst KMixer, der ihn mit allen anderen gleichzeitig wiedergegebenen Streams mischt. KMixer gibt den gemischten Datenstrom an den Porttreiber aus.
Wie zuvor bindet sich der Miniporttreiber an den Porttreiber, um den Wellenfilter zu bilden, der das zugrunde liegende Audiorenderinggerät darstellt. Dieses Gerät kann den Datenstrom beispielsweise über eine Reihe von Lautsprechern wiedergeben.
Alternativ kann der Wellenstrom von einem USB-Audiogerät anstelle eines WaveCyclic- oder WavePci-Geräts gerendert werden. In diesem Fall kann der Datenstrom KMixer nicht umgehen. Der USBAudio-Klassensystemtreiber (nicht in Abbildung dargestellt) übergibt den Datenstrom immer an KMixer.
Die rechte Seite der vorherigen Abbildung zeigt die Komponenten, die eine DirectSoundCapture-Anwendung unterstützen. Die Anwendung zeichnet Wellendaten auf, die von einem WaveCyclic- oder WavePci-Aufnahmegerät empfangen werden. Dieses Gerät konvertiert z. B. ein analoges Signal aus einem Mikrofon in einen Wellenstrom. Die Wave-Port- und Miniport-Treiber des Geräts werden in der unteren rechten Ecke der Abbildung angezeigt. Wie in der Abbildung dargestellt, empfängt der Porttreiber den Datenstrom vom Miniporttreiber und gibt ihn entweder direkt an die DirectSound-Komponente im Benutzermodus, Dsound.dll, oder indirekt über KMixer aus. Dies hängt davon ab, ob ein Hardwareerfassungs-Pin vom Aufnahmegerät verfügbar ist.
Alternativ kann es sich bei der Quelle des erfassten Wellenstroms um ein USB-Audiogerät handeln. In diesem Fall kann der Datenstrom KMixer nicht umgehen. der USBAudio-Treiber (nicht in Abbildung dargestellt) übergibt den Datenstrom immer an KMixer.
Wenn KMixer in den Pfad des Aufnahmedatenstroms eingefügt wird, führt er bei Bedarf eine Samplerate-Konvertierung für den Datenstrom durch, aber keine Mischung mit anderen Datenströmen.
In der oberen rechten Ecke der vorherigen Abbildung liest die Anwendung die Wellendaten aus dem DirectSoundCapture-Puffer und schreibt sie in die Datei.