Как направить импульсное аудиоустройство в alsa обратную петлю (виртуальный микрофон)?

Я хочу приложение флэш-памяти, которое хочет записать мой микрофон (что-то как https://online-voice-recorder.com/) для записи Импульсного Источника аудиосигналов.

Я фигурировал, та флэш-память использует ALSA. Таким образом, я установил циклическое устройство Alsa sudo modprobe snd-aloop, который аккуратно появился оба в pavucontrol и в alplay -l (в конце списка):

adam@adam-g551jm:~ 130 $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0] Subdevices: 0/1 Subdevice #0: subdevice #0 card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: PCH [HDA Intel PCH], device 0: ALC668 Analog [ALC668 Analog] Subdevices: 0/1 Subdevice #0: subdevice #0 card 2: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM] Subdevices: 7/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 2: 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

Затем я подтвердил, что звук направляется к устройству закольцовывания: Screenshot of pavucontrol

К сожалению, флеш-плагин не видит звука вообще - как будто я записывал, обнуляет.

Флеш-плагин видит все источники звука ALSA-направления:

Flash config

  1. Почему нет никакого звука, видимого к флеш-плагину?
  2. Что сделать, для маршрутизации вывода Импульсного Аудио во вход ALSA?
3
задан 21 March 2017 в 15:08

1 ответ

Простой ответ в конце. Но помочь понять решение, я попытаюсь быть максимально понятным. Мое предположение: "Устройство закольцовывания" является картой № 2, устройство № 0 и № 1, таким образом, во всех примерах это сохраняется (например. /dev/snd/pcmC2D0pозначает "карту 2, устройство 0, воспроизведение"). Ваша установка может варьироваться, поэтому изменить соответствующие значения.

Во-первых, я создал/изменил /etc/modprobe.d/alsa-aloop.conf иметь только одну карту только с одним подпотоком (только для простоты):

user@desk:~$ cat /etc/modprobe.d/alsa-aloop.conf 
options snd-aloop index=2 pcm_substreams=1 id=Loopback

После sudo modprobe snd_aloop, aplay -l и arecord -l показать

user@desk:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
.
.
card 2: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 2: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

user@desk:~$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 2: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Теперь, существует одна проблема: Оба устройства петлевой карты являются воспроизведением, а также записывают устройства. Но функция snd_aloop должен направить вход в устройстве 0 для вывода в устройстве 1 и наоборот (см. e.g.https://www.alsa-project.org/main/index.php/Matrix:Module-aloop). Вы видите их в /proc/asoundкаталог:

user@desk:~$ ls /proc/asound/card2
cable#0  cable#1  id  pcm0c  pcm0p  pcm1c  pcm1p

где "pcm0c" является устройством захвата изображения 0, "pcm0p" является устройством воспроизведения 0 и т.д.

Так pavucontrol шоу (и выбирает), два циклических устройства, одно воспроизведение (hw:2,0) и одна запись (hw:2,1):

Вы не можете выбрать устройство воспроизведения в pavucontrol, таким образом, это выбирает устройство 0:

Вы будете видеть это при взгляде на файл устройства воспроизведения:

user@desk:~$ lsof | grep /dev/snd/pcmC2
pulseaudi 3314               user  mem       CHR             116,13                 556 /dev/snd/pcmC2D0p
pulseaudi 3314               user   48u      CHR             116,13      0t0        556 /dev/snd/pcmC2D0p
alsa-sink 3314 3320          user  mem       CHR             116,13                 556 /dev/snd/pcmC2D0p
alsa-sink 3314 3320          user   48u      CHR             116,13      0t0        556 /dev/snd/pcmC2D0p
.
.

Таким образом, это означает, что получение этого аудиопотока должно быть сделано через /dev/snd/pcmC2D1c; если Вы выбираете loopbackкак устройство ввода данных для флэш-памяти, это будет использовать /dev/snd/pcmC2D0cвместо этого (plugin-coозначает, что сменная контейнерная флэш-память работает в):

user@desk:~$ lsof | grep /dev/snd/pcmC2
pulseaudi 3314               user  mem       CHR             116,13                 556 /dev/snd/pcmC2D0p
pulseaudi 3314               user   48u      CHR             116,13      0t0        556 /dev/snd/pcmC2D0p
.
.
plugin-co 5093               user  mem       CHR             116,14                 557 /dev/snd/pcmC2D0c
plugin-co 5093               user   21u      CHR             116,14      0t0        557 /dev/snd/pcmC2D0c
.
.

Можно проверить при явном проигрывании звука /dev/snd/pcmC2D1p, например, с

user@desk:~$ aplay -D hw:2,1 test1.wav
Playing WAVE 'test1.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono

Теперь флеш-плагин записывает звук, и Вы видите различие:

user@desk:~$ lsof | grep pcmC2
.
.
aplay     7256               user  mem       CHR             116,15                  558 /dev/snd/pcmC2D1p
aplay     7256               user    4u      CHR             116,15       0t0        558 /dev/snd/pcmC2D1p
.
.
plugin-co 7237               user  mem       CHR             116,14                  557 /dev/snd/pcmC2D0c
plugin-co 7237               user   21u      CHR             116,14       0t0        557 /dev/snd/pcmC2D0c
.
.

Так, задача теперь: Как иметь выбор pulseaudio устройство № 1 петлевой карты для воспроизведения?

Принимая значения сверху, можно изменить /etc/pulse/default.pa читать

.
.
### Load audio drivers statically
### (it's probably better to not load these drivers manually, but instead
### use module-udev-detect -- see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
.
.
load-module module-alsa-sink device=hw:2,1
.
.

Обязательно определите статически драйвер (драйверы) перед динамическими. Теперь после перезапуска PA (pulseaudio -k), loopback вывод PA переходит к card2, устройство 1 (device=hw:2,1). Проверить:

user@desk:~$ lsof | grep pcmC2
pulseaudi 8584               user  mem       CHR             116,15                  558 /dev/snd/pcmC2D1p
pulseaudi 8584               user   18u      CHR             116,15       0t0        558 /dev/snd/pcmC2D1p
alsa-sink 8584 8585          user  mem       CHR             116,15                  558 /dev/snd/pcmC2D1p
alsa-sink 8584 8585          user   18u      CHR             116,15       0t0        558 /dev/snd/pcmC2D1p
.
.

Таким образом Ваше устройство записи флэш-памяти может записать от вывода pulseaudio.

Комментарий: Если Вы не хотите редактировать /etc/pulse/default.pa, можно загрузить модуль в интерактивном режиме pacmd load-module module-alsa-sink device=hw:2,1. Это даст Вам секунду loopbackустройство в pavucontrol. И если Вы только хотите одно устройство закольцовывания, сначала разгружаете соответствующий модуль:

user@desk:~$ pacmd list-modules
.
.
    index: 7
    name: <module-alsa-card>
    argument: <device_id="2" name="platform-snd_aloop.0" card_name="alsa_card.platform-snd_aloop.0" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes card_properties="module-udev-detect.discovered=1">
    used: 0
    load once: no
    properties:
        module.author = "Lennart Poettering"
        module.description = "ALSA Card"
        module.version = "8.0"

Ищите индекс где device-id=2 (here:7), затем разгрузите модуль (pacmd unload-module 7) и после той загрузки приемник для обратной петли (pacmd load-module module-alsa-sink device=hw:2,1).

5
ответ дан 1 December 2019 в 15:34

Другие вопросы по тегам:

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