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

ag_*_*ag_ 11 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"
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?有关alsa插件的任何建议(特别是文件插件)?

ako*_*nov 7

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

pcm.virtmic {
    type file
    format "raw"
    slave.pcm "default"
    file '/dev/null'
    infile '/dev/urandom'
}
Run Code Online (Sandbox Code Playgroud)

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

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

希望有所帮助.

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