acmFormatEnumA-Funktion (msacm.h)
Die acmFormatEnum-Funktion listet Waveform-Audioformate auf, die für ein bestimmtes Formattag von einem ACM-Treiber verfügbar sind. Diese Funktion setzt die Aufzählung fort, bis keine geeigneteren Formate für das Formattag vorhanden sind oder die Rückruffunktion FALSE zurückgibt.
Syntax
MMRESULT ACMAPI acmFormatEnumA(
HACMDRIVER had,
LPACMFORMATDETAILSA pafd,
ACMFORMATENUMCBA fnCallback,
DWORD_PTR dwInstance,
DWORD fdwEnum
);
Parameter
had
Handle an den ACM-Treiber, um Details des Waveform-Audio-Formats abzufragen. Wenn dieser Parameter NULL ist, verwendet der ACM die Details aus dem ersten geeigneten ACM-Treiber.
pafd
Zeiger auf eine ACMFORMATDETAILS-Struktur , die die an die fnCallback-Funktion übergebenen Formatdetails enthält. Diese Struktur muss die Elemente cbStruct, pwfx und cbwfx der ACMFORMATDETAILS-Struktur initialisiert haben. Der dwFormatTag-Member muss auch mit WAVE_FORMAT_UNKNOWN oder einem gültigen Formattag initialisiert werden.
Der fdwSupport-Member der -Struktur muss mit 0 (null) initialisiert werden.
Um die erforderliche Größe des pwfx-Puffers zu ermitteln, rufen Sie acmMetrics mit dem flag ACM_METRIC_MAX_SIZE_FORMAT auf.
fnCallback
Adresse einer anwendungsdefinierten Rückruffunktion. Siehe acmFormatEnumCallback. Dieser Parameter darf nicht NULL sein.
dwInstance
Ein anwendungsdefinierter 64-Bit-Wert (DWORD_PTR) oder 32-Bit (DWORD), der zusammen mit ACM-Formatdetails an die Rückruffunktion übergeben wird.
fdwEnum
Flags zum Aufzählen der Formate für ein bestimmtes Formattag. Die folgenden Werte werden definiert.
[ACMFORMATDETAILS] (./nf-msacm-acmformatdetails.md)-Struktur ist gültig. Der Enumerator listet nur Zielformate auf, die aus dem angegebenen pwfx-Format konvertiert werden können. Wenn dieses Flag verwendet wird, kann der wFormatTag-Member der WAVEFORMATEX-Struktur nicht WAVE_FORMAT_UNKNOWN werden. [ACMFORMATDETAILS] (./nf-msacm-acmformatdetails.md)-Struktur ist gültig. Der Enumerator listet nur ein Format auf, das diesem Attribut entspricht. [ACMFORMATDETAILS] (./nf-msacm-acmformatdetails.md)-Struktur ist gültig. Der Enumerator listet alle vorgeschlagenen Zielformate für das angegebene pwfx-Format auf. Dieser Mechanismus kann anstelle der acmFormatSuggest-Funktion verwendet werden, damit eine Anwendung das am besten vorgeschlagene Format für die Konvertierung auswählen kann. Das dwFormatIndex-Element wird bei der Rückgabe immer auf 0 festgelegt. Wenn dieses Flag verwendet wird, kann der wFormatTag-Member der WAVEFORMATEX-Struktur nicht WAVE_FORMAT_UNKNOWN werden.Wert | Bedeutung |
---|---|
ACM_FORMATENUMF_CONVERT | |
ACM_FORMATENUMF_HARDWARE | Der Enumerator sollte nur Formate aufzählen, die als native Eingabe- oder Ausgabeformate auf mindestens einem der installierten Waveform-Audiogeräte unterstützt werden. Dieses Flag bietet eine Möglichkeit für eine Anwendung, nur Formate auszuwählen, die für ein installiertes Waveform-Audiogerät nativ sind. Dieses Flag muss mit einem oder beiden der flags ACM_FORMATENUMF_INPUT und ACM_FORMATENUMF_OUTPUT verwendet werden. Wenn Sie sowohl ACM_FORMATENUMF_INPUT als auch ACM_FORMATENUMF_OUTPUT angeben, werden nur Formate aufgezählt, die für die Eingabe oder Ausgabe geöffnet werden können. Dies gilt unabhängig davon, ob dieses Flag angegeben ist. |
ACM_FORMATENUMF_INPUT | Der Enumerator sollte nur Formate aufzählen, die für die Eingabe (Aufzeichnung) unterstützt werden. |
ACM_FORMATENUMF_NCHANNELS | |
ACM_FORMATENUMF_NSAMPLESPERSEC | Der nSamplesPerSec-Member der WAVEFORMATEX-Struktur , auf die der pwfx-Member der ACMFORMATDETAILS-Struktur verweist, ist gültig. Der Enumerator listet nur ein Format auf, das diesem Attribut entspricht. |
ACM_FORMATENUMF_OUTPUT | Der Enumerator sollte nur Formate aufzählen, die für die Ausgabe (Wiedergabe) unterstützt werden. |
ACM_FORMATENUMF_SUGGEST | |
ACM_FORMATENUMF_WBITSPERSAMPLE | Das wBitsPerSample-Element der WAVEFORMATEX-Struktur , auf die vom pwfx-Member der ACMFORMATDETAILS-Struktur verwiesen wird, ist gültig. Der Enumerator listet nur ein Format auf, das diesem Attribut entspricht. |
ACM_FORMATENUMF_WFORMATTAG | Das wFormatTag-Element der WAVEFORMATEX-Struktur , auf die der pwfx-Member der ACMFORMATDETAILS-Struktur verweist, ist gültig. Der Enumerator listet nur ein Format auf, das diesem Attribut entspricht. Das dwFormatTag-Element der ACMFORMATDETAILS-Struktur muss gleich dem wFormatTag-Member sein. Der Wert von wFormatTag kann in diesem Fall nicht WAVE_FORMAT_UNKNOWN werden. |
Rückgabewert
Gibt null zurück, wenn erfolgreich oder andernfalls ein Fehler auftritt. Mögliche Fehlerwerte sind:
Rückgabecode | Beschreibung |
---|---|
|
Die Details für das Format können nicht zurückgegeben werden. |
|
Mindestens ein Flag ist ungültig. |
|
Das angegebene Handle ist ungültig. |
|
Mindestens ein Parameter ist ungültig. |
Hinweise
Diese Funktion gibt MMSYSERR_NOERROR (null) zurück, wenn keine geeigneten ACM-Treiber installiert sind. Darüber hinaus wird die Rückruffunktion nicht aufgerufen.
Beispiele
Im folgenden Beispiel wird gezeigt, wie Formate aufgelistet werden, die über das WAVE_FORMAT_MPEGLAYER3 Formattag verfügen.
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;
}
Das nächste Beispiel zeigt die Rückruffunktion für das vorherige Beispiel. Die Rückruffunktion wird für jedes übereinstimmende Format einmal aufgerufen oder bis der Rückruf FALSE zurückgibt.
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;
}
Hinweis
Der msacm.h-Header definiert acmFormatEnum als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderungen
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | msacm.h |
Bibliothek | Msacm32.lib |
DLL | Msacm32.dll |
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für