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:
- Otwórz plik zawierający strumień Windows Media Audio 9 Professional, wywołując metodę IWMReader::Open.
- Zidentyfikuj numer wyjściowy żądanego strumienia. Aby uzyskać więcej informacji, zobacz Identyfikacja numerów wyjściowych.
- 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.
- 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.
- Ustaw format danych wyjściowych, wywołując metodę IWMReader::SetOutputProps. Przekaż wskaźnik do interfejsu IWMOutputMediaProps uzyskanego w kroku 4.
- 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 pokrewne