¿Cómo guardar datos de audio en la memoria como un archivo wav?

Cuando una aplicación llama a waveOutWrite(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh) en Windows, waveOutWrite(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh) una copia de los datos de audio (señalados por pwh-> lpData) enviados a la tarjeta de audio en la memoria.

Ahora quiero guardar los datos de audio como un archivo de formato WAV en el disco, ¿cómo debo hacer esto?

Tengo el puntero al bloque de datos de audio y el tamaño de los datos de audio.

El formato wav es bastante trivial y es fácil escribir su propia implementación para. Alternativamente, podrías usar una biblioteca como libsndfile .

Con la API multimedia mmioCreateChunk , mmioWrite familia de funciones mmioOpen , mmioCreateChunk , mmioWrite . Aquí hay un fragmento de código: ¿ WAV guardando? . La API le permite escribir estos archivos RIFF, sin embargo, la estructura no es tan compleja y puede escribir directamente en el archivo binario.

Aún así, WinAPI, aunque no coincide tan bien con su waveOutWrite :

  • Con la API de DirectShow necesita WavDest Sample y un gráfico de filtro que lo utiliza para escribir los datos entrantes en el archivo.
  • Con la muestra de Media Foundation API WavSink más reciente será útil.