linux使用pactl将音频管道传输到虚拟麦克风
Posted
技术标签:
【中文标题】linux使用pactl将音频管道传输到虚拟麦克风【英文标题】:linux pipe audio to virtual microphone using pactl 【发布时间】:2018-12-10 05:53:57 【问题描述】:我找到了一个示例,该示例显示了如何使用“pactl load-module module-pipe-source”将波形文件作为麦克风输入传递。这个例子的问题是它依赖于一个无限的while循环,并且当音频文件成功通过麦克风一次时不会停止。如果有人可以修复这个例子,那就太好了。我听说过: sudo modprobe snd-dummy 但是不知道怎么用。文档非常缺乏。
示例如下:
# Load the "module-pipe-source" module to read audio data from a FIFO special file.
pactl load-module module-pipe-source source_name=virtmic
file=/home/cammy/audioFiles/virtmic format=s16le rate=16000 channels=1
# Set the virtmic as the default source device.
pactl set-default-source virtmic
# Write the audio file to the named pipe virtmic. This will block until the named pipe is read.
echo "Writing audio file to virtual microphone."
while true; do
cat good_morning_vietnam.wav > /home/cammy/audioFiles/virtmic
done
您可以想象,这样做的结果是音频剪辑不断重复循环。我只想播放一次,而不是多次。 如果我尝试行:
cat good_morning_vietnam.wav > /home/cammy/audioFiles/virtmic
在while循环之外。似乎只有一小部分音频文件到达麦克风,而不是整个剪辑。我不知道为什么会这样。不确定是否像麦克风文件被定期清除或其他东西。
【问题讨论】:
这可能是因为cat
几乎会立即将文件的原始内容转储到虚拟麦克风中。如果您将呼叫计时到cat /file > /virtmic
,它可能会几乎立即执行。我认为您需要以录制 wav 文件的速率输入数据,这样如果您的音频文件是 3 秒,则写入所有字节需要 3 秒。
确保在重定向 wav 文件时没有客户端连接到虚拟麦克风源。这包括,例如,声音配置 GUI,如果您选择输入,它将“啜饮”声音(因为它读取输入以显示输入表)。当没有客户端连接时,文件重定向应该“阻塞”,直到第一个客户端连接。我发现的另一件事是有些客户没有阅读整个音频(或者没有给出整个音频......不确定哪个)。我发现使用sox
阅读只能部分工作,但使用parec
阅读效果很好。
【参考方案1】:
我找到了答案作为对另一个类似问题的评论 (Linux pipe audio file to microphone input):
ffmpeg -re -i $AUDIO_FILE -f s16le -ar 16000 -ac 1 - > $VIRTUAL_MIC
【讨论】:
以上是关于linux使用pactl将音频管道传输到虚拟麦克风的主要内容,如果未能解决你的问题,请参考以下文章
使用 Java SDK 将音频从麦克风流式传输到 IBM Watson SpeechToText Web 服务