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
ACMERR_NOTPOSSIBLE
Die Details für das Format können nicht zurückgegeben werden.
MMSYSERR_INVALFLAG
Mindestens ein Flag ist ungültig.
MMSYSERR_INVALHANDLE
Das angegebene Handle ist ungültig.
MMSYSERR_INVALPARAM
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

Audiokomprimierungsfunktionen

Audiokomprimierungs-Manager