Compartir a través de


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
ACMERR_NOTPOSSIBLE
No se pueden devolver los detalles del formato.
MMSYSERR_INVALFLAG
Al menos una marca no es válida.
MMSYSERR_INVALHANDLE
El identificador especificado no es válido.
MMSYSERR_INVALPARAM
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

Consulte también

Funciones de compresión de audio

Administrador de compresión de audio