感谢 一念執著 的指正,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。
- 内核和Alsa负责驱动声卡(驱动)
- Alsa连接PulseAudio
- PulseAudio直接连接普通的桌面App、蓝牙和系统声音
- PulseAudio连接到JACK,再由JACK连接专业的音频App
举个例子:
- 打开浏览器,在爱奇艺看视频,调节播放的音量,使用的是Pulseaudio。
- 打开Ardour(一款Daw),使用的是Pulseaudio+JACK插件。
看起来是不是有点像在Windows和其他系统?Windows系统声音控制就像Pulseaudio,Asio就像JACK。
其他常见的音频组件连接方式
Pulseaudio或JACK连接App
- 内核和Alsa负责驱动声卡(驱动)
- (独占)Pulseaudio负责连接普通的桌面App和蓝牙(网易云音乐、QQ、浏览器)
- (独占)JACK负责连接专业的音频App(录音软件)
举个例子:
- 打开浏览器,在优酷看视频,调节播放的音量,使用的是Pulseaudio。
- 打开Ardour(一款Daw),使用的是JACK。
注意这种方式PulseAudio和JACK会各自独占ALSA,所以不能同时运行。
因为Pulseaudio与JACK同时连接Alsa的话,需要先停用另外一方。所以如果想在使用Daw的时候,播放网页的声音,就必须停用连接着Daw的JACK,让JACK不再占用Alsa。
Alsa直接连接App
我们在Linux是自由的,不仅限以上的音频组件连接方式。网页播放视频的声音、即使是Daw的声音也可以同时由Alsa控制。
Alsa可以直接控制所有的声音播放,可以不需要Pulseaudio或JACK。
举个例子:
- 打开浏览器,在Bilibili看视频,使用Alsa控制播放音量。
- 打开Ardour(一款Daw),使用Alsa。
因为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
- Arch
必须知道的知识
- 控制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
https://blog.csdn.net/qq_25675517/article/details/104944467
本作品采用知识共享署名 4.0 国际许可协议进行许可。