我需要调试我的程序,我需要虚拟麦克风之类的东西。我想要一个设备“麦克风”,我可以在其中放置声音文件,并且该文件将输入麦克风流。在应用程序中,我从这个“麦克风”获取此流
文件 -> 麦克风 -> 应用程序
是否可以?
类似 bash 命令应该非常有用:
aplay --device=mic my_microphone.wav
运行麦克风流
答案1
您的问题缺少一些细节,例如您使用的是哪种编程语言或哪种声音服务器。不过,我会尝试一下。
我已成功使用 JACK 守护程序 ( jackd
) 调试音频应用程序。可能需要花费一些功夫jackd
,但这是值得的。将其视为音频应用程序和硬件可以向其注册音频输入和输出端口的声音服务器。然后,您可以使用以下方式qjackctl
连接这些端口:手动使用连接或者自动地使用配线架。
遵循的步骤:
- 安装
jackd
和qjackctl
- 假设您正在使用 ALSA,请向
jack
您的设备添加一个设备~/.asoundrc
,以便您可以输出到 jack 服务器(见下文) - 开始
qjackctl
并从内部开始jackd
(这可能是你遇到问题的时候 - 在我相当复杂的音频设置中,我不得不让开pulseaudio
) - 播放你的声音文件
aplay --device=jack my_microphone.wav
,并尝试将其连接到你的声卡 - 当你听到一些声音时,你就快完成了 - 使用创建一个新的 JACK 输入端口杰克 API
- 使用
jackd
配线架自动将您的新输入端口连接到 JACK 音频输出端口(可能是来自aplay
、使用 JACK 的媒体播放器(qmmp、VLC 等)或您的声卡的输出)
以下是我的~/.asoundrc
pcm.jack
{
type plug
slave.pcm "jack_output"
hint
{
show on
description "Alsa (JACK plugin)"
}
}
pcm.jack_output
{
type jack
playback_ports
{
0 system:playback_1
1 system:playback_2
}
capture_ports
{
0 system:capture_1
1 system:capture_2
}
hint
{
show off
description "Alsa (JACK output)"
}
}
答案2
您还可以加入流处理器在您的应用程序中。请参阅这里简短介绍和这里了解教程。该元素appsink
可能正是您要找的。
以下是一些命令行示例。还有一个广泛的 API,因此您可以从应用程序中调用所有(或部分)这些 API。
在默认音频输出上播放粉红噪音:
gst-launch-0.10 audiotestsrc wave=6 ! autoaudiosink
在默认音频输出上播放 MP3(或其他支持的格式):
gst-launch-0.10 filesrc location=my_microphone.mp3 ! decodebin ! \
audioconvert ! autoaudiosink
GStreamer 非常棒,所以如果您开始使用 GStreamer 重写整个应用程序,请不要责怪我……:)