我遇到了需要“模拟”麦克风输出的问题。
数据将通过网络传输,解码为PCM,基本上需要写入麦克风 - 然后其他程序可以读取/记录/无论如何。
我一直在阅读alsa,但信息非常稀少。文件插件看起来很有前途 - 我正在考虑将命名管道作为“infile”,然后我可以从我的应用程序传递数据。但我不能让它工作(vlc / audacity只是段错误)。
pcm.testing {
type file
slave {
pcm {
type hw
card 0
device 0
}
}
infile "/dev/urandom"
format "raw"
}
有没有更好的方法呢?有关alsa插件的任何建议(特别是文件插件)?
答案 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以及其他声音系统和库,以获得适合您任务的替代解决方案