Verarbeiten der Audiodaten
Die Standardimplementierung von DoProcessOutput beginnt mit dem Abrufen eines Zeigers auf eine gültige WAVEFORMATEX-Struktur, genau wie in AllocateStreamingResources. Anschließend werden die Informationen in dieser Struktur verwendet, um die Anzahl der Stichproben im Eingabepuffer zu berechnen, die auf die Verarbeitung warten. Der folgende Code ist aus der Standardimplementierung:
// Get a pointer to the valid WAVEFORMATEX structure
// for the current media type.
WAVEFORMATEX *pWave = ( WAVEFORMATEX * ) m_mtInput.pbFormat;
// Calculate the number of samples to process.
DWORD dwSamplesToProcess = (*cbBytesProcessed / pWave->nBlockAlign) * pWave->nChannels;
Anschließend überprüft der Code den wBitsPerSample-Member, um die Bittiefe der Audiodatei zu bestimmen. Dieser Wert wird in einer switch-Anweisung verwendet, um eine separate Verarbeitung für 8-Bit- und 16-Bit-Audio zu ermöglichen.
Unterschiede zwischen 8-Bit- und 16-Bit-Audio
Es gibt wichtige Unterschiede zwischen 8-Bit- und 16-Bit-Audio. Daher unterscheiden sich die Verarbeitungsroutinen zum Erstellen des Echoeffekts. Die beiden Formate unterscheiden sich auf folgende Weise:
- Jedes Format hat eine andere Stichprobengröße: 8-Bit-Stichproben belegen jeweils ein Byte Arbeitsspeicher, während 16-Bit-Stichproben jeweils zwei Bytes belegen.
- Jedes Format stellt die Audioamplitude unterschiedlich dar. 8-Bit-Audio wird durch eine ganze Zahl ohne Vorzeichen mit einem Bereich von 0 bis 255 dargestellt. Der Wert 128 stellt die Stille dar. 16-Bit-Audio wird durch eine ganze Zahl mit Vorzeichen mit einem Bereich von -32768 bis 32767 dargestellt. Der Wert 0 (null) stellt die Stille dar.
Während der Prozess der Erstellung des Echoeffekts für jedes Format grundsätzlich identisch ist, müssen sich die Details geringfügig unterscheiden.