2013-10-11 75 views
1

此查詢涉及Portaudio框架。在提出這個問題之前,我有一點背景知識:我正在使用PortAudio中的應用程序通過多通道(= 8)設備輸出音頻。但是,我使用的設備並未將自己公開爲單個8聲道設備,而是作爲4個立體聲設備顯示在我的設備列表中。在尋找解決這個問題的方法時,我知道PortAudio中的WinMME支持多種設備。在PortAudio中配置多個設備:設備錯誤無效

現在,我瀏覽了相應的頭文件(「pa_win_wmme.h」)並遵循了現在的建議。但是在調用PA_OpenStream()後,我得到'無效設備'錯誤(錯誤號-9996)。在上面提到的頭文件中,他們實際上指定了在配置多個設備時使用的正確參數以避免此錯誤,但儘管如此,仍然會出現錯誤。 所以我想知道是否有人遇到類似的問題,以及我是否錯過/錯誤配置了任何東西。

我粘貼的下面的代碼所需要的片段以供參考:

PaStreamParameters outputParameters; 
PaWinMmeStreamInfo wmmeStreamInfo; 
PaWinMmeDeviceAndChannelCount wmmeDeviceAndNumChannels;** 
... 
... 
outputParameters.device = paUseHostApiSpecificDeviceSpecification; 
outputParameters.channelCount = 8; 
outputParameters.sampleFormat = paFloat32; /* 32 bit floating point processing */ 
outputParameters.hostApiSpecificStreamInfo = NULL; 

wmmeStreamInfo.size = sizeof(PaWinMmeStreamInfo); 
wmmeStreamInfo.hostApiType = paMME; 
wmmeStreamInfo.version = 1; 
wmmeStreamInfo.flags = paWinMmeUseMultipleDevices; 
wmmeDeviceAndNumChannels.channelCount = 2; 
wmmeDeviceAndNumChannels.device = 3; 
wmmeStreamInfo.devices = &wmmeDeviceAndNumChannels; 
wmmeStreamInfo.deviceCount = 4; 
outputParameters.hostApiSpecificStreamInfo = &wmmeStreamInfo; 

裝置ID =獲得3通過

Pa_GetHostApiInfo(Pa_HostApiTypeIdToHostApiIndex(paMME))->defaultOutputDevice 

希望已進行的查詢不夠清楚。如果需要,將很樂意提供更多細節。

謝謝。

回答

0

根據上面粘貼的代碼,它看起來像您試圖打開一個8通道設備上打開。相反,你必須得到所有四個設備的Pa索引並打開4次。每個立體聲設備一次。然後您將擁有4個交錯立體聲流來維護。我的猜測是,將channelCount = 8更改爲channelCount = 2將允許打開第​​一個流。

+0

@trukvl ..感謝您的回覆。如果我使用單個設備,也就是說,如果我將outputParameters.channelCount設置爲2(正如你所提到的)並且deviceCount設置爲1,系統就可以工作。唯一的問題是,它將是立體聲輸出,這當然是可以預料的。現在擴展這個來播放8聲道(通過修改立體聲配置爲問題中給出的),似乎給出了這個問題。我會嘗試一下關於打開4個流並回來的建議。 – user2870035

1

我終於弄清楚了這個錯誤:-) 多個設備的配置必須作爲一個數組來完成。例如,在上述情況下, wmmeDeviceAndNumChannels必須是4的數組,每個個體字段包含4個立體聲設備中的每一個的對應設備索引。 channelCount仍然爲2. outputParameters.channelCount仍然必須是頻道的總數,即8個。由此我能夠使用單個流運行應用程序,當然,沒有任何與無效設備或無效號碼相關的錯誤:-)

謝謝。