linux arecord: захватывать вывод звуковой карты, а не вход микрофона

20

Я пытаюсь захватить вывод звуковой карты и закодировать его в формате Vorbis ogg, используя следующую команду:

arecord -f cd -t raw | oggenc - -r -o file.ogg

Однако записывается микрофонный вход компьютера, а не выход звуковой карты.

Вывод команды arecord -lявляется

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

Вывод команды arecord -Lсодержится в этой записи пастбина .

Страница arecordman указывает, что устройство ввода может быть выбрано с помощью -Dфлага, но не дает синтаксических примеров.

Я хотел бы знать, как изменить вход arecordс микрофона на звуковую карту. Меня не интересуют альтернативы на основе графического интерфейса, такие как Audacity. Благодарю.

Редактировать: я использую Debian 7.0 (стабильный) с arecordверсией 1.0.25, vorbis-toolsверсией 1.4.0 и драйвером ALSA версии 1.0.24.

user001
источник
Есть ли в вашем оборудовании какой-либо микшерный пульт для направления вывода обратно на устройство захвата?
кл.
@CL. Единственный предустановленный микшер, о котором я знаю, это alsamixer. Если я выберу карту обратной связи alsamixer(клавиша F6 для выбора звуковой карты), я получу сообщение This sound device does not have any controls. Если я выйду из микшера и вернусь, я обнаружу, что звуковая карта восстанавливается из петли на карту по умолчанию. Попытка приостановить ( ctrl-z) и background ( bg) alsamixerпроцесса после выбора loopbackне позволяет успешно записать звук с помощью arecordкоманды.
user001
Выбор карты в alsamixerне влияет на остальную часть системы; это только изменяет, какие элементы управления показаны. Каковы элементы управления выбором записи устройства Conexant?
кл.
@CL. Для моего устройства Conexant у меня есть один элемент управления воспроизведением ( Master) и один элемент управления захватом ( Capture) alsamixer. Захват можно включать и выключать с помощью пробела внутри, alsamixerи он включен по умолчанию. Пожалуйста, дайте мне знать, если это не то, что вы хотели. Благодарю.
user001

Ответы:

6

Я бы предложил использовать драйвер петли ALSA. Чтобы загрузить это:

sudo modprobe snd-aloop

Это должно добавить новое устройство захвата к выходу из arecord -L.

Если у вас есть только одна физическая звуковая карта на вашем компьютере, вы можете сделать петлевую звуковую карту по умолчанию для всех приложений, создав файл .asoundrcв вашей домашней папке со следующим содержимым:

pcm.!default {
    type hw
    card 1
    device 0
}

Пока этот файл находится на месте, любой звук, выводимый из всех приложений, должен поступать на адаптер обратной петли, а не на ваши фактические динамики. Просто укажите правильное устройство в вашей команде arecord и, как только вы закончите, удалите .asoundrcфайл, чтобы вернуться к нормальной жизни.

