12

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

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

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

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

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

4

1 回答 1

7

你的声音会通过网络传来,什么会缓存它,直到有东西想读?还是会丢弃数据?一般来说,像下面这样的东西(只是几乎没有测试过)应该作为一个虚拟麦克风工作,但我认为它总是会在设备打开时从头开始读取文件,你需要检查它如何处理文件结尾。也许您会使用管道尝试它,但是缓存/丢弃传入数据需要由从网络读取的应用程序处理。

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

有关更多选项,请参阅alsa 文档

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

希望有帮助。

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

于 2012-09-28T12:44:47.243 回答