Dispositivos y tipos de datos
[La característica asociada a esta página, Waveform Audio, es una característica heredada. Se ha reemplazado por WASAPI y Audio Graphs. WasAPI y gráficos de audio se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use WASAPI y Audio Graphs en lugar de Waveform Audio, 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.
En esta sección se describe cómo trabajar con dispositivos de audio de forma de onda e incluye información sobre cómo abrirlos, cerrarlos y consultarlos para sus funcionalidades. También se describe cómo realizar un seguimiento de los dispositivos de un sistema mediante identificadores de dispositivo e identificadores de dispositivo.
Abrir dispositivos de salida de Waveform-Audio
Use la función waveOutOpen para abrir un dispositivo de salida de audio de forma de onda para su reproducción. Esta función abre el dispositivo asociado al identificador de dispositivo especificado y devuelve un identificador del dispositivo abierto escribiendo el identificador de una ubicación de memoria especificada.
Algunos equipos multimedia tienen varios dispositivos de salida de audio de forma de onda. A menos que quiera abrir un dispositivo específico de salida de audio de forma de onda en un sistema, debe usar la marca WAVE_MAPPER para el identificador del dispositivo al abrir un dispositivo. La función waveOutOpen elige el dispositivo en el sistema que mejor puede reproducir el formato de datos especificado.
Consulta de dispositivos de audio
Windows proporciona las siguientes funciones para determinar cuántos dispositivos de un tipo determinado están disponibles en un sistema.
Función | Descripción |
---|---|
auxGetNumDevs | Recupera el número de dispositivos de salida auxiliares presentes en el sistema. |
waveInGetNumDevs | Recupera el número de dispositivos de entrada de audio de forma de onda presentes en el sistema. |
waveOutGetNumDevs | Recupera el número de dispositivos de salida de audio de forma de onda presentes en el sistema. |
Los dispositivos de audio se identifican mediante un identificador de dispositivo. El identificador de dispositivo se determina implícitamente a partir del número de dispositivos presentes en un sistema. Los identificadores de dispositivo van de cero a uno menor que el número de dispositivos presentes. Por ejemplo, si hay dos dispositivos de salida de audio de forma de onda en un sistema, los identificadores de dispositivo válidos son 0 y 1.
Después de determinar cuántos dispositivos de un tipo determinado están presentes en un sistema, puede usar una de las siguientes funciones para consultar las funcionalidades de cada dispositivo.
Función | Descripción |
---|---|
auxGetDevCaps | Recupera las funciones de un dispositivo de salida auxiliar especificado. |
waveInGetDevCaps | Recupera las funciones de un dispositivo de entrada de audio de forma de onda especificado. |
waveOutGetDevCaps | Recupera las funciones de un dispositivo de salida de forma de onda-audio especificado. |
Cada una de estas funciones rellena una estructura con información sobre las funcionalidades de un dispositivo especificado. En la tabla siguiente se enumeran las estructuras que corresponden a cada una de estas funciones.
Función | Estructura |
---|---|
auxGetDevCaps | AUXCAPS |
waveInGetDevCaps | WAVEINCAPS |
waveOutGetDevCaps | WAVEOUTCAPS |
Los formatos estándar se enumeran en el miembro dwFormats de la estructura WAVEOUTCAPS . Los dispositivos de audio de forma de onda pueden admitir formatos no estándar. Para determinar si un dispositivo admite un formato determinado (estándar o no estándar), puede llamar a la función waveOutOpen con la marca WAVE_FORMAT_QUERY. Esta marca no abre el dispositivo. Especifique el formato en cuestión en la estructura WAVEFORMATEX a la que apunta el parámetro pwfx pasado a waveOutOpen.
Los dispositivos de salida de audio con forma de onda varían en función de las funcionalidades que admiten. El miembro dwSupport de la estructura WAVEOUTCAPS indica si un dispositivo admite funcionalidades como cambios de volumen y tono.
Identificadores de dispositivo e identificadores de dispositivo
Cada función que abre un dispositivo de audio especifica un identificador de dispositivo, un puntero a una ubicación de memoria y algunos parámetros que son únicos para cada tipo de dispositivo. La ubicación de memoria se rellena con un identificador de dispositivo. Use este identificador de dispositivo para identificar el dispositivo de audio abierto al llamar a otras funciones de audio.
La diferencia entre los identificadores y los identificadores de los dispositivos de audio es sutil, pero importante:
- Los identificadores de dispositivo se determinan implícitamente a partir del número de dispositivos presentes en un sistema. Este número se obtiene mediante la función auxGetNumDevs, waveInGetNumDevs o waveOutGetNumDevs .
- Los identificadores de dispositivo se devuelven cuando se abren controladores de dispositivo mediante la función waveInOpen o waveOutOpen .
No hay funciones que abran o cierren dispositivos de audio auxiliares. Los dispositivos auxiliares de audio no deben abrirse y cerrarse como dispositivos de audio de forma de onda porque no hay ninguna transferencia de datos continua asociada a ellos. Todas las funciones auxiliares de audio usan identificadores de dispositivo para identificar los dispositivos.
tipos de datos de salida de Waveform-Audio
Los siguientes tipos de datos se definen para las funciones de salida de audio de forma de onda.
Tipo | Descripción |
---|---|
HWAVEOUT | Controle un dispositivo de salida de forma de onda abierta. |
WAVEFORMATEX | Estructura que especifica los formatos de datos admitidos por un dispositivo determinado de entrada de audio de forma de onda. Esta estructura también se usa para los dispositivos de entrada de audio de forma de onda. |
WAVEHDR | Estructura utilizada como encabezado para un bloque de datos de entrada de audio de forma de onda. Esta estructura también se usa para dispositivos de entrada de audio de forma de onda. |
WAVEOUTCAPS | Estructura utilizada para consultar las funcionalidades de un dispositivo de salida de audio de forma de onda determinado. |
Especificar formatos de datos Waveform-Audio
Al llamar a la función waveOutOpen para abrir un controlador de dispositivo para su reproducción o para consultar si el controlador admite un formato de datos determinado, use el parámetro pwfx para especificar un puntero a una estructura WAVEFORMATEX que contenga el formato de datos de audio de forma de onda solicitado. WAVEFORMATEX reemplaza las estructuras WAVEFORMAT y PCMWAVEFORMAT .
Para los datos de audio separados en más de dos canales o con un tamaño de muestra que no es múltiplo de 8, debe usar WAVEFORMATEXTENSIBLE. Esta estructura simplemente configura los bytes adicionales a los que apunta el miembro cbSize de WAVEFORMATEX para proporcionar información adicional sobre el formato. WAVEFORMATEXTENSIBLE se puede convertir como WAVEFORMATEX.
También hay dos formatos de Portapapeles que puede usar para representar datos de audio: CF_WAVE y CF_RIFF. Utilice el formato CF_WAVE para representar datos en uno de los formatos estándar, como PCM de 11 kHz o 22 kHz. Use el formato CF_RIFF para representar formatos de datos más complejos que no se pueden representar como archivos de audio de forma de onda estándar.
Escribir datos de Waveform-Audio
Después de abrir correctamente un controlador de dispositivo de salida de audio con forma de onda, puede empezar a reproducir un sonido. Windows proporciona la función waveOutWrite para enviar bloques de datos a dispositivos de salida de audio de forma de onda.
Use la estructura WAVEHDR para especificar el bloque de datos waveform-audio que va a enviar mediante waveOutWrite. Esta estructura contiene un puntero a un bloque de datos bloqueado, la longitud del bloque de datos y algunas marcas. Este bloque de datos debe estar preparado antes de usarlo; para obtener información sobre cómo preparar un bloque de datos, vea Bloques de datos de audio.
Después de enviar un bloque de datos a un dispositivo de salida mediante waveOutWrite, debe esperar hasta que el controlador del dispositivo finalice con el bloque de datos antes de liberarlo. Si va a enviar varios bloques de datos, debe supervisar la finalización de bloques de datos para saber cuándo enviar bloques adicionales. Para obtener más información sobre los bloques de datos, consulte Bloques de datos de audio.
Formato de datos Waveform-Audio PCM
El miembro lpData de la estructura WAVEHDR apunta a las muestras de datos de audio de forma de onda. Para los datos PCM de 8 bits, cada muestra se representa mediante un solo byte de datos sin signo. Para los datos PCM de 16 bits, cada muestra se representa mediante un valor con signo de 16 bits. En la tabla siguiente se resumen los valores máximo, mínimo y medio de los datos de audio de forma de onda pcM.
Formato de datos | Valor máximo | Valor mínimo | Valor de punto medio |
---|---|---|---|
PCM de 8 bits | 255 (0xFF) | 0 | 128 (0x80) |
PCM de 16 bits | 32.767 (0x7FFF) | –32.768 (0x8000) | 0 |
Empaquetado de datos de PCM
El orden de los bytes de datos varía entre formatos de 8 y 16 bits y entre formatos mono y estéreo. En la lista siguiente se describen el empaquetado de datos para los diferentes formatos de datos de formato de onda pcM.
Formato de audio con forma de onda PCM | Descripción |
---|---|
Mono de 8 bits | Cada muestra es de 1 byte que corresponde a un único canal de audio. El ejemplo 1 va seguido de los ejemplos 2, 3, 4, etc. |
Estéreo de 8 bits | Cada ejemplo es de 2 bytes. El ejemplo 1 va seguido de los ejemplos 2, 3, 4, etc. Para cada ejemplo, el primer byte es el canal 0 (canal izquierdo) y el segundo byte es el canal 1 (el canal derecho). |
Mono de 16 bits | Cada ejemplo es de 2 bytes. El ejemplo 1 va seguido de los ejemplos 2, 3, 4, etc. Para cada muestra, el primer byte es el byte de orden bajo del canal 0 y el segundo byte es el byte de orden superior del canal 0. |
Estéreo de 16 bits | Cada ejemplo es de 4 bytes. El ejemplo 1 va seguido de los ejemplos 2, 3, 4, etc. Para cada muestra, el primer byte es el byte de orden bajo del canal 0 (canal izquierdo); el segundo byte es el byte de orden superior del canal 0; el tercer byte es el byte de orden bajo del canal 1 (canal derecho); y el cuarto byte es el byte de orden superior del canal 1. |
Otros | Cada ejemplo se encuentra en un bloque que es un múltiplo de 4 bytes, pero las muestras pueden no estar alineadas por bytes. La disposición de los canales se especifica mediante una máscara. Para obtener más información, vea WAVEFORMATEXTENSIBLE. |
Cerrar dispositivos de salida de Waveform-Audio
Una vez completada la reproducción de audio con forma de onda, llame a waveOutClose para cerrar el dispositivo de salida. Si se llama a waveOutClose mientras se reproduce un archivo de audio con forma de onda, se produce un error en la operación de cierre y la función devuelve un código de error que indica que el dispositivo no se cerró. Si no desea esperar a que finalice la reproducción antes de cerrar el dispositivo, llame a la función waveOutReset antes de cerrar. Esto finaliza la reproducción y permite que el dispositivo se cierre. Asegúrese de usar la función waveOutUnprepareHeader para limpiar la preparación en todos los bloques de datos antes de cerrar el dispositivo.