兼顾专业与娱乐的Linux音频解决方案

同时播放专业需求与其他声音,一心多用的最高境界。

Posted by Tee on April 16,2017

感谢 一念執著 的指正,2020-03-18 更新。

不像Windows或OSX,Linux上可以更自由选择音频组件进行组合。 以下讨论的方案,是最流行的Alsa+Pulseaudio组合,Ubuntu等发行版也在使用。

先介绍一下最常见的Linux音频的处理方式,看下图 

声卡 → 内核 → Alsa(低延迟) → Pulseaudio(高延迟) 或 JACK(低延迟) → 软件App。

图片来自linux-audio.com

我使用的连接方式

JACK同时连接专业App与普通App

这是我正在使用的连接方式,Alsa输出到PulseAudio,Pulseaudio输出到JACK插件;Alsa单独输出给JACK,最后输出给专业App与Pulseaudio。

  1. 内核和Alsa负责驱动声卡(驱动)
  2. Alsa连接PulseAudio
  3. PulseAudio直接连接普通的桌面App、蓝牙和系统声音
  4. PulseAudio连接到JACK,再由JACK连接专业的音频App

举个例子:

  • 打开浏览器,在爱奇艺看视频,调节播放的音量,使用的是Pulseaudio。
  • 打开Ardour(一款Daw),使用的是Pulseaudio+JACK插件

Alsa to Pulseaudio to JACK

看起来是不是有点像在Windows和其他系统?Windows系统声音控制就像Pulseaudio,Asio就像JACK。

其他常见的音频组件连接方式

PulseaudioJACK连接App

  1. 内核和Alsa负责驱动声卡(驱动)
  2. (独占)Pulseaudio负责连接普通的桌面App和蓝牙(网易云音乐、QQ、浏览器)
  3. (独占)JACK负责连接专业的音频App(录音软件)

举个例子:

  • 打开浏览器,在优酷看视频,调节播放的音量,使用的是Pulseaudio。
  • 打开Ardour(一款Daw),使用的是JACK。

注意这种方式PulseAudio和JACK会各自独占ALSA,所以不能同时运行。

Alsa to Pulseaudio and Jack

因为Pulseaudio与JACK同时连接Alsa的话,需要先停用另外一方。所以如果想在使用Daw的时候,播放网页的声音,就必须停用连接着Daw的JACK,让JACK不再占用Alsa。

Alsa直接连接App

我们在Linux是自由的,不仅限以上的音频组件连接方式。网页播放视频的声音、即使是Daw的声音也可以同时由Alsa控制。

Alsa可以直接控制所有的声音播放,可以不需要Pulseaudio或JACK。

举个例子:

  • 打开浏览器,在Bilibili看视频,使用Alsa控制播放音量。
  • 打开Ardour(一款Daw),使用Alsa。

Alsa to All

因为Pulseaudio在各方面都有着不错的现成接口,如使用蓝牙,JACK在专业级的软件也有更丰富的支持。所以要求比较复杂的朋友,还是使用Pulseaudio和JACK比较方便。

最方便的部署方式

使用Cadence,在图形界面按自己的喜好选择音频组件的连接方式。

  • Arch
    yaourt cadence
    
  • Ubuntu

    请参考官网

Cadence官方地址:http://kxstudio.linuxaudio.org/Applications:Cadence

注意事项

  • 我使用的连接方式,Alsa → JACK → Daw或Pulseaudio,JACK必须为jack2-dbus版本,才能达到与其他应用程序通信的效果。
  • Pulseaudio,JACK,Alsa之间的连接,除了程序本身需要安装,还需要安装依赖的插件。
    • Arch
      sudo pacman -S pulseaudio-alsa pulseaudio-jack alsa-plugins
      
    • Ubuntu
      sudo apt-get install pulseaudio-module-jack libasound2-plugins
      

必须知道的知识

  • 控制Alsa调音台音量,需要先安装alsa-utils,终端输入alsamixer运行。
  • 控制Pulseaudio图形界面,在Gnome、Kde等流行的桌面默认都有调音台可以控制。 我使用Gnome桌面,还另外安装了pavucontrol。
  • 关于JACK图形界面控制,除了Cadence,还有QjackCtl。

参考资料

https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture

https://wiki.archlinux.org/index.php/PulseAudiohttps://wiki.archlinux.org/index.php/JACK_Audio_Connection_Kit

http://jackaudio.org/faq/

https://blog.csdn.net/qq_25675517/article/details/104944467


本作品采用知识共享署名 4.0 国际许可协议进行许可。