强制音频到麦克风

时间:2014-03-28 22:05:54

标签: java audio device

我正在寻找一种获取音频数据的方法,并将其发送到默认录音设备,如立体声混音或创建另一个虚拟音频设备。我正在使用Java(eclipse)。我已经研究过JMF,但我不明白我将如何将音频发送到设备。如果有一个更适合这个项目的库,以及如何实现它,请告诉我。

* *我想创建一个音频源,以便使用像Skype这样的麦克风的程序可以使用它。示例:我按下声板上的按钮,然后播放给其他呼叫者。

1 个答案:

答案 0 :(得分:0)

在标准Java中无法做到这一点,您将不得不分支到本机代码,更糟糕的是,操作特定的本机代码。例如,使用JNA,您可以按these Windows specific instructions查找Windows系统上的音频设备。

遵循这些说明并不容易 - 首先,您需要加载MMDeviceApi.dll库并编写structuresdata types MMDeviceApi.h的JNA实现}}。这样您就可以访问Windows上的MMDevice API。该API允许您使用IMMDeviceEnumerator枚举系统上的所有音频设备,包括专门枚举音频输入设备。

通过IMMEndpoint interface获取相应的音频端点后,您可以按these instructions生成一个填充了音频数据的缓冲区,并将该缓冲区发送到设备。但是,遵循第二组指令要求您加载Audioses.dll库并为此新库编写另一个JNA接口。

完成所有这些步骤后,基本上以跨语言方式复制the functionality described here,您将最终实现您的功能 - 但仅适用于 ONE 操作系统!对于您将支持的每个操作系统,您需要使用该操作系统特定功能重新执行此操作。

您的问题的最终答案是,没有一个单独的库允许您从Java执行此操作。您可以这样做,它只需要您解决Java没有很好的时间与系统级资源交互的事实。实现该功能的最简单方法是几乎完全跳过Java,只需用C或C ++等低级语言编写库。如果您只想在Windows上实现此功能,您甚至可以使用.Net / C#。 C#与Java非常相似,切换语言也不会很困难。基本上,做你想做的最好的方法是通过不同的语言!如果你想要的是坚持使用Java,那么请强烈考虑替代方案。