acmFormatEnum, 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 acmFormatEnum(
HACMDRIVER had,
LPACMFORMATDETAILS pafd,
ACMFORMATENUMCB fnCallback,
DWORD_PTR dwInstance,
DWORD fdwEnum
);
Paramètres
had
Gérez le pilote ACM pour interroger les détails du format audio de forme d’onde. Si ce paramètre a la valeur NULL, ACM utilise les détails du premier pilote ACM approprié.
pafd
Pointeur vers une structure ACMFORMATDETAILS pour contenir les détails de format transmis à la fonction fnCallback . Les membres cbStruct, pwfx et cbwfx de la structure ACMFORMATDETAILS doivent être initialisés pour cette structure. Le membre dwFormatTag doit également être initialisé à WAVE_FORMAT_UNKNOWN ou à une balise de format valide.
Le membre fdwSupport de la structure doit être initialisé à zéro.
Pour trouver la taille requise de la mémoire tampon pwfx , appelez acmMetrics avec l’indicateur ACM_METRIC_MAX_SIZE_FORMAT.
fnCallback
Adresse d’une fonction de rappel définie par l’application. Consultez acmFormatEnumCallback. Ce paramètre ne peut pas être NULL.
dwInstance
Valeur définie par l’application 64 bits (DWORD_PTR) ou 32 bits (DWORD) qui est passée à la fonction de rappel avec les détails du format ACM.
fdwEnum
Indicateurs permettant d’é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é à la place de la fonction acmFormatSuggest pour permettre à une application de choisir le meilleur format suggéré pour la conversion. Le membre dwFormatIndex est toujours défini sur zéro lors du retour. Si cet indicateur est utilisé, le membre wFormatTag de la structure WAVEFORMATEX ne peut pas être WAVE_FORMAT_UNKNOWN.Valeur | Signification |
---|---|
ACM_FORMATENUMF_CONVERT | |
ACM_FORMATENUMF_HARDWARE | L’énumérateur doit énumérer uniquement les formats pris en charge en tant que formats d’entrée ou de sortie natifs sur un ou plusieurs des appareils audio de forme d’onde 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 l’un des indicateurs ACM_FORMATENUMF_INPUT et ACM_FORMATENUMF_OUTPUT ou les deux. 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é ou non. |
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 nSamplesPerSec de la structure WAVEFORMATEX pointée par le membre pwfx de la structure ACMFORMATDETAILS est valide. L’énumérateur énumère uniquement un format conforme à cet attribut. |
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 wBitsPerSample de la structure WAVEFORMATEX pointée par le membre pwfx de la structure ACMFORMATDETAILS est valide. L’énumérateur énumère uniquement un format conforme à cet attribut. |
ACM_FORMATENUMF_WFORMATTAG | Le membre wFormatTag de la structure WAVEFORMATEX pointé par le membre pwfx de la structure ACMFORMATDETAILS est valide. L’énumérateur énumère uniquement un format conforme à cet attribut. Le membre dwFormatTag de la structure ACMFORMATDETAILS doit être égal au membre wFormatTag . La valeur de wFormatTag ne peut pas être WAVE_FORMAT_UNKNOWN dans ce cas. |
Valeur retournée
Retourne zéro en cas de réussite ou une erreur dans le cas contraire. Les valeurs d’erreur possibles sont les suivantes.
Code de retour | 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. |
Notes
Cette fonction retourne MMSYSERR_NOERROR (zéro) si aucun pilote ACM approprié n’est installé. En outre, 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 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;
}
Spécifications
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | msacm.h |
Bibliothèque | Msacm32.lib |
DLL | Msacm32.dll |