通过两个或多个输出/设备播放声音

Nat*_*.B. 127 sound pulseaudio audio-jack

我认为这是一个非常简单的概念。我有一张声卡和一副蓝牙耳机。我想通过我的声卡和蓝牙耳机播放我的音频。

我相信 Windows 有复选框允许您“检查”输出以启用/禁用它们,但 Ubuntu 似乎具有等效于无线电选择器(您一次只能选择一个)。

额外问题:同样,我的声卡上有 5 个模拟输出通道(除了我的数字和 HDMI 音频)——我希望能够确定每个端口输出的内容(例如“前置扬声器”在所有 5 个或“前”、“中”、“后”等)。

提前致谢!

Tak*_*kat 130

有了paprefs你有机会获得一个虚拟的输出设备,使同时输出到所有连接声卡/设备:

sudo apt install paprefs 
Run Code Online (Sandbox Code Playgroud)

然后在终端运行中paprefs,选择“同时输出”选项卡,并选中“为所有本地声卡上的同时输出添加虚拟输出”。

纸条

可以在pulseaudio声音首选项菜单的“输出”选项卡中选择额外创建的用于同时输出的音频输出设备:

在此处输入图片说明

在此示例中,它显示为 HDMI 设备,但一旦您的蓝牙设备被识别,它也可用于同时输出。

这些更改可能需要通过注销并重新登录到您的会话或通过pulseaudio -k在终端中运行来重新启动pulseaudio 才能生效。


如果paprefs没有完成这项工作,或者如果您不想安装 paprefs,请从命令行使用以下命令:

pactl load-module module-combine-sink
Run Code Online (Sandbox Code Playgroud)

要从命令行卸载模块并将pulseaudio重置为默认值,只需使用pulseaudio -k或发出重新启动pulseaudio

