La API de Multimedia de Windows (MMIO) proporciona un conjunto de funciones para interactuar con archivos multimedia, incluyendo archivos de audio. A continuación, se detallan algunas de las funciones clave:
1. mmioOpen
Esta función se utiliza para abrir un archivo multimedia. Permite especificar el nombre del archivo, un puntero a una estructura MMIOINFO para información adicional y banderas que definen el modo de apertura (lectura, escritura o ambos).
HMMIO mmioOpen(
LPTSTR szFilename,
LPMMIOINFO lpmmioinfo,
DWORD dwOpenFlags
);
szFilename: El nombre del archivo a abrir.lpmmioinfo: Un puntero a una estructuraMMIOINFO.dwOpenFlags: Bnaderas comoMMIO_READ,MMIO_WRITE,MMIO_READWRITE.
Retorna un identificador (handle) para el archivo abierto en caso de éxito.
2. mmioClose
Cierra un archivo previamente abierto con mmioOpen.
MMRESULT mmioClose(
HMMIO hmmio,
UINT wFlags
);
hmmio: El identificador del archivo a cerrar.wFlags: Banderas que pueden influir en la operación de cierre.
Retorna 0 si la operación es exitosa.
3. mmioRead
Lee una cantidad específica de bytes desde un archivo abierto.
LONG mmioRead(
HMMIO hmmio,
HPSTR pch,
LONG cch
);
hmmio: El identificador del archivo del cual leer.pch: Un puntero a un búfer donde se almacenarán los datos leídos.cch: El número de bytes a leer del archivo.
Retorna el número de bytes leídos. Si se alcanza el final del archivo, retorna 0. Si ocurre un error, retorna -1.
4. mmioCreateChunk
Crea un "chunk" (fragmento) dentro de un archivo RIFF abierto.
MMRESULT mmioCreateChunk(
HMMIO hmmio,
LPMMCKINFO lpck,
UINT wFlags
);
hmmio: El identificador del archivo RIFF abierto.lpck: Un puntero a una estructuraMMCKINFOque contendrá información sobre el chunk creado.wFlags: Banderas que especifican el tipo de chunk a crear (por ejemplo,MMIO_CREATERIFFoMMIO_CREATELIST).
Retorna MMSYSERR_NOERROR en caso de éxito.
5. mmioFlush
Escribe el contenido del búfer de E/S de un archivo al disco.
MMRESULT mmioFlush(
HMMIO hmmio,
UINT fuFlush
);
hmmio: El identificador del archivo abierto conmmioOpen.fuFlush: Banderas que controlan cómo se realiza el volcado del búfer.
Retorna 0 si la operación es exitosa.
6. mmioFOURCC
Esta macro convierte una secuencia de cuatro caracteres en un código de cuatro caracteres (FourCC), comúnmente usado en formatos de archivo multimedia para identificar tipos de datos o chunks.
#define mmioFOURCC(ch0, ch1, ch2, ch3) \
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24))
Ejemplo de uso:
DWORD fccWAVE = mmioFOURCC('W', 'A', 'V', 'E');
DWORD fccfmt = mmioFOURCC('f', 'm', 't', ' ');