2011-11-14 2 views
3

내 Linux 시스템에서 사용할 수있는 모든 오디오 장치 목록을 가져오고 싶습니다. 그런 다음이 목록을 사용자가 녹음/재생에 사용할 장치를 선택할 수있는 콤보 상자에 표시합니다. 사용자의 선택에 따라 녹음/재생을 위해 QAudioInputQAudioOutput을 생성 할 것입니다.Qt : Linux에서 사용 가능한 오디오 장치 목록을 얻으십시오

Qt 설명서에 따르면 QAudioDeviceInfo::availableDevices 정적 방법을 사용하여이 작업을 수행 할 수 있습니다. 이 메서드는 내 시스템에서 사용 가능한 모든 오디오 장치 목록을 반환합니다.

이 방법을 사용하여 오디오 장치의 수를 나열했습니다. 이 방법은 시스템에 두 개의 사운드 카드가 설치되어 있기 때문에 두 개의 요소 만 포함하는 목록을 반환해야합니다 (하나는 마더 보드에, 다른 하나는 USB 장치). 그러나 23 개의 항목이 포함 된 목록을 반환했습니다. 이 뒤에 그 이유는 아마 백 엔드에서 사용중인 ALSA API입니다

default 
pulse 
front:CARD=Intel,DEV=0 
surround40:CARD=Intel,DEV=0 
surround41:CARD=Intel,DEV=0 
surround50:CARD=Intel,DEV=0 
surround51:CARD=Intel,DEV=0 
surround71:CARD=Intel,DEV=0 
dmix:CARD=Intel,DEV=0 
dsnoop:CARD=Intel,DEV=0 
hw:CARD=Intel,DEV=0 
plughw:CARD=Intel,DEV=0 
front:CARD=default,DEV=0 
surround40:CARD=default,DEV=0 
surround41:CARD=default,DEV=0 
surround50:CARD=default,DEV=0 
surround51:CARD=default,DEV=0 
surround71:CARD=default,DEV=0 
iec958:CARD=default,DEV=0 
dmix:CARD=default,DEV=0 
dsnoop:CARD=default,DEV=0 
hw:CARD=default,DEV=0 
plughw:CARD=default,DEV=0 

- 나는 그들의 이름을 액세스 할 때, 나는 다음과 같은 것을 얻었다. this article에 따르면 ALSA는 사운드 카드를 여러 논리적 오디오 장치로 논리적으로 분할합니다.이 장치는 Qt API가 드라이버를 쿼리 할 때 페치됩니다.

사용자가 선택할 수 있도록이 모든 이름을 나열하고 싶지 않습니다.

이가 Qt를 사용하여 수행 할 수있는 방법이 있나요 ... 사용자가 그들의 원하는 사운드 카드를 선택합니다있는

HDA-Intel 
USB-Audio 

- 내가 좋아하는 뭔가를 나열 할? 그렇지 않은 경우 여기에서 다른 대안을 사용할 수 있는지 알고 싶습니다.

답변

0

분명히 이것을하는 유일한 방법은 Qt에서 aplay/arecord 프로세스를 실행하고 결과 출력을 가져 와서 출력 문자열을 구문 분석하여 카드 이름과 해당 ID를 찾는 것입니다. 이 방법은 프로세스의 출력 문자열 형식에 너무 의존하므로 사용하지 않았습니다.

대신 내 시스템에서 사용 가능한 장치를 가져 오기 위해 PulseAudio 서버를 선택했습니다. Qt의 멀티미디어 API보다 훨씬 나은 제어 기능을 제공하기 때문에 오디오 I/O에도 사용했습니다.

0

해결 방법이라고 부릅니다.하지만 귀하의 목록에 CARD =라는 다른 값을 나열하여이 정보를 얻은 것으로 보입니다. 귀하의 예에서는 Intel과 기본값입니다.

응용 프로그램이 교차 플랫폼으로 간주되는 경우이 명령은 다른 운영 체제에서 무엇을 반환합니까?

+0

이 명령은 사용 가능한 오디오 장치를 적절하게 반환합니다 (Windows 7에서 테스트 됨). Qt의 멀티미디어는 기본 오디오 드라이버 (Linux 용 ALSA)에 의존합니다. ALSA는 이러한 모든 여러 장치에서 사운드 카드를 나누기 때문에 Qt는 사운드 카드를 가져 와서 표시합니다. 어쨌든, 여기서 해결 방법은 ALSA를 직접 사용하거나 PulseAudio 또는 Jack과 같은 사운드 서버 (PulseAudio를 선택 함)를 사용하는 것입니다. –

관련 문제