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

标签 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"
}

有没有更好的方法来做到这一点?对 alsa 插件(特别是文件插件)有什么建议吗?

最佳答案

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

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

参见 alsa docs更多选项。

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

希望对您有所帮助。

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

关于linux - 模拟麦克风(虚拟麦克风),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4580986/

相关文章:

c# - Xamarin IOS : unable to play mp3 from internet

objective-c - 检测新的视频和音频输入

c++ - 对象继承虚函数运行失败报错

c++ - 为什么 QWidget 的析构函数不是虚拟的?

linux - 没有屏幕的计算机的IP地址

linux - 在linux中根据公共(public)列合并两个不同长度的文件

ios - 为交错 PCM 音频设置音频单元格式和渲染回调

C++ 为什么我可以从派生类调用基类的私有(private)虚函数?

linux - 如何读取文件中每一行的数据,并确定哪一个数据对应于 shell 脚本中的基准标记

linux - 从 shell 脚本调用 erlang 文件的函数