在不同平台上钩取wave-out

2 投票
1 回答
895 浏览
提问于 2025-04-15 17:28

我先道个歉,可能我说得有点模糊,因为我在这个领域的知识有限,不太知道该用什么“关键词”来清楚表达我的问题。抱歉了

我想做的是找到一种方法,获取正在输出的原始音频数据。比如,当某个外部应用在播放音乐时,或者当麦克风的数据传输到输出设备时,我想实时(差不多实时)访问这些数据,这样我就可以进行分析或可视化等操作。

我知道这肯定是可行的,因为我很久以前在Java中做过这件事(我记得当时用的是Processing和Minim库)。在Windows系统中,我通过在声卡上启用一种“回环”输入设备来实现的(我记得我的设备商叫它“Wave Out Mix”之类的)。那么在基于Linux的操作系统中,应该怎么解决这个问题呢?

我打算用Python来进行分析和可视化,不过如果需要获取原始数据,我也可以用C语言来做。

提前感谢任何信息。

1 个回答

4

你能否使用“波形输出”或“回环”功能,主要取决于你的声卡和驱动程序。

在Linux系统中,原生的声音接口叫做ALSA。你可以搜索一下ALSA的文档和示例代码,这样你就能找到一些代码来从声卡录音,然后希望能设置你的混音器,这样你就可以从“波形输出”录音,而不是从麦克风录音。

较旧的Linux声音接口是OSS,它相对简单一些,ALSA大部分情况下都能模拟这个接口。不过,如果你想完全控制你的声卡,ALSA是更好的选择。

你可能还想了解一下Jack,这是一个可以把一个应用程序的音频输出连接到另一个应用程序输入的系统,可以形成一个大链条或其他各种配置。有很多兼容的程序,如果你需要的程序都支持Jack,那么你会发现它是处理这类事情最简单的接口。

最后,虽然听起来有点傻,但你可以用一根模拟回环电缆——也就是一个公对公的立体声迷你插头,把它从耳机插孔连接到线路输入插孔,这样就可以以这种方式录制“波形输出”,无论你的声卡是什么。这是一个有点傻的解决办法,但确实有效,根据你想录制的内容,这可能已经足够了。

撰写回答