1

Мне нужно отладить мою программу, и мне нужно что-то вроде виртуального микрофона. Я хотел бы устройство "микрофон", где я могу поместить звуковой файл, и этот файл будет вход для потока микрофона. И в приложении я получаю этот поток с этого "микрофона"

Файл -> Микрофон -> Приложение

Является ли это возможным?

что-то вроде команды bash должно быть очень-очень полезным:

aplay --device=mic my_microphone.wav для запуска потока микрофона

2 ответа2

0

В вашем вопросе не хватает нескольких деталей, например, какой язык программирования или какой звуковой сервер вы используете. Тем не менее, я попробую.

Я успешно использовал демон JACK (jackd) для отладки аудиоприложения. Это может быть немного работы, чтобы заставить jackd работать, но оно того стоит. Думайте об этом как о звуковом сервере, с которым аудио приложения и аппаратные средства могут регистрировать порты ввода и вывода звука. Затем вы можете использовать qjackctl для подключения этих портов, либо вручную, используя Connect, либо автоматически, используя Patchbay.

Шаги, чтобы следовать:

  • установить jackd и qjackctl
  • Предположим, что вы используете ALSA, добавьте jack устройства в ваш ~/.asoundrc чтобы вы могли выводить его на сервер jack (см. ниже)
  • запустите qjackctl и изнутри запустите jackd (это может быть время, когда вы столкнетесь с проблемами - в моей довольно сложной настройке звука мне пришлось pulseaudio с дороги)
  • воспроизведите ваш звуковой файл, используя aplay --device=jack my_microphone.wav и попробуйте подключить его к звуковой карте - когда вы что-то слышите, вы почти закончили
  • создать новый порт ввода JACK с помощью JACK API
  • используйте jackd jackd для автоматического подключения вашего нового входного порта к выходному аудиопорту JACK (который может выводиться через aplay , медиаплеер, использующий JACK (qmmp, VLC и другие) или вашу звуковую карту)

Вот соответствующая часть моего ~/.asoundrc

pcm.jack
{
        type plug
        slave.pcm "jack_output"
        hint
        {
                show on
                description "Alsa (JACK plugin)"
        }
}

pcm.jack_output
{
        type jack
        playback_ports
        {
                0 system:playback_1
                1 system:playback_2
        }
        capture_ports
        {
                0 system:capture_1
                1 system:capture_2
        }
        hint
        {
                show off
                description "Alsa (JACK output)"
        }
}
0

Вы также можете включить GStreamer в свое приложение. Смотрите здесь для краткого введения и здесь для учебника. Элемент appsink может быть именно тем, что вы ищете.

Вот несколько примеров командной строки. Существует также обширный API, так что вы можете вызывать все (или часть) этого из своего приложения.

Воспроизведение розового шума на аудиовыходе по умолчанию:

gst-launch-0.10 audiotestsrc wave=6 ! autoaudiosink

Воспроизведите MP3 (или другой поддерживаемый формат) на аудиовыходе по умолчанию:

gst-launch-0.10 filesrc location=my_microphone.mp3 ! decodebin ! \
  audioconvert ! autoaudiosink

GStreamer великолепен, поэтому, пожалуйста, не вините меня, если вы начнете переписывать все свое приложение, используя GStreamer ... :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .