Procesamiento de los datos de audio

[La característica asociada a esta página, Reproductor multimedia de Windows SDK, es una característica heredada. Se ha reemplazado por MediaPlayer. MediaPlayer se ha optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer en lugar de Reproductor multimedia de Windows SDK, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

La implementación predeterminada de DoProcessOutput comienza recuperando un puntero a una estructura WAVEFORMATEX válida, exactamente igual que en AllocateStreamingResources. A continuación, usa la información de esa estructura para calcular el número de muestras del búfer de entrada en espera de procesarse. El código siguiente procede de la implementación predeterminada:

// 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;

A continuación, el código inspecciona el miembro wBitsPerSample para determinar la profundidad de bits del audio. Este valor se usa en una instrucción switch para proporcionar un procesamiento independiente para audio de 8 y 16 bits.

Diferencias entre audio de 8 y 16 bits

Hay diferencias importantes entre audio de 8 y 16 bits. Por lo tanto, las rutinas de procesamiento para crear el efecto de eco son diferentes. Los dos formatos difieren de las siguientes maneras:

  • Cada formato tiene un tamaño de muestra diferente: muestras de 8 bits cada una ocupan un byte de memoria, mientras que las muestras de 16 bits ocupan cada uno dos bytes.
  • Cada formato representa la amplitud de audio de forma diferente. El audio de 8 bits se representa mediante un entero sin signo con un intervalo de 0 a 255; un valor de 128 representa el silencio. El audio de 16 bits se representa mediante un entero con signo con un intervalo de -32768 a 32767; un valor de cero representa el silencio.

Aunque el proceso de creación del efecto de eco es fundamentalmente idéntico para cada formato, los detalles deben diferir ligeramente.

Implementación de CEcho::D oProcessOutput