На моем 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 чтобы записать воспроизводимые звуки, но было невозможно захватить системные звуки. Это вообще невозможно или есть другое решение?

1 ответ1

2

Вы не сказали, но предположите, что вы не используете 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, это значительно облегчает эту задачу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .