Я хочу приложение флэш-памяти, которое хочет записать мой микрофон (что-то как 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
Затем я подтвердил, что звук направляется к устройству закольцовывания:
К сожалению, флеш-плагин не видит звука вообще - как будто я записывал, обнуляет.
Флеш-плагин видит все источники звука ALSA-направления:
Простой ответ в конце. Но помочь понять решение, я попытаюсь быть максимально понятным. Мое предположение: "Устройство закольцовывания" является картой № 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
).