2013-10-11 3 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 채널 장치에서 open을 호출하는 것처럼 보입니다. 대신 네 개의 장치 모두의 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 개) 여야합니다. 이로 인해 하나의 스트림으로 애플리케이션을 실행할 수 있었으며 물론 잘못된 기기 또는 잘못된 숫자와 관련된 오류도 없었습니다 채널 수 :-)

감사합니다.