获取另一个 Java 程序的声音

Posted

技术标签:

【中文标题】获取另一个 Java 程序的声音【英文标题】:Getting another Java Program's Sound 【发布时间】:2013-03-17 21:57:04 【问题描述】:

我正在编写一个视频录制程序,并且进展顺利。我可以从屏幕上录制麦克风和视频。但是,我也希望能够从另一个 Java 程序中获取声音,然后将它们与视频同步。基本上,录制其他程序播放的音频。

有没有办法做到这一点?我对声音很陌生,并且已经阅读了一些内容。我想我需要设置一个混音器,但我不确定我是否真的可以通过这种方式从另一个 Java 程序中获取声音。

【问题讨论】:

遗憾的是,Java 的声音 API 非常缺乏。 是的,我确实注意到了。即使使用外部 API,我有什么办法可以让它工作吗? “其他”Java 程序是否可以重新编程?这个其他程序是否允许您指定混音器?我还想知道将 Java 音频程序设置为将字节流发送到您的录音机而不是音频。甚至,将您的录音机设置为具有第二个接口,用于播放音频以进行混音。那可能会有最好的表现。 (我在这里完全是集思广益,我真的没有做太多使用 TargetDataLine 获取线的工作。) 我也没有,真的。我对此了解不多。 【参考方案1】:

这对于 java 声音是不可能的,不是因为 java 声音有任何特殊问题,而是因为不是所有 java 构建的音频 API 都支持这个特性。 (例如 mac 上的核心音频,windows 上的 ASIO。不确定 linux 上的 ALSA,但我认为它也不支持)。

如果您在 Windows 上并想编写 JNI/JNA 代码,您可以在其中一个音频 API 上使用支持此功能的 PortAudio(抱歉,我不记得是哪一个)。

【讨论】:

ffmpeg 能做到这一点吗?还是根本不起作用? 我不这么认为。 FFMPEG 会遇到与 Java 相同的问题:该功能必须由底层音频 API 提供。 啊。那么我假设不使用 JNI / JNA 是不可能的吗? 问题是:你运行的平​​台能做到吗?有些可以,有些不能。如果可以,那么您需要想出一些方法来做您想做的事,这可能是 JNI/JNA,但根据您的需要,您也许可以启动一个单独的进程来做任何您想做的事情。 我现在用的是windows,这个程序的主要用户是windows。

以上是关于获取另一个 Java 程序的声音的主要内容,如果未能解决你的问题,请参考以下文章

Java 声音采样器未完成获取缓冲区

如何将 FFT 应用于录音以获取频率?

music21:从平面乐谱中获取 midi 声音的声音/程序/乐器?

如何在我的应用程序中获取推送通知设置?

在电子应用中获取扬声器输出电平

如何从 python 中的麦克风获取声音输入,并即时处理它?