acmFormatEnumW, fonction (msacm.h)
La fonction acmFormatEnum énumère les formats audio de forme d’onde disponibles pour une balise de format donnée à partir d’un pilote ACM. Cette fonction continue d’énumérer jusqu’à ce qu’il n’y ait plus de formats appropriés pour la balise de format ou que la fonction de rappel retourne FALSE.
Syntaxe
MMRESULT ACMAPI acmFormatEnumW(
HACMDRIVER had,
LPACMFORMATDETAILSW pafd,
ACMFORMATENUMCBW fnCallback,
DWORD_PTR dwInstance,
DWORD fdwEnum
);
Paramètres
had
Gérez le pilote ACM pour rechercher les détails du format audio waveform. Si ce paramètre est NULL, le gestionnaire de configuration ACM utilise les détails du premier pilote ACM approprié.
pafd
Pointeur vers une structure ACMFORMATDETAILS pour contenir les détails du format transmis à la fonction fnCallback. Cette structure doit avoir lecbStruct
Le fdwSupport membre de la structure doit être initialisé à zéro.
Pour rechercher la taille requise de la mémoire tampon pwfx
fnCallback
Adresse d’une fonction de rappel définie par l’application. Voir acmFormatEnumCallback. Ce paramètre ne peut pas être NULL.
dwInstance
Valeur définie par l’application 64 bits (DWORD_PTR) ou 32 bits (DWORD) transmise à la fonction de rappel, ainsi que les détails du format ACM.
fdwEnum
Indicateurs pour énumérer les formats d’une balise de format donnée. Les valeurs suivantes sont définies.
[ACMFORMATDETAILS]La structure (./nf-msacm-acmformatdetails.md) est valide. L’énumérateur énumère uniquement les formats de destination qui peuvent être convertis à partir du format pwfx donné. Si cet indicateur est utilisé, le membre wFormatTag de la structure WAVEFORMATEX ne peut pas être WAVE_FORMAT_UNKNOWN. [ACMFORMATDETAILS]La structure (./nf-msacm-acmformatdetails.md) est valide. L’énumérateur énumère uniquement un format conforme à cet attribut. [ACMFORMATDETAILS]La structure (./nf-msacm-acmformatdetails.md) est valide. L’énumérateur énumère tous les formats de destination suggérés pour le format pwfx donné. Ce mécanisme peut être utilisé au lieu de la fonction acmFormatSuggest pour permettre à une application de choisir le meilleur format suggéré pour la conversion. Le membreValeur | Signification |
---|---|
ACM_FORMATENUMF_CONVERT | |
ACM_FORMATENUMF_HARDWARE | L’énumérateur ne doit énumérer que les formats pris en charge en tant que formats d’entrée ou de sortie natifs sur un ou plusieurs des appareils waveform-audio installés. Cet indicateur permet à une application de choisir uniquement les formats natifs d’un appareil waveform-audio installé. Cet indicateur doit être utilisé avec un ou les deux indicateurs ACM_FORMATENUMF_INPUT et ACM_FORMATENUMF_OUTPUT. La spécification de ACM_FORMATENUMF_INPUT et de ACM_FORMATENUMF_OUTPUT énumère uniquement les formats qui peuvent être ouverts pour l’entrée ou la sortie. Cela est vrai, que cet indicateur soit spécifié. |
ACM_FORMATENUMF_INPUT | L’énumérateur doit énumérer uniquement les formats pris en charge pour l’entrée (enregistrement). |
ACM_FORMATENUMF_NCHANNELS | |
ACM_FORMATENUMF_NSAMPLESPERSEC | Le membre |
ACM_FORMATENUMF_OUTPUT | L’énumérateur doit énumérer uniquement les formats pris en charge pour la sortie (lecture). |
ACM_FORMATENUMF_SUGGEST | |
ACM_FORMATENUMF_WBITSPERSAMPLE | Le membre |
ACM_FORMATENUMF_WFORMATTAG | Le membre wFormatTag |
Valeur de retour
Retourne zéro en cas de réussite ou d’erreur dans le cas contraire. Les valeurs d’erreur possibles sont les suivantes.
Retourner le code | Description |
---|---|
|
Les détails du format ne peuvent pas être retournés. |
|
Au moins un indicateur n’est pas valide. |
|
Le handle spécifié n’est pas valide. |
|
Au moins un paramètre n’est pas valide. |
Remarques
Cette fonction retourne MMSYSERR_NOERROR (zéro) si aucun pilote ACM approprié n’est installé. De plus, la fonction de rappel n’est pas appelée.
Exemples
L’exemple suivant montre comment énumérer les formats qui ont la balise de format 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;
}
L’exemple suivant montre la fonction de rappel de l’exemple précédent. La fonction de rappel est appelée une seule fois pour chaque format correspondant ou jusqu’à ce que le rappel retourne 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;
}
Note
L’en-tête msacm.h définit acmFormatEnum comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
serveur minimum pris en charge | Windows 2000 Server [applications de bureau uniquement] |
plateforme cible | Windows |
d’en-tête | msacm.h |
bibliothèque | Msacm32.lib |
DLL | Msacm32.dll |