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

В Raspbian беспроводные соединения обычно управляютсяwpa_supplicant(также графическим интерфейсом ). Просто установить network-managerдля его использования недостаточно, как изложено в этом ответе , который дает вам указания, как заставить network-managerработать на Raspbian.

Если вы не настаиваете на использовании network-manager, попробуйте средство командной строки wpa_cliиз wpa_supplicant.

Вот как вы подключаетесь к сети с wpa_cliв интерактивном режиме (замените wlan0на имя вашего беспроводного интерфейса, AP_NAMEна имя вашей точки доступа, passphraseна парольную фразу точки доступа и 0с номером, напечатанным в stdoutпослеADD_NETWORK):

sudo wpa_cli -i wlan0

> ADD_NETWORK
> SET_NETWORK 0 ssid "AP_NAME"
> SET_NETWORK 0 psk "passphrase"
> ENABLE_NETWORK 0
> quit

Если вы не хотите использовать интерактивный режим, вам просто нужно указать команду после опций. См. несколько примеров здесь:

Если вы хотите отключиться, используйте

sudo wpa_cli -i wlan0 DISCONNECT

Чтобы получить список всех сетей, используйте

sudo wpa_cli -i wlan0 LIST_NETWORKS

Чтобы удалить сохраненную сеть с id=0, используйте

sudo wpa_cli -i wlan0 REMOVE_NETWORK 0

Список команд, которые можно использовать с wpa_cli, можно найти, например. здесь .

0
04.09.2020, 20:22
1 ответ

Я бы рекомендовал использовать 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 без графического интерфейса, что является синонимом 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.

0
28.04.2021, 23:07

Теги

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