Función acmFormatEnumW (msacm.h)
La función acmFormatEnum enumera los formatos de audio de forma de onda disponibles para una etiqueta de formato determinada de un controlador ACM. Esta función continúa enumerando hasta que no haya ningún formato más adecuado para la etiqueta de formato o la función de devolución de llamada devuelve FALSE.
Sintaxis
MMRESULT ACMAPI acmFormatEnumW(
HACMDRIVER had,
LPACMFORMATDETAILSW pafd,
ACMFORMATENUMCBW fnCallback,
DWORD_PTR dwInstance,
DWORD fdwEnum
);
Parámetros
had
Controle al controlador ACM para consultar los detalles del formato de onda y audio. Si este parámetro es NULL, el ACM usa los detalles del primer controlador ACM adecuado.
pafd
Puntero a una estructura de
El fdwSupport miembro de la estructura debe inicializarse en cero.
Para buscar el tamaño necesario del búfer de pwfx de
fnCallback
Dirección de una función de devolución de llamada definida por la aplicación. Consulte acmFormatEnumCallback. Este parámetro no puede ser NULL.
dwInstance
Valor definido por la aplicación de 64 bits (DWORD_PTR) o de 32 bits (DWORD) que se pasa a la función de devolución de llamada junto con los detalles del formato ACM.
fdwEnum
Marcas para enumerar los formatos de una etiqueta de formato determinada. Se definen los siguientes valores.
[ACMFORMATDETAILS]La estructura (./nf-msacm-acmformatdetails.md) es válida. El enumerador solo enumerará los formatos de destino que se pueden convertir del formato de pwfx especificado. Si se usa esta marca, el miembro wFormatTag de la estructura WAVEFORMATEX no se puede WAVE_FORMAT_UNKNOWN. [ACMFORMATDETAILS]La estructura (./nf-msacm-acmformatdetails.md) es válida. El enumerador enumerará solo un formato que se ajuste a este atributo. [ACMFORMATDETAILS]La estructura (./nf-msacm-acmformatdetails.md) es válida. El enumerador enumerará todos los formatos de destino sugeridos para el formato de de pwfx especificadoValor | Significado |
---|---|
ACM_FORMATENUMF_CONVERT | |
ACM_FORMATENUMF_HARDWARE | El enumerador solo debe enumerar los formatos que se admiten como formatos nativos de entrada o salida en uno o varios de los dispositivos de audio de forma de onda instalados. Esta marca proporciona una manera de que una aplicación elija solo los formatos nativos de un dispositivo de audio de forma de onda instalado. Esta marca debe usarse con una o ambas marcas de ACM_FORMATENUMF_INPUT y ACM_FORMATENUMF_OUTPUT. Al especificar ACM_FORMATENUMF_INPUT y ACM_FORMATENUMF_OUTPUT solo se enumerarán los formatos que se pueden abrir para la entrada o salida. Esto es cierto independientemente de si se especifica esta marca. |
ACM_FORMATENUMF_INPUT | El enumerador debe enumerar solo los formatos admitidos para la entrada (grabación). |
ACM_FORMATENUMF_NCHANNELS | |
ACM_FORMATENUMF_NSAMPLESPERSEC | El miembro |
ACM_FORMATENUMF_OUTPUT | El enumerador debe enumerar solo los formatos admitidos para la salida (reproducción). |
ACM_FORMATENUMF_SUGGEST | |
ACM_FORMATENUMF_WBITSPERSAMPLE | El |
ACM_FORMATENUMF_WFORMATTAG | El miembro |
Valor devuelto
Devuelve cero si se ejecuta correctamente o si se produce un error. Entre los posibles valores de error se incluyen los siguientes.
Código devuelto | Descripción |
---|---|
|
No se pueden devolver los detalles del formato. |
|
Al menos una marca no es válida. |
|
El identificador especificado no es válido. |
|
Al menos un parámetro no es válido. |
Observaciones
Esta función devolverá MMSYSERR_NOERROR (cero) si no hay ningún controlador ACM adecuado instalado. Además, no se llamará a la función de devolución de llamada.
Ejemplos
En el ejemplo siguiente se muestra cómo enumerar los formatos que tienen la etiqueta de formato WAVE_FORMAT_MPEGLAYER3.
MMRESULT EnumerateMP3Codecs()
{
DWORD cbMaxSize = 0;
MMRESULT result = MMSYSERR_NOERROR;
ACMFORMATDETAILS acmFormatDetails;
// Buffer to hold the format information.
BYTE *pFormat = NULL; // Caller allocated.
// Find the largest format buffer needed.
result = acmMetrics(NULL, ACM_METRIC_MAX_SIZE_FORMAT, &cbMaxSize);
if (result != MMSYSERR_NOERROR)
{
return result;
}
// Allocate the format buffer.
pFormat = new BYTE[cbMaxSize];
if (pFormat == NULL)
{
return MMSYSERR_NOMEM;
}
ZeroMemory(pFormat, cbMaxSize);
// Ask for WAVE_FORMAT_MPEGLAYER3 formats.
WAVEFORMATEX* pWaveFormat = (WAVEFORMATEX*)pFormat;
pWaveFormat->wFormatTag = WAVE_FORMAT_MPEGLAYER3;
// Set up the acmFormatDetails structure.
ZeroMemory(&acmFormatDetails, sizeof(acmFormatDetails));
acmFormatDetails.cbStruct = sizeof(ACMFORMATDETAILS);
acmFormatDetails.pwfx = pWaveFormat;
acmFormatDetails.cbwfx = cbMaxSize;
// For the ACM_FORMATENUMF_WFORMATTAG request, the format
// tag in acmFormatDetails must match the format tag in
// the pFormat buffer.
acmFormatDetails.dwFormatTag = WAVE_FORMAT_MPEGLAYER3;
result = acmFormatEnum(NULL, &acmFormatDetails, acmFormatEnumCallback,
0, ACM_FORMATENUMF_WFORMATTAG);
delete [] pFormat;
return result;
}
En el ejemplo siguiente se muestra la función de devolución de llamada del ejemplo anterior. Se llama a la función de devolución de llamada una vez para cada formato coincidente o hasta que la devolución de llamada devuelva FALSE.
BOOL CALLBACK acmFormatEnumCallback(
HACMDRIVERID hadid,
LPACMFORMATDETAILS pafd,
DWORD_PTR dwInstance,
DWORD fdwSupport
)
{
BOOL bContinue = TRUE;
MPEGLAYER3WAVEFORMAT *pMP3WaveFormat = NULL;
if (pafd->pwfx->wFormatTag == WAVE_FORMAT_MPEGLAYER3)
{
pMP3WaveFormat = (MPEGLAYER3WAVEFORMAT*)pafd->pwfx;
// TODO: Examine the format.
// To halt the enumeration, set bContinue to FALSE.
}
return bContinue;
}
Nota
El encabezado msacm.h define acmFormatEnum como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 2000 Professional [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows 2000 Server [solo aplicaciones de escritorio] |
de la plataforma de destino de |
Windows |
encabezado de |
msacm.h |
biblioteca de |
Msacm32.lib |
DLL de |
Msacm32.dll |
Consulte también
funciones de compresión de audio de