Запись микрофона и прослушивание через Ethernet.

Вопрос или проблема

У меня возникли проблемы с аудио.

У меня есть старый компьютер (назовем его Алиса) с 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.42
  • stream_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"

  1. Определение устройства: Сначала нужно определить, какое именно устройство используется для записи через микрофон. Для этого используем команду:

    cat /proc/asound/cards

    Если микрофон подключен к звуковой карте под номером 1, адрес устройства будет вида hw:1,0.

  2. Установка VLC: Убедитесь, что VLC установлен на обеих машинах. Если нет, установите его с помощью:

    sudo apt update
    sudo apt install vlc
  3. Запуск потоковой передачи на "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"

  1. Получение и запись аудио: Запустите VLC на "Bob" для прослушивания и записи передаваемого аудио:

    vlc -vv rtp://@239.255.12.42:1234

    Этот команд запускает VLC и выводит аудио на стандартное устройство воспроизведения.

  2. Автоматизация записи: Создайте скрипт, который будет записывать трансляцию в файлы. Пример команды для записи в формате 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 настроить потоковую передачу. Это решение также пригодно для масштабирования, если в будущем потребуется добавить другие устройства.

Оцените материал
Добавить комментарий

Капча загружается...