我遇到了一个问题,我需要“模拟”麦克风输出。
数据将通过网络传入,解码到PCM中,基本上需要写入麦克风-然后其他程序可以读取/记录/任何东西。
我一直在研究alsa,但信息非常稀少。文件插件seemes很有希望--我正在考虑有一个命名管道作为"infile“,然后我可以将数据从我的应用程序传递到它。然而,我不能让它工作(vlc/audacity只是segfault)。
pcm.testing {
type file
slave {
pcm {
type hw
card 0
device 0
}
}
infile "/dev/urandom"
format "raw"
}有没有更好的方法来做到这一点?对alsa插件(特别是文件插件)有什么建议吗?
发布于 2012-09-28 20:44:47
你的声音会通过网络传过来,在有东西想要读之前,什么东西会缓存它呢?或者数据会被丢弃吗?一般来说,像下面这样的东西(只是刚刚测试过)应该可以作为虚拟麦克风工作,但我认为当设备打开时,它总是会从开始读取文件,你需要检查它是如何处理文件结尾的。也许你会尝试使用管道,但是缓存/丢弃传入的数据需要由从网络读取的应用程序来处理。
pcm.virtmic {
type file
format "raw"
slave.pcm "default"
file '/dev/null'
infile '/dev/urandom'
}有关更多选项,请参阅alsa docs。
再说一次,我不确定这个工具是否是你真正需要的。如果你能用'infile‘选项启动一个命令就好了,就像你能用'file’启动命令一样,但不幸的是你不能……
希望这能有所帮助。
更新: slave.pcm不能是"null“,而是一些真实的设备。它似乎是用于计时的,或者我不知道,但是使用null会导致记录器进程永远阻塞。但是,此设备可能会强制您使用给定的采样率,因此要小心。使用" default“是一个合理的默认值。infile需要提供具有正确/匹配格式和速率的原始声音数据。顺便说一句,您可以查看alsa服务器和jackd以及其他声音系统和库,以获得任务的替代解决方案。
https://stackoverflow.com/questions/4580986
复制相似问题