模拟麦克风(虚拟麦克风)

时间:2011-01-02 23:00:00

标签: linux audio virtual microphone alsa

我遇到了需要“模拟”麦克风输出的问题。

数据将通过网络传输,解码为PCM,基本上需要写入麦克风 - 然后其他程序可以读取/记录/无论如何。

我一直在阅读alsa,但信息非常稀少。文件插件看起来很有前途 - 我正在考虑将命名管道作为“infile”,然后我可以从我的应用程序传递数据。但我不能让它工作(vlc / audacity只是段错误)。

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

有没有更好的方法呢?有关alsa插件的任何建议(特别是文件插件)?

1 个答案:

答案 0 :(得分:7)

你的声音将通过网络传播,什么会缓存它,直到想要读取的东西?或者数据会被丢弃? 一般来说,类似下面的内容(仅经过测试)应该可以作为虚拟麦克风使用,但我认为它始终会在设备打开时从头开始读取文件,您需要检查它是如何处理文件末尾的。也许您会尝试使用管道,但随后缓存/丢弃传入的数据需要由从网络读取的应用程序处理。

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

有关更多选项,请参阅alsa docs

同样,不确定此工具是否是您真正需要的任务。如果你可以使用'infile'选项启动一个命令,就像你可以使用'file'那样真的很漂亮,但不幸的是你不能......

希望有所帮助。

更新:slave.pcm不能是“null”,而是一些真正的设备。它似乎用于计时或我不知道但使用null导致记录器进程永远阻止。此设备可能会以给定的采样率强制您,但请小心。使用“默认”是一个理智的默认值。 infile需要提供具有正确/匹配格式和速率的原始声音数据。顺便说一下,您可以查看alsa服务器和jackd以及其他声音系统和库,以获得适合您任务的替代解决方案