如何在Java中采样多通道声音输入

8
我意识到这可能相对狭窄,但也许这就是为什么问这个问题很好的原因。我正在研究一种硬件多输入录音控制台(例如Alesis IO 26),以接收Adat光纤8通道输入进行信号处理。由于我尚未获得设备并需要确定是否可行(预算问题),因此我想问是否有人有使用Java获取所有这些8个输入数据的经验?我看到了大量使用Javax.sound.sampled库记录声音的示例,但我找不到任何关于多通道的信息,其多于2个。我感兴趣的是将8个通道单独采样作为单声道源来执行一些简单的DSP操作。硬件设备会被视为一个混音器吗?这8个通道会被表示为8条线路吗?我希望我的术语正确。如果有人能指向任何相关信息,我将不胜感激。谢谢!
4个回答

3
根据您运行的Java版本、运行平台和声卡类型,Java中应该可以实现多通道音频。更多详细信息请参见优秀的Java音频常见问题解答。但我从未在所有平台上可靠地使用过它。
如果您真的关心稳健的多通道音频,我建议使用C API,例如PortAudioJucePulseAudio
我在PortAudio和Juce上都取得了极好的成果。
要在Java中使用它们,您需要创建一个JNI接口来连接C API。
显然,这比仅使用javax.sound需要更多的工作量,但它为您提供了更多对所使用音频硬件的控制。根据我的经验,在处理音频设备时,与硬件相隔太远(即4个抽象层而不是2个)通常会削弱您进行严肃的多通道、高位深度、高采样率音频的能力。

感谢Nick指引我正确的方向。java.sampled只支持2个通道。我目前在Windows Vista上使用M-Audio ProFire 2626音频接口,并且使用ASIO驱动程序,在Java中使用JPAB(Java PortAudio Bindings)编写了一个可以分别获取通道的工作程序。 - johncch
太好了,我甚至不知道有 JPAB 存在。它是 PortAudio 的非常好的封装。 - Nick Haddad

1

我刚刚为PortAudio添加了一个Java JNI包装器。计划是将其与PortAudio源代码一同维护。PortAudio支持N>2个通道的音频。

截至今天,即2012年9月3日,JPortAudio仍处于Alpha测试模式。当您阅读此消息时,它可能已经稳定下来。

http://www.portaudio.com/docs/v19-doxydocs/java_binding.html


1

我曾经用Terratec卡串联了32个输入,使用的是当时唯一的库Jsyn。

一旦你熟悉了它,这是一个非常好的库。

http://www.softsynth.com/jsyn

我不确定是否还有其他可以帮助的东西。


0

我无法直接回答javax.sound API是否支持多通道(但根据API文档应该是可以的)。

然而,我已经用另一种方式在Java中进行了多通道音频处理,这也可能适用于您。我使用了Jack(Jack Audio Connection Kit)将信号从音频设备传输到音频设备,然后使用JJack库执行信号处理。 您没有提及目标操作系统。我在Linux下成功地使用了这种方法。据我所知,Windows上有一个Jack端口正在开发中。

ciao, elm


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接