Можно ли перенаправить ввод с звуковой карты Linux в 2 разных приложения?

1023
David White

У меня есть система Ubuntu 16.04.3 LTS с

  • звуковая карта ASUS Xonar DGX и
  • универсальная звуковая карта USB.

В нашей церкви мы хотим иметь возможность транслировать службу, а также записывать ее в виде файла WAV. Для этого у меня есть 3,5 мм выходной аудиокабель от звуковой платы, подключенный к сплиттеру, так что есть два кабеля для подключения к разъему «Line In» на каждой звуковой карте.

Затем я использую «arecord» для записи звука на одну карту и «darkice» для создания потока MP3 на другой.

В идеале я хотел бы иметь возможность иметь одну звуковую карту для одновременной записи и потоковой передачи. Это возможно? Или я застрял, используя две звуковые карты с двумя приложениями?

2
Чтобы разделить ввод по каналу, используйте команду tee. Например: «echo hi | tee output.txt >> output2.txt`» или «echo hi | tee output.txt | tee output2.txt`» или «echo hi | tee output.txt output2.txt`» TOOGAM 6 лет назад 0

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

1
dirkt

Да, это легко возможно. Вы действительно используете только ALSA или Pulseaudio (по умолчанию практически во всех дистрибутивах в течение многих лет)?

С Pulseaudio это должно работать из коробки.

С ALSA убедитесь, что вы используете plughwимя устройства (которое внутренне добавляет dsnoopвставку) вместо имени hwустройства. Dsnoop плагин будет разделить входной поток на несколько потоков для различных приложений.

редактировать

Как я уже сказал, вместо -D hw:0т. Д. (Измените для своего аппаратного адреса), просто используйте -D plughw:0для arecordи аналогично для имени устройства в darkice.

Условием является то, что никакая другая программа не использует hw:0напрямую. Все они должны использовать plughw:0.

Вам не нужно знать подробности о том dsnoop, ALSA делает это автоматически для вас. (Но вы можете прочитать подробности на странице плагина, на которую я ссылался).

Вам не нужно настраивать свои собственные ~/.asoundrc, вам не нужно изменять какие-либо файлы конфигурации.

Нет, я просто использую старую ALSA, а не PulseAudio. Это сервер, поэтому аудиовыход не требуется, и фактически для ALSA почти нет пользовательских настроек - я просто использую устройства с «arecord» и «darkice», поскольку они автоматически загружаются modprobe. Можете ли вы дать мне несколько подробностей о том, как использовать plughw / dsnoop? Я вижу некоторые детали конфигурации в `/ etc / modprobe.d / alsa-base.conf`, но я не уверен, как применить то, что вы упомянули в этом файле. David White 6 лет назад 0
возможно у меня еще что-то не совсем верно? Я использую `arecord -D plughw: 0 -f S16_LE -c2 -r 44100 -vv foo.wav`, а также использую конфигурацию darkice, которая задает` device = plughw: 0`, но, похоже, все еще блокируется. Одна программа может запуститься, но другая умрет с `DarkIce: DarkIce.cpp: 1273: не удается открыть соединитель [0]` или `arecord: main: 722: ошибка открытия аудио: устройство или ресурс занят` (в зависимости от того, какой один я начал вторым). Что мне не хватает? Еще раз спасибо. David White 6 лет назад 1
Вы уверены, что `plughw` добавляет` dsnoop`? Для меня работало `arecord -D dsnoop: 0,0`, которое позволяло мне запускать несколько слушателей одновременно без изменения конфигурации alsa. Linus Unnebäck 6 лет назад 0
0
David White

Я принял ответ Диркта, который дал мне большую часть пути туда. Оказывается, мне нужно было создать dsnoopинтерфейс:

/etc/asound.conf

pcm.custom_snoop_card { type dsnoop ipc_key 420042 ipc_key_add_uid 1 slave { pcm "hw:0,0" # the actual device format S16_LE channels 2 rate 44100 } } 

Теперь я могу указать device = custom_snoop_cardв своем darkiceконфиге и одновременно сделать запись в WAV сarecord -D custom_snoop_card -f S16_LE -c2 -r 44100 -vv myfile.wav