Вопрос или проблема
У меня возникли проблемы с аудио.
У меня есть старый компьютер (назовем его Алиса) с Xubuntu, который я могу использовать для непрерывного прослушивания звуков с внешнего микрофона, подключенного к разъему линейного входа. Я могу получить доступ к компьютеру с моего ПК (назовем его Боб – под управлением Ubuntu) через ssh (и физически тоже … когда я обновлю раскладку клавиатуры для входа в систему, которая недавно изменилась, не знаю почему, и в данный момент мешает мне это сделать). Я пытался удаленно записывать микрофон безуспешно с помощью arecord, pulseaudio, но я новичок в ALSA и PA. В PA микрофон не отображается в pacmd list-sources!?.
Есть ли (простой?) способ, которым я могу непрерывно (но в то же время, у меня мало места на диске, максимум 50 ГБ свободного) записывать на Алисе (и, возможно, читать записи с Боба)?
Я бы рекомендовал использовать VLC на “Алисе” для потоковой передачи аудио через RTP на локальный адрес, а затем “Бобу” слушать на этом адресе и порту и записывать аудио. Сложная часть будет заключаться в определении MRL (локатор медиа-ресурсов) для вашего аудиоустройства ввода.
Команда для потоковой передачи может выглядеть так:
cvlc alsa://<input_device> --sout-keep --no-sout-video --sout="#transcode{acodec=mpga,ab=<bit_rate>,aenc=ffmpeg,channels=<n_channels>,samplerate=<sample_freq>,threads=2}:rtp{mux=ts,dst=<stream_address>,port=<stream_port>,sdp=sap,proto=udp}" &
Где:
input_device
– это аппаратный адрес ALSA для вашего микрофона с разъемом; вы можете найти его, выполнивcat /proc/asound/cards
; если микрофон привязан к звуковой карте 1, тоinput_device
должен выглядеть какhw:1,0
bit_rate
– это необязательно, но обычно должно быть 64*n_channels
(т.е. 64 для моно, 128 для стерео или даже 264 для превосходного качества звука)n_channels
– это количество поддерживаемых вашим микрофоном аудиоканалов (1 для моно, 2 для стерео)sample_freq
также зависит от вашего микрофона; это должно быть значение типа 44100 или 48000, но может быть и меньше (единицы измерения – в Гц)stream_address
должен быть некоторым произвольным мультикастовым IP-адресом по вашему выбору, например, 239.255.12.42stream_port
также является произвольным портом по вашему выбору, например, 1234
Затем, на “Бобе”, чтобы получать поток живого аудио (и воспроизводить его на устройстве аудиовывода по умолчанию), выполните эту команду:
vlc -vv rtp://@<stream_address>:<stream_port>
Обратите внимание, что cvlc
просто запускает VLC без GUI, синоним vlc -I dummy
.
Затем вы можете написать простой скрипт с циклом, который генерирует имена выходных звуковых файлов (out_file_name
), запускает следующую команду VLC для прослушивания и записи аудио в этот выходной файл на некоторое время, а затем завершает этот процесс VLC (в этом случае, сохраняя аудио в формате WAV):
cvlc --no-sout-video --sout-audio --ttl=1 --sout-keep --sout "#transcode{acodec=mpga,ab=<bit_rate>,aenc=ffmpeg,channels=<n_channels>,samplerate=<sample_freq>,threads=2}:std{access=file,mux=wav,dst=<out_file_name>}" rtp://@<stream_address>:<stream_port> vlc://quit &
После каждого запуска вышеуказанной команды в вашем цикле просто подождите столько времени, сколько вы хотите, чтобы длилась запись, затем завершите этот фоновый процесс прослушивания с помощью kill -9 $!
или pkill vlc
.
Ответ или решение
Конечно, давайте разберем, как решить вашу задачу по записи и прослушиванию аудио с использованием сети Ethernet на машинах с установленными Xubuntu и Ubuntu.
Шаги для настройки потоковой передачи аудио с использованием VLC
Подготовка "Alice"
-
Определение устройства: Сначала нужно определить, какое именно устройство используется для записи через микрофон. Для этого используем команду:
cat /proc/asound/cards
Если микрофон подключен к звуковой карте под номером 1, адрес устройства будет вида
hw:1,0
. -
Установка VLC: Убедитесь, что VLC установлен на обеих машинах. Если нет, установите его с помощью:
sudo apt update sudo apt install vlc
-
Запуск потоковой передачи на "Alice": Запустите VLC в режиме командной строки для потоковой передачи аудио:
cvlc alsa://hw:1,0 --sout-keep --no-sout-video --sout="#transcode{acodec=mpga,ab=128,aenc=ffmpeg,channels=2,samplerate=44100,threads=2}:rtp{mux=ts,dst=239.255.12.42,port=1234,sdp=sap,proto=udp}" &
Здесь
239.255.12.42
— это IP адрес, а1234
— порт, на который будет транслироваться аудио.
Подключение "Bob"
-
Получение и запись аудио: Запустите VLC на "Bob" для прослушивания и записи передаваемого аудио:
vlc -vv rtp://@239.255.12.42:1234
Этот команд запускает VLC и выводит аудио на стандартное устройство воспроизведения.
-
Автоматизация записи: Создайте скрипт, который будет записывать трансляцию в файлы. Пример команды для записи в формате WAV:
cvlc --no-sout-video --sout-audio --ttl=1 --sout-keep --sout "#transcode{acodec=mpga,ab=128,aenc=ffmpeg,channels=2,samplerate=44100,threads=2}:std{access=file,mux=wav,dst=out_file_name.wav}" rtp://@239.255.12.42:1234 vlc://quit &
Используя данный подход, можно записывать аудио в цикле на определенный промежуток времени, а затем завершать процесс с помощью
kill -9 $!
илиpkill vlc
.
Заключение
Приведенное решение основано на использовании VLC для захвата и потоковой передачи аудио через Ethernet. Это подход позволяет обойти ограничение на физический доступ и использование ssh для работы с ограниченными ресурсами. Убедитесь, что у вас достаточно места на диске, так как каждое аудиофайл может занимать значительное пространство.
Использование VLC позволяет с минимальными усилиями и без глубокого изучения настроек ALSA и Pulseaudio настроить потоковую передачу. Это решение также пригодно для масштабирования, если в будущем потребуется добавить другие устройства.