簡體   English   中英

WASAPI:為獨占輸出選擇波形格式

[英]WASAPI: Choosing a wave format for exclusive output

我正在嘗試使用WASAPI打開帶有輸出設備的獨占流。 我在選擇可接受的格式時遇到問題,因為似乎沒有關於給定設備接受哪種格式的提示。

在我的例子中, IAudioClient::GetMixFormat() ,否則將返回一種設備的默認格式,返回一種不能在獨占模式下使用的格式( IAudioClient::IsFormatSupported()返回AUDCLNT_E_UNSUPPORTED_FORMAT )。 我不知道從哪里去。 有一些荒謬的波形參數組合 - 我真的必須迭代它們中的每一個直到有效嗎?

好吧,我問了MSDN論壇,他們想出了一個很好的答案。

您需要通過IMMDevice::OpenPropertyStore()檢查設備的默認設備格式,然后檢查IPropertyStore::GetValue() ,而不是IAudioClient::GetMixFormat() 以下是檢索可接受的WAVEFORMATEX結構的代碼:

//CoInitialize/Enumerate devices

IPropertyStore* store = nullptr;

hr = device->OpenPropertyStore(STGM_READ, &store);

if (FAILED(hr)) {
    ExitProcess(1);
}

PROPVARIANT prop;

hr = store->GetValue(PKEY_AudioEngine_DeviceFormat, &prop);

if (FAILED(hr)) {
    ExitProcess(2);
}

hr = device->Activate (
    __uuidof(IAudioClient), 
    CLSCTX_ALL,
    NULL,
    (void**)&audioClient
);

device->Release();
device = nullptr;

if (FAILED(hr)) {
    ExitProcess(3);
}

hr = audioClient->IsFormatSupported (
    AUDCLNT_SHAREMODE_EXCLUSIVE,
    (PWAVEFORMATEX)prop.blob.pBlobData,
    NULL
);

if (FAILED(hr)) {
    ExitProcess(4);
}

hr的最終值是S_OK。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM