Имитация микрофона (виртуальный микрофон) - PullRequest
11 голосов
/ 03 января 2011

У меня проблема с тем, что мне нужно "смоделировать" выход микрофона.

Данные будут поступать по сети, декодироваться в PCM и, в основном, должны записываться в микрофон, который затем другие программы смогут читать / записывать / как угодно.

Я читал об Алсе, но информации довольно мало. Файловый плагин выглядит многообещающе - я думал о том, чтобы именованный канал был «инфильным», и я мог бы затем доставлять данные из моего приложения. Однако я не могу заставить его работать (vlc / audacity просто segfault).

pcm.testing {
  type file
  slave {
    pcm {
      type hw
      card 0
      device 0
    }
  }
  infile "/dev/urandom"
  format "raw"
}

Есть ли лучшие способы сделать это? Любые предложения по плагинам alsa (в частности, файловый плагин)?

1 Ответ

7 голосов
/ 28 сентября 2012

Ваш звук будет передаваться по сети, и что будет кэшировать его, пока что-то не захочет прочитать?Или данные будут отброшены?В целом, что-то похожее на приведенное ниже (только что протестированное) должно работать как виртуальный микрофон, но я думаю, что он всегда будет считывать файл с начала, когда устройство открывается, и вам нужно проверить, как он обрабатывает конец файла.Возможно, то, что вы попробуете, используя каналы, но затем кеширование / удаление входящих данных должно быть обработано чтением приложения из сети.

pcm.virtmic {
    type file
    format "raw"
    slave.pcm "default"
    file '/dev/null'
    infile '/dev/urandom'
}

См. документы alsa для получения дополнительных параметров.

Опять же, не уверен, что этот инструмент - то, что вам действительно нужно для этой задачи.Было бы очень удобно, если бы вы могли запустить команду с опцией «infile», как вы могли бы с «file», но, к сожалению, вы не можете ...

Надеюсь, это поможет.

ОБНОВЛЕНИЕ: slave.pcm должен быть не нулевым, а реальным устройством.Кажется, это используется для синхронизации или я не знаю, но использование нуля приводит к тому, что процесс записи блокируется навсегда.Это устройство может заставить вас с заданной частотой дискретизации, но будьте осторожны.Использование «default» является нормальным значением по умолчанию.Infile должен предоставить необработанные звуковые данные с правильным / подходящим форматом и скоростью.Кстати, вы можете посмотреть на alsa server и jackd и другие звуковые системы и библиотеки для альтернативных решений для вашей задачи

...