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

12

我有一个问题,需要“模拟”麦克风输出。

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

我一直在阅读alsa的相关信息,但是信息相当稀少。文件插件似乎很有前途 - 我考虑使用命名管道作为“infile”,然后可以从我的应用程序向其传递数据。然而我无法使它工作(vlc / audacity只会崩溃)。

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

有更好的方法吗?对alsa插件有什么建议(尤其是文件插件)?

1个回答

7
你的声音将通过网络传输,会被缓存直到有读取请求吗?还是数据会被丢弃? 一般来说,像下面这样(只是简单测试过)应该可以作为虚拟麦克风使用,但我认为当设备打开时它总是从文件开头读取,并且你需要检查它如何处理文件结尾。也许你可以尝试使用管道,但是缓存/丢弃传入数据需要由从网络读取的应用程序来处理。
pcm.virtmic {
    type file
    format "raw"
    slave.pcm "default"
    file '/dev/null'
    infile '/dev/urandom'
}

更多选项请参阅alsa文档

再次强调,不确定这个工具是否适合您的任务。如果您可以像使用“file”一样使用“infile”选项启动命令,那将非常方便,但不幸的是您不能这样做...

希望这有所帮助。

更新:slave.pcm不能为“null”,而应该是某个真实设备。似乎它用于定时或其他用途,但使用null会导致录音进程永久阻塞。该设备可能会强制您使用给定的采样率,因此请注意。使用“default”是一个合理的默认值。infile需要提供具有正确/匹配格式和速率的原始声音数据。顺便说一句,您可以查看alsa服务器、jackd和其他声音系统和库以寻找任务的替代解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接