08.05.2026
Потребовалось сделать запись более 2-х каналов со звуковой карты. Предполагал использовать линейный вход и микрофонный.
Как оказалось, множество аудиокарт, встроенных в компьютер, имеют всего один ADC и это просто невозможно.
Ряд кодеков это позволяют, например Realtek ALC888 или SigmaTel STAC9227.
Обращу внимание, что реализация материнской платы, BIOS может не позволить многоканальную запись, несмотря на то, что
у вас нормальные чипы и программы записи создают иллюзию, что они что-то пишут.
Шаги к тому, чтобы проверить работоспособность одновременной записи 4-х каналов:
- Команда
arecord -lдолжна выдать более одного устройства для записи:**** List of CAPTURE Hardware Devices ****card 0: Intel [HDA Intel], device 0: STAC9227 Analog [STAC9227 Analog]Subdevices: 1/1Subdevice #0: subdevice #0card 0: Intel [HDA Intel], device 2: STAC9227 Alt Analog [STAC9227 Alt Analog]Subdevices: 2/2Subdevice #0: subdevice #0Subdevice #1: subdevice #1
Исходя из результата команды, у меня есть device 0 - hw:0,0 и device 2 - hw:0,2 для попытки записи с них. - Теперь запускаю
alsamixer -c 0
жму клавишу F4 - оставляю на экране только устройства ввода.
Затем настраиваю Capture и Capture 1. Указываю на них по очереди и жму клавишу Пробел на клавиатуре, чтобы их активировать.
Стрелками вверх/вниз настраиваю усиление.
Затем выбираю входы, которые соответствуют Capture и Capture1. У меня это Line и Rear Mic.
- Подаю сигналы на Line и Rear Mic и пытаюсь записать по отдельности с каждого из входов:
arecord -D hw:0,0 -c 2 -r 4000 -f S16_LE line.wav # запись с Linearecord -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. - Теперь надо поиграться с чувствительностью в alsamixer и убедиться, что результат отображается в записываемых файлах.
Для их просмотра я использую программу Audacity. На разные входы рекомендую подать разные частоты. - Теперь настраиваю ALSA для одновременной записи 4-х каналов. В home-каталоге создаю файл .asoundrc:
pcm.alc888_dual_raw {type multislaves.a.pcm "hw:0,0"slaves.a.channels 2slaves.b.pcm "hw:0,2"slaves.b.channels 2bindings.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 plugslave.pcm "alc888_dual_raw"}ctl.alc888_4ch {type hwcard 0} - Теперь можно писать одновременно 4 канала:
arecord -D alc888_4ch -f S16_LE -c 4 -r 44100 linemic.wav
У программы arecord есть ещё удобные ключи, например --max-file-time. По достижении указанного числа секунд запись
начнётся в следующий файл.