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міститься в цьому записі пастіна .

На arecordголовній сторінці вказується, що пристрій введення можна вибрати за допомогою -Dпрапора, але не дає синтаксичних прикладів.

Мені хотілося б знати, як змінити вхід arecordз мікрофона на звукову карту. Мене не цікавлять альтернативи на основі GUI, такі як Audacity. Спасибі.

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


Чи у вашому обладнанні є якесь управління змішувачем, щоб направити вихід назад на пристрій захоплення?
ЗР.

@CL. Єдиний попередньо встановлений змішувач, про який я знаю, - це alsamixer. Якщо я виберу картку зворотного зв'язку в межах alsamixer(клавіша F6, щоб вибрати звукову карту), я отримую повідомлення This sound device does not have any controls. Якщо я вийду з мікшера і повернуся, я виявлю, що звукова карта відновлюється з петлі на карту за замовчуванням. Спроба призупинити ( ctrl-z) та фоновий ( 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файл, щоб повернутися до нормального.


Дякуємо за ваші пропозиції. Незважаючи на створення .asoundrcв моєму домашньому каталозі та перезапуск сеансу емулятора терміналу, аудіо все ще спрямовується на динаміки. arecord -f cd -t raw | oggenc - -r -o file.oggКоманда не записує нічого. Видача 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

Це воно!


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

3

Ваша апаратура не підтримує отримання результатів; як тільки дані перейшли у власне відтворювальний пристрій, його вже немає.

Вам потрібно скористатися деяким програмним забезпеченням, яке дублює аудіодані, перш ніж вони будуть записані на апаратне забезпечення.

Я б запропонував використовувати PulseAudio; там ви можете просто вибрати один із його результатів як джерело захоплення: моніторинг виходу павуконтролю


Я встановив pavucontrolі спробував записати за допомогою gnome-sound-recorder. Коли я відкриваю gnome-sound-recorderі починаю перекодувати ( Ctrl-R), потік з’являється у вікні регулювання гучності PulseAudio. Однак потік фактично не записує жодних даних (кінцева довжина - 0:00). Також, чи знайомі ви, як виконати запис через командний рядок замість GUI? Спасибі .
user001

1
  1. Перейдіть на PulseAudio регулювання гучності -> вкладка Пристрої введення. Внизу виберіть "ВСІ пристрої введення". Перевірте, чи "Монітор внутрішнього аудіо аналогового стерео" не вимкнено, а гучність збільшується та зменшується під час відтворення аудіо !!

  2. Використовуйте Audio Recorder для запису джерела звуку = Внутрішній аналоговий стерео аудіо (Audio Input). Дивіться скріншот нижче.

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.