我想要獲取我的Linux系統上可用的所有音頻設備的列表。然後我會將這個列表顯示在一個組合框中,用戶將從中選擇用於錄製/播放的設備。根據用戶的選擇,我將構建QAudioInput和QAudioOutput進行錄製/播放。Qt:獲取Linux中可用音頻設備的列表
根據Qt文檔,這可以通過使用QAudioDeviceInfo::availableDevices靜態方法來完成。此方法返回我係統中所有可用音頻設備的列表。
我已經使用這種方法來列出音頻設備的數量。這個方法應該返回一個只包含兩個元素的列表,因爲我的系統中安裝了兩個聲卡(一個在主板上,另一個是USB設備)。但它返回了一個包含23個項目的列表。當我訪問他們的名字,我得到了類似下面 -
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
這背後的原因可能是在後端使用的ALSA API。根據this article ALSA邏輯上將聲卡劃分爲多個邏輯音頻設備,Qt API在查詢驅動程序時會提取這些音頻設備。
我不想列出所有這些名稱供用戶選擇。我想列出類似 -
HDA-Intel
USB-Audio
從哪些用戶,然後選擇自己想要的聲卡..
有什麼辦法這可以用Qt做什麼?如果不是,我真的很想知道在這裏可以使用什麼其他替代方案。
此命令適當地返回可用音頻設備(在Windows 7上測試它)。 Qt的多媒體依賴於底層音頻驅動程序,即Linux的ALSA。 ALSA將所有這些設備中的聲卡劃分出來,所以Qt只是提取這些聲卡並顯示它。無論如何,這裏的解決方法是直接使用ALSA或像PulseAudio或Jack(我選擇PulseAudio)這樣的聲音服務器。 –