在 Linux 环境下录音#

日期:

2024-05-03

通过运行 GNU/Linux 的个人电脑录制乐器和人声。 环境:Arch Linux, kernel 6.8.8, pipewire 1.0.5,所以才需要写这么篇文章… 目前的拓扑是这样的:

吉他/麦克风 → 6.5mm TS → 效果器 → 6.5mm TS → 声卡 → USB → 电脑 → DAW

设备#

独立声卡#

之前一直不理解为什么录音需要声卡?主板上不是有声卡么?不是麦克风连电脑不就好了吗?

  1. 需要有音频接口:即使完全不考虑音质,我们也需要一个让电脑能够接收音频信号的接口, 我的电脑有 3.5mm TRRS 的输入接口(能插有通话功能的耳机)。 吉他及其周边输出用的是 6.5mm 的 TS 口 [1],相对专业的麦克风用的则是卡农口, 规格不一、用途不同。而独立声卡这些都会提供,再通过 USB 将数据传给电脑。

  2. 需要及格的音频处理能力:(据说)板载声卡 采样率低,抗干扰能力弱, 得到的声音质量差。但对比参数:就采样率而言没啥区别,其他有区别但我看不懂:

    arecord --list-device + arecord --dump-hw-params -D hw:<CARD_NUM>#
    --- /home/runner/work/silverrainz.github.io/silverrainz.github.io/p/onboard.txt
    +++ /home/runner/work/silverrainz.github.io/silverrainz.github.io/p/thr5a.txt
    @@ -1,22 +1,21 @@
    -HW Params of device "hw:0":
    +HW Params of device "hw:1":
     --------------------
     ACCESS:  MMAP_INTERLEAVED RW_INTERLEAVED
    -FORMAT:  S16_LE S24_LE
    +FORMAT:  S24_3LE
     SUBFORMAT:  STD MSBITS_MAX
    -SAMPLE_BITS: [16 32]
    -FRAME_BITS: [32 64]
    -CHANNELS: 2
    -RATE: 48000
    -PERIOD_TIME: [500 85334)
    -PERIOD_SIZE: [24 4096]
    -PERIOD_BYTES: [192 16384]
    -PERIODS: [2 16]
    -BUFFER_TIME: [1000 341334)
    -BUFFER_SIZE: [48 16384]
    -BUFFER_BYTES: [192 65536]
    +SAMPLE_BITS: 24
    +FRAME_BITS: 96
    +CHANNELS: 4
    +RATE: 44100
    +PERIOD_TIME: (136 1000000]
    +PERIOD_SIZE: [6 44100]
    +PERIOD_BYTES: [72 529200]
    +PERIODS: [2 1024]
    +BUFFER_TIME: (272 2000000]
    +BUFFER_SIZE: [12 88200]
    +BUFFER_BYTES: [144 1058400]
     TICK_TIME: ALL
     --------------------
     arecord: set_params:1387: Sample format non available
     Available formats:
    -- S16_LE
    -- S24_LE
    +- S24_3LE
    

实际上,我的 🎛️Yamaha THR5a🎛️Nux MG300 都自带了声卡,内核也能正常识别,但 后者录音的时候总是捕捉不到,怀疑和 这里 遇到了同样的问题,折腾不动, 故使用 thr5a 录音。

$ wpctl status


Audio
 ├─ Devices:
 │     …
 │     101. NUX MG-300 AUDIO                    [alsa]
 │     148. THR5A                               [alsa]

 ├─ Sinks:
 │  *  …
 │     122. NUX MG-300 AUDIO Analog Stereo      [vol: 0.40]
 │     166. THR5A Analog Stereo                 [vol: 0.40]

 ├─ Sources:
 │     …
 │  *   97. THR5A Analog Surround 4.0           [vol: 1.00]
 │     127. NUX MG-300 AUDIO Analog Stereo      [vol: 1.00]



录制#

The Unix way: 直接录制#

GUI

对于最简单的录制音频场景,可以考虑用 📦 gnome-sound-recorder

ALSA

需要 📦 alsa-utils:

$ arecord --list-device
**** List of CAPTURE Hardware Devices ****

card 1: THR5A [THR5A], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

设备号是 HW:<CARD>,<DEV>,也就是 hw:1,0,开始录音:

$ arecord -f S24_3LE -r 44100 -D hw:1,0 -c 4 test.wav
Recording WAVE 'test.wav' : Signed 24 bit Little Endian in 3bytes, Rate 44100 Hz, Channels 4
^C
Aborted by signal 中断...

播放:

$ aplay test.wav
Playing WAVE 'test.wav' : Signed 24 bit Little Endian in 3bytes, Rate 44100 Hz, Channels 4
Pipewire

Target ID 从 wpctl status 获取:

$ pw-record --target 121 test.wav
^C

The Pro way: Digital Audio Workstation (DAW)#

实际上,正经一点的录制工作都不会像上面一样用命令行工具或者简陋的 GUI, 而是使用集成化的 DAW 软件,随便找了个视频扫盲一下:

当然在 Linux 上,DAW 软件选择比较有限 [2] [3]

Reaper:

跨三平台(wine on Linux),使用简单,但是收费

Ardour:

老牌开源,一直在更新,看起来不错

LMMS:

新潮漂亮,但看起来完全是给电子音乐用的,不支持录制功能

Presonus Studio One:

商业软件但免费,原生 Wayland 和 Pipewire 支持,但 arch 没包

简单试用了下选择了 Ardour,有 中文教程,对于本文来说,看 录制音频 一节即可。

更多内容参看 Ardour

参考#

评论

如果你有任何意见,请在此评论。 如果你留下了电子邮箱,我可能会通过 回复你。