Как записать аудиовыход на Raspbian?

2056
vtni

На моем Raspberry Pi я использую некоторые файлы Python, которые воспроизводят звук (pygame). Я хочу записать эти звуки, пока они играют.

Это выходы перечисленных устройств arecord:

pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 

Я попробовал несколько вариантов arecordзаписи записанных звуков, но не удалось захватить системные звуки. Это вообще невозможно или есть другое решение?

0
Ты управляешь Pulseaudio? Если да, есть более простое решение. Если нет, как вы настраивали петлевые устройства? Вы настраивали файлы Python для использования другого конца устройства обратной связи для воспроизведения? Или, в качестве альтернативы, вы установили это как `default` в вашем` .asoundrc`? dirkt 7 лет назад 0
Я использовал `modprobe snd_bcm2835` перед воспроизведением звуков через Python vtni 7 лет назад 0

1 ответ на вопрос

2
dirkt

Вы не сказали, но предположите, что вы не используете Pulseaudio. Делать

ps axu | grep pulse 

чтобы убедиться, что вы действительно не используете Pulseaudio. Если вы это сделаете, следующее не будет работать.

Вы modprobe snd_bcm2835не создали петлевое устройство, показанное в вопросе. Так что где-то у вас есть modprobe snd-aloop, либо вы сделали это и забыли об этом, либо это какая-то конфигурация.

Для проверки выполните оба действия, aplay -lи arecord -lв обоих случаях на карте 1 должно отображаться два устройства.

Теперь давайте проверим работоспособность петлевого устройства. Найдите большой WAV-файл (скажем, «music.wav»), откройте два терминала и выполните

aplay -vv -D hw:1,0,0 music.wav 

в одном терминале, и после этого

arecord -vv -D hw:1,1,0 -f S16_LE -r 44100 -c 2 /dev/null 

в другом. Параметры должны соответствовать любому формату вашего WAV-файла. Вы должны увидеть измеритель VU для aplayдвижения синхронно с измерителем VU для arecord.

Наконец, скажите вашим программам на Python использовать их в hw:1,0,0качестве устройства вывода звука, однако ваши программы на Python работают и все, что им нужно для этого.

Или создайте ~/.asoundrc(для пользователя Linux) или /etc/asound.conf(для всей системы) с такими записями, как

pcm.!default { type hw card 1 }  ctl.!default { type hw card 1 }  

предполагая, что это snd-aloopвсегда загружается на карту 1, и скрестите палец, который ваши программы Python используют в defaultкачестве вывода по умолчанию.

Затем вы можете выполнить запись с другого конца петлевого устройства, как описано выше.

Примечание: это виртуальная «звуковая карта», вы не услышите ни одного звука, воспроизводимого и записываемого через эту «карту». Если вы хотите слушать и записывать в одно и то же время, я бы посоветовал просто запустить Pulseaudio, это значительно облегчает эту задачу.

Спасибо! Я не понял, как заставить его работать на python, но первый тест прошел успешно :) Возможно ли также «клонировать» аудиовыход? На самом деле я хочу услышать звук в динамиках, и он также должен быть записан. vtni 7 лет назад 0
Я не уверен, как "клонировать" вывод под ALSA на два устройства. Он * может * работать с некоторой магией `asoundrc`, используя те же ключи IPC для плагина, но я слишком ленив, чтобы проверить. Как я уже сказал: установите Pulseaudio, просто сделайте запись с выхода `monitor` вашего приемника. Значительно проще в настройке. dirkt 7 лет назад 1

Похожие вопросы