08.05.2026

 

Потребовалось сделать запись более 2-х каналов со звуковой карты. Предполагал использовать линейный вход и микрофонный.
Как оказалось, множество аудиокарт, встроенных в компьютер, имеют всего один ADC и это просто невозможно.
Ряд кодеков это позволяют, например Realtek ALC888 или SigmaTel STAC9227.
Обращу внимание, что реализация материнской платы, BIOS может не позволить многоканальную запись, несмотря на то, что
у вас нормальные чипы и программы записи создают иллюзию, что они что-то пишут. 

Шаги к тому, чтобы проверить работоспособность одновременной записи 4-х каналов:

  1. Команда  arecord -l  должна выдать более одного устройства для записи:

    **** List of CAPTURE Hardware Devices ****
    card 0: Intel [HDA Intel], device 0: STAC9227 Analog [STAC9227 Analog]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 0: Intel [HDA Intel], device 2: STAC9227 Alt Analog [STAC9227 Alt Analog]
      Subdevices: 2/2
      Subdevice #0: subdevice #0
      Subdevice #1: subdevice #1

    Исходя из результата команды, у меня есть device 0 - hw:0,0 и device 2 - hw:0,2 для попытки записи с них.

  2. Теперь запускаю   alsamixer -c 0
    жму клавишу F4 - оставляю на экране только устройства ввода.
    Затем настраиваю Capture  и  Capture 1. Указываю на них по очереди и жму клавишу Пробел на клавиатуре, чтобы их активировать.
    Стрелками вверх/вниз настраиваю усиление.

    Затем выбираю входы, которые соответствуют Capture и Capture1. У меня это Line и Rear Mic.

    alsamixer
  3. Подаю сигналы на Line и Rear Mic и пытаюсь записать по отдельности с каждого из входов:
    arecord -D hw:0,0 -c 2  -r 4000 -f S16_LE line.wav    # запись с Line
    arecord -D hw:0,2 -c 2  -r 4000 -f S16_LE mic.wav    # запись c Rear Mic

    -с 2  - пишу 2 канала.
    -r 4000 означает, что я хочу писать с частотой 4Khz. Мой кодек упрямо пишет 44100Hz.
    -f S16_LE - 16битная оцифровка, Little Endian. (Байт с младшими разрядами идёт первым)

    По умолчанию пишется в формате WAV
    Файл line.wav содержит то, что я пишу с Line, mic.wav - с Rear Mic.

  4. Теперь надо поиграться с чувствительностью в alsamixer и убедиться, что результат отображается в записываемых файлах.
    Для их просмотра я использую программу Audacity. На разные входы рекомендую подать разные частоты.


  5. Теперь настраиваю ALSA для одновременной записи 4-х каналов. В home-каталоге создаю файл .asoundrc:

    pcm.alc888_dual_raw {
        type multi
        slaves.a.pcm "hw:0,0"
        slaves.a.channels 2
        slaves.b.pcm "hw:0,2"
        slaves.b.channels 2
        bindings.0 { slave a; channel 0; }
        bindings.1 { slave a; channel 1; }
        bindings.2 { slave b; channel 0; }
        bindings.3 { slave b; channel 1; }
    }

    pcm.alc888_4ch {
        type plug
        slave.pcm "alc888_dual_raw"
    }

    ctl.alc888_4ch {
        type hw
        card 0
    }

  6. Теперь можно писать одновременно 4 канала:
    arecord -D alc888_4ch -f S16_LE -c 4 -r 44100  linemic.wav

У программы arecord есть ещё удобные ключи, например --max-file-time. По достижении указанного числа секунд запись
начнётся в следующий файл.