Linux 多个音频设备

Linux 多个音频设备

我有两张声卡:一张 PCI 声卡和一张 USB 声卡。

我希望如果插入了 USB 卡,它将作为整个系统的默认设备,否则(如果未插入 USB 卡)将使用 PCI 卡。

我怎样才能做到这一点?

答案1

PulseAudio 将以这种方式透明地处理音频输出切换。只需插入 USB 设备,在系统的全局声音首选项或pavucontrol所需应用程序的声音首选项中选择它,PulseAudio 就会按要求执行操作。

答案2

以下是我使用的 Python 脚本:

#!/usr/bin/env python
# This script monitors USB connections and when the audio device is connected
# makes it the default output device.

import dbus, gobject, os
from dbus.mainloop.glib import DBusGMainLoop
from subprocess import Popen, PIPE

PCI_DEVICE = 'alsa_output.pci-0000_00_1b.0.analog-stereo'
USB_DEVICE = 'alsa_output.usb-Logitech_Logitech_Z205-00-default.analog-stereo'

def set_default_sink(sink):
    popen = Popen('pacmd', stdin = PIPE, stdout = PIPE)
    popen.communicate('set-default-sink ' + sink)

def device_added(udi):
    if udi.find('alsa') >= 0:
        set_default_sink(USB_DEVICE)

def device_removed(udi):
    if udi.find('alsa') >= 0:
        set_default_sink(PCI_DEVICE)

DBusGMainLoop(set_as_default = True)
bus = dbus.SystemBus()
hal_manager = bus.get_object('org.freedesktop.Hal',
                             '/org/freedesktop/Hal/Manager')
bus.add_signal_receiver(device_added, 'DeviceAdded',
                        'org.freedesktop.Hal.Manager', 'org.freedesktop.Hal',
                        '/org/freedesktop/Hal/Manager')
bus.add_signal_receiver(device_removed, 'DeviceRemoved',
                        'org.freedesktop.Hal.Manager', 'org.freedesktop.Hal',
                        '/org/freedesktop/Hal/Manager')

gobject.MainLoop().run()

接收器名称(PCI_DEVICE用于内置扬声器和USB_DEVICEUSB 扬声器)特定于我的机器,因此您需要替换它们。您可以从中获取这些名称pacmd-pulseaudio-utils只需在提示符list-sinks中输入pacmd并找到您的设备名称(必须连接 USB 扬声器)。

相关内容