Compartir a través de


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 ACMFORMATDETAILS para contener los detalles de formato pasados a la función fnCallback de . Esta estructura debe tener los miembros de cbStruct, pwfxy cbwfx miembros de la estructura ACMFORMATDETAILS inicializada. El miembro dwFormatTag también debe inicializarse para WAVE_FORMAT_UNKNOWN o una etiqueta de formato válida.

El fdwSupport miembro de la estructura debe inicializarse en cero.

Para buscar el tamaño necesario del búfer de pwfx de , 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 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 especificado . Este mecanismo se puede usar en lugar de la función de 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 se puede 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 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 nSamplesPerSec de la WAVEFORMATEX apuntado por el miembro de 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 admitidos para la salida (reproducción).
ACM_FORMATENUMF_SUGGEST
ACM_FORMATENUMF_WBITSPERSAMPLE El wBitsPerSample de la estructura WAVEFORMATEX de apuntada por el miembro de pwfx de la estructura ACMFORMATDETAILS es válida. El enumerador enumerará solo un formato que se ajuste a este atributo.
ACM_FORMATENUMF_WFORMATTAG El miembro wFormatTag de la estructura WAVEFORMATEX apuntada por el miembro pwfx de la estructura ACMFORMATDETAILS es válida. 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 se ejecuta correctamente o si se produce un error. Entre los posibles valores de error 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.

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

administrador de compresión de audio