Udostępnij za pośrednictwem


Aby dekodować dźwięk do S/PDIF

[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader i Sink Writer. Czytnik źródła i Zapis do ujścia zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał czytnika źródeł i zapisywacza ujścia zamiast zestawu SDK Windows Media Format 11, jeśli jest to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Audio zakodowane za pomocą kodera Windows Media Audio 9 Professional można dekompresować do formatu Sony/Philips Digital Interconnect Format (S/PDIF). Aby wygenerować dane wyjściowe S/PDIF, wykonaj następujące kroki:

  1. Otwórz plik zawierający strumień Windows Media Audio 9 Professional, wywołując metodę IWMReader::Open.
  2. Zidentyfikuj numer wyjściowy żądanego strumienia. Aby uzyskać więcej informacji, zobacz Identyfikacja numerów wyjściowych.
  3. Wywołaj metodę IWMReaderAdvanced2::SetOutputSetting, aby skonfigurować dane wyjściowe S/PDIF. Użyj g_wszEnableWMAProSPDIFOutput dla nazwy ustawienia. Typ danych to WMT_TYPE_BOOL; ustaw wartość na TRUE, aby włączyć wyjście S/PDIF.
  4. Pobierz interfejs właściwości formatu wyjściowego (IWMOutputMediaProps) żądanego formatu wyjściowego, wywołując metodę IWMReader::GetOutputFormat. Aby uzyskać więcej informacji na temat wyliczania formatów danych wyjściowych, zobacz Przypisywanie formatów danych wyjściowych.
  5. Ustaw format danych wyjściowych, wywołując metodę IWMReader::SetOutputProps. Przekaż wskaźnik do interfejsu IWMOutputMediaProps uzyskanego w kroku 4.
  6. Wprowadź inne zmiany konfiguracji i rozpocznij odtwarzanie.

Notatka

Powyższe kroki można wykonać na czytniku synchronicznym przy użyciu odpowiednich metod interfejsu IWMSyncReader.

 

Poniższy przykładowy kod pokazuje, jak ustawić strumień audio, aby dane wyjściowe były w formacie S/PDIF. Ta funkcja zakłada, że plik został już załadowany do czytnika i że numer wyjściowy został zidentyfikowany. Aby uzyskać więcej informacji na temat korzystania z tego kodu, zobacz Using the Code Examples.

HRESULT SetSPDIF(DWORD dwOutputNum, IWMReader* pReader)
{
    HRESULT hr = S_OK;

    IWMReaderAdvanced2*  pReaderAdv   = NULL;
    IWMOutputMediaProps* pOutputProps = NULL; 

    BOOL fValue = TRUE;

    // Get the advanced reader interface.
    hr = pReader->QueryInterface(IID_IWMReaderAdvanced2,
                                 (void**)&pReaderAdv);
    GOTO_EXIT_IF_FAILED(hr);

    // Set S/PDIF output.
    hr = pReaderAdv->SetOutputSetting(dwOutputNum, 
                                      g_wszEnableWMAProSPDIFOutput, 
                                      WMT_TYPE_BOOL, 
                                      (BYTE*)&fValue, 
                                      sizeof(BOOL));
    GOTO_EXIT_IF_FAILED(hr);

    // Get the first output format for the stream.
    // NOTE: You could also enumerate the available output formats
    // and pick one to use.

    hr = pReader->GetOutputFormat(dwOutputNum, 0, &pOutputProps);
    GOTO_EXIT_IF_FAILED(hr);

    // Set the output properties back on the reader.
    hr = pReader->SetOutputProps(dwOutputNum, pOutputProps);

Exit:
    SAFE_RELEASE(pReaderAdv);
    SAFE_RELEASE(pOutputProps);

    return hr;
}

tematy zaawansowane

odczytywanie plików ASF

interfejs IWMReader

IWMReaderAdvanced2 Interfejs

Interfejs IWMSyncReader