beveradb
источник
Спасибо за ваши предложения. Несмотря на создание .asoundrcв моем домашнем каталоге и перезапуск сеанса эмулятора терминала, звук все еще направляется на динамики. Команда arecord -f cd -t raw | oggenc - -r -o file.oggничего не записывает. Issuing arecord -lпредоставляет тот же список, что и раньше, но с двумя дополнительными строками для card 1: Loopback( devices 0, 1), каждая из которых содержит 8 подустройств ( #0-#7). Кроме того, arecord -Lдобавлены следующие три строки: sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device. Продолжение в следующем комментарии из-за ограничения по количеству символов.
user001
Попытка записать arecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.oggпустой аудиофайл на время выполнения команды (он не извлекает аудиоданные из микрофона, как раньше). К сожалению, sysdefaultвырожден, поскольку он определен как CARD=PCH(первая строка arecord -L) и CARD=Loopback(последняя строка arecord -L). Спасибо за любые последующие предложения, которые вы можете предоставить.
user001
Шлейф позволяет записывать только то, что воспроизводится на его устройство воспроизведения, а не на выход звуковой карты.
кл.
Извините, мой ответ не сработал - он работает на моей установке. Я бы посоветовал взглянуть на это объяснение файла asoundrc: alsa-project.org/main/index.php/Asoundrc. Я совершенно уверен, что если вы попробуете несколько вещей и поиграете с разными устройствами, вам нужно больше заставить его работать. Немного клудж, но у вас есть физический кабель 3,5 мм -> 3,5 мм? Если это так, вы всегда можете просто подключить выходное гнездо наушников к гнезду микрофона / линейного входа.
beveradb
Если вы не можете заставить его работать с asoundrc, эти ссылки могут предоставить дополнительную информацию, чтобы помочь понять это: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 Если вы все еще не можете заставить его работать, вы можете переключиться на использование PulseAudio вместо ALSA. В этом ответе объясняется, как это сделать с помощью PulseAudio: askubuntu.com/questions/171287/…
beveradb
6

Спустя годы борьба продолжается ... как указать записывающее устройство, о чудо

➜  ~ arecord -l                                                              
**** List of CAPTURE Hardware Devices ****                                   
card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]       
  Subdevices: 1/1                                                            
  Subdevice #0: subdevice #0                                                 
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]       
  Subdevices: 1/1                                                            
  Subdevice #0: subdevice #0     

➜  ~ arecord -f S16_LE -r 44100 --device="hw:1,0" plik.wav                   
Recording WAVE 'plik.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono 
^C
Aborted by signal Interrupt...  

Таким образом, формат строки устройства hw:<card>,<device>

формат идентификатора устройства

Мацей Янковский
источник
6

У меня была такая же проблема, и я нашел другое решение здесь . Основная идея заключается в использовании pacat. Для меня это работает так:

1) найти монитор устройства:

$ pacmd list | grep "\.monitor"
name: <alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor>
name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
        alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor/#0: Monitor of HDA NVidia Digital Stereo (HDMI)
        alsa_output.pci-0000_00_1b.0.analog-stereo.monitor/#2: Monitor of Built-in Audio Analog Stereo

2) Захват аудио в файл:

$ pacat --record -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor > dump.raw

3) Конвертировать файл в wav:

sox -t raw -r 44100 -e signed-integer -L -b 16 -c 2 dump.raw output.wav

Это оно!

hochl
источник
3
Обратите внимание, что вы можете использовать parecвместо pacat --record. Вы также можете избежать использования soxи использования parec -d <monitor> --file-format=wav output.wav. Вы можете перечислить доступные форматы файлов с parec --list-file-formats.
Пек
3

Ваше оборудование не поддерживает захват его выходных данных; как только данные поступают в реальное устройство воспроизведения, они исчезают.

Вам необходимо использовать программное обеспечение, которое дублирует аудиоданные перед их записью на аппаратное обеспечение.

Я бы предложил использовать PulseAudio; там вы можете просто выбрать один из его выходов в качестве источника захвата: Мониторинг выхода pavucontrol

CL.
источник
Я установил pavucontrolи попытался записи с помощью gnome-sound-recorder. Когда я открываю gnome-sound-recorderи начинаю recoding ( Ctrl-R), поток появляется в окне PulseAudio Volume Control. Однако в действительности поток не записывает никаких данных (конечная длина равна 0:00). Кроме того, вы знакомы с тем, как выполнять запись через командную строку вместо графического интерфейса? Благодарю .
user001
1
  1. Перейдите в PulseAudio Регулятор громкости -> вкладка «Устройства ввода». Внизу выберите «ВСЕ устройства ввода». Проверьте, не отключен ли «Монитор внутреннего аналогового стереозвука» и не увеличивается ли громкость при воспроизведении звука !!

  2. Используйте Audio Recorder для записи Audio Source = Internal Audio Analog Stereo (Аудио вход). Смотрите скриншот ниже.

введите описание изображения здесь

Zid
источник