Función acmFormatEnum (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 formatos más adecuados para la etiqueta de formato o la función de devolución de llamada devuelve FALSE.
Sintaxis
MMRESULT ACMAPI acmFormatEnum(
HACMDRIVER had,
LPACMFORMATDETAILS pafd,
ACMFORMATENUMCB fnCallback,
DWORD_PTR dwInstance,
DWORD fdwEnum
);
Parámetros
had
Controle al controlador ACM para consultar los detalles del formato de forma de onda. Si este parámetro es NULL, el ACM usa los detalles del primer controlador ACM adecuado.
pafd
Puntero a una estructura ACMFORMATDETAILS para contener los detalles de formato pasados a la función fnCallback . Esta estructura debe tener inicializados los miembros cbStruct, pwfx y cbwfx de la estructura ACMFORMATDETAILS . El miembro dwFormatTag también debe inicializarse en WAVE_FORMAT_UNKNOWN o en una etiqueta de formato válida.
El miembro fdwSupport de la estructura debe inicializarse en cero.
Para buscar el tamaño necesario del búfer de pwfx , llame a acmMetrics con la marca ACM_METRIC_MAX_SIZE_FORMAT.
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 valores siguientes.
[ACMFORMATDETAILS] (./nf-msacm-acmformatdetails.md) la estructura es válida. El enumerador solo enumerará los formatos de destino que se pueden convertir desde el formato pwfx especificado. Si se usa esta marca, el miembro wFormatTag de la estructura WAVEFORMATEX no puede ser WAVE_FORMAT_UNKNOWN. [ACMFORMATDETAILS] (./nf-msacm-acmformatdetails.md) la estructura es válida. El enumerador enumerará solo un formato que se ajuste a este atributo. [ACMFORMATDETAILS] (./nf-msacm-acmformatdetails.md) la estructura es válida. El enumerador enumerará todos los formatos de destino sugeridos para el formato pwfx determinado. Este mecanismo se puede usar en lugar de la función acmFormatSuggest para permitir que una aplicación elija el mejor formato sugerido para la conversión. El miembro dwFormatIndex siempre se establecerá en cero al devolver. Si se usa esta marca, el miembro wFormatTag de la estructura WAVEFORMATEX no puede ser WAVE_FORMAT_UNKNOWN.Valor | 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 true independientemente de si se especifica esta marca. |
ACM_FORMATENUMF_INPUT | El enumerador debe enumerar solo los formatos que se admiten para la entrada (grabación). |
ACM_FORMATENUMF_NCHANNELS | |
ACM_FORMATENUMF_NSAMPLESPERSEC | El miembro nSamplesPerSec de la estructura WAVEFORMATEX a la que apunta el miembro pwfx de la estructura ACMFORMATDETAILS es válido. El enumerador enumerará solo un formato que se ajuste a este atributo. |
ACM_FORMATENUMF_OUTPUT | El enumerador debe enumerar solo los formatos que se admiten para la salida (reproducción). |
ACM_FORMATENUMF_SUGGEST | |
ACM_FORMATENUMF_WBITSPERSAMPLE | El miembro wBitsPerSample de la estructura WAVEFORMATEX a la que apunta el miembro pwfx de la estructura ACMFORMATDETAILS es válido. El enumerador enumerará solo un formato que se ajuste a este atributo. |
ACM_FORMATENUMF_WFORMATTAG | El miembro wFormatTag de la estructura WAVEFORMATEX a la que apunta el miembro pwfx de la estructura ACMFORMATDETAILS es válido. El enumerador enumerará solo un formato que se ajuste a este atributo. El miembro dwFormatTag de la estructura ACMFORMATDETAILS debe ser igual al miembro wFormatTag . El valor de wFormatTag no se puede WAVE_FORMAT_UNKNOWN en este caso. |
Valor devuelto
Devuelve cero si es correcto o si se produce un error en caso contrario. Entre los valores de error posibles 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. |
Comentarios
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 devuelve 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;
}
Requisitos
Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | msacm.h |
Library | Msacm32.lib |
Archivo DLL | Msacm32.dll |