pactl unload-module module-combine-sink
Run Code Online (Sandbox Code Playgroud)

  • 这样就完成了工作。不过,随着我对音频开发的深入了解,我真的希望能够选择特定的设备和/或端口。 (3认同)
  • 在 ubuntu 16.04 中对我不起作用。我在声音首选项窗口中没有看到像“同时输出”这样的选项 (3认同)
  • @NathanJ.Brauer:您可能对[这个答案]感兴趣(http://askubuntu.com/questions/14077/how-can-i-change-the-default-audio-device-from-command-line/14083 #14083)。要更改端口,另请参阅我链接到的pulseaudio wiki。 (2认同)
  • 这个在 18.04 中对我不起作用。如果您知道我如何使用 ALSA 做到这一点,请在此处帮助我:https://askubuntu.com/q/1042485/586277 (2认同)
  • @Jollywatt - 每个音频设备的单独音量控制可以通过***PulseAudio Preferences***(`pavucontrol`)在“播放”和“输出”选项卡下实现。 (2认同)

小智 24

Ubuntu

我刚刚确认这个解决方案(从 4 年前开始)仍然适用于 Ubuntu 14.04 LTS。

安装

打开终端并sudo apt-get install paprefs完全按照上图键入转到选项卡并选择该选项。

初始运行

然后; 留在终端中,键入pulseaudio -k以杀死并重新启动pulseaudio。

然后转到您的声音设置,您将看到输出到多个声音设备的选项。

对编写 paprefs 的人的支持,这是一个很棒的小软件,我实际上希望看到包含在 Ubuntu 中而无需额外安装。

苹果 Mac OS X

类似的解决方案可通过附带的软件获得,最棒的pulseaudio是两个输出的声音似乎完全同步,因此它也必须针对滞后进行调整,这就是它如此令人印象深刻的原因;否则我们会听到一个输出和另一个输出的稍微延迟的版本。

  • 这也适用于 Ubuntu 16.04.1 LTS (2认同)

小智 12

在 Kubuntu 18.04 中,paprefs不需要Plasma 5.12 ,因为类似的设置已经存在:

在此处输入图片说明

重新启动后应该会出现一个新的输出选项,称为“同步输出”。

在此处输入图片说明

或在pavucontrol

在此处输入图片说明


在 Plasma 5.13.5 的 18.10 中,“同时输出”选项已被删除,因此paprefs需要。


Léo*_* 준영 9

尽管我重新启动了系统,但我无法在 Debian 8.7 中立即获得 Takkat 的建议。我假设您已经完成了 Takkat 在安装paprefs. Takkat 答案的扩展基于 Arch Linux wiki 工作,其中保持模拟输入和脉冲调用“双工”

# /etc/pulse/default.pa
# http://unix.stackexchange.com/a/180374/16920
load-module module-alsa-sink device=hdmi:0
load-module module-combine-sink sink_name=combined
set-default-sink combined
Run Code Online (Sandbox Code Playgroud)

然后重启pulseaudio:

pulseaudio -k
Run Code Online (Sandbox Code Playgroud)


Pau*_*ulo 7

为了补充来自 Takkat 的出色回答,我发现新设备的默认名称过长并且使“声音设置”对话框失真。为了缩短该名称,我必须另外执行以下命令:

gconftool --set --type string /system/pulseaudio/modules/combine/args0 sink_properties=device.description=Combined
Run Code Online (Sandbox Code Playgroud)

组合设备的声音设置

  • 我该如何撤消这个?! (4认同)

ora*_*als 7

因为LeonidMew问的是 18.04(我正在使用18.04.2),所以这是我的版本。

GUIpaprefs试图将一个 HDMI 与一个模拟输出结合起来,而不是两个 hdmi。所以我/etc/pulse/default.pa按照描述编辑了文件Léo Léopold Hertz

$ gedit /etc/pulse/default.pa  # make changes as in method a or b below
$ pulseaudio -k # then restart pulseaudio
Run Code Online (Sandbox Code Playgroud)

以下两种方法都可以独立工作,因此请选择一种(确保将这些行添加到文件顶部,我将其放在后面.fail!否则不起作用)。

方法一

load-module module-alsa-sink device=hw:0,0
load-module module-combine-sink sink_name=combined
Run Code Online (Sandbox Code Playgroud)

方法B

load-module module-alsa-sink device=hw:1,3 sink_name=hdmi
load-module module-alsa-sink device=hw:1,7 sink_name=hdmi2
load-module module-combine-sink sink_name=combined slaves=hdmi,hdmi2
set-default-sink hdmi-combined
Run Code Online (Sandbox Code Playgroud)

参考

方法一

供参考,hw:0,0来自aplay -l

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC892 Digital [ALC892 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Run Code Online (Sandbox Code Playgroud)

方法B

1:71:3来自

$ pacmd list-sinks | grep -e 'name:' -e 'alsa.device ' -e 'alsa.subdevice '
    name: <alsa_output.pci-0000_00_1b.0.iec958-stereo>
        alsa.subdevice = "0"
        alsa.device = "1"
    name: <alsa_output.pci-0000_01_00.1.hdmi-stereo-extra1>
        alsa.subdevice = "0"
        alsa.device = "7"
Run Code Online (Sandbox Code Playgroud)

在 GNOME“声音设置”中,我将第二台显示器的另一个 HDMI 设置为输出,然后重新运行命令

$ pacmd list-sinks | grep -e 'name:' -e 'alsa.device ' -e 'alsa.subdevice '
    name: <alsa_output.pci-0000_00_1b.0.iec958-stereo>
        alsa.subdevice = "0"
        alsa.device = "1"
    name: <alsa_output.pci-0000_01_00.1.hdmi-stereo>
        alsa.subdevice = "0"
        alsa.device = "3"
Run Code Online (Sandbox Code Playgroud)

为了验证这些数字是否正确,我跑了

$ aplay -D plughw:1,3 /usr/share/sounds/alsa/Front_Right.wav
$ aplay -D plughw:1,7 /usr/share/sounds/alsa/Front_Right.wav
Run Code Online (Sandbox Code Playgroud)

在他们各自的显示器上响起。