用于音频处理的Java是否实用?

Java是C / C++的合适替代品吗?

我正在考虑一个应用程序,其中包含约100个(最多)音频轨道,具有延迟线(30s @ 48khz),滤波(512点FIR?)以及同时在每个轨道上发生的其他DSP类型操作。

这些操作将被转换并以浮点模式执行。

该系统可能是一个四核3GHz,4GB RAM,运行Ubuntu。

我看到过关于Java的文章比以前快得多,接近C / C++,现在也有实时扩展。这是现实吗?它是否需要硬核编码和调整才能达到某些规范的C的%50-%100性能?

我真的在寻找一种感觉,如果这是可能的,并为任何陷阱做好准备。


答案 1

对于音频应用程序,您通常只有非常小的一部分代码,其中大部分时间都花在了这些部分上。

在Java中,您始终可以使用JNI(Java Native接口)并将计算繁重的代码移动到C模块(或者如果您确实需要功能,则使用SSE的程序集)。所以我会说使用Java并让你的代码工作。如果事实证明您没有达到性能目标,请使用 JNI。

无论如何,90%的代码很可能是胶水代码和应用程序的东西。但请记住,您以这种方式会丢失一些跨平台功能。如果你能忍受,JNI将始终为你打开本机代码性能的大门。


答案 2

Java对于许多音频应用程序都很好。与其他一些海报相反,我发现使用Java音频是一种乐趣。将可用的API和资源与CoreAudio这个可怕的,几乎没有文档记录的mindf *k进行比较,你就会成为一个信徒。Java音频存在一些延迟问题,尽管对于许多应用程序来说,这是无关紧要的,并且缺乏编解码器。也有很多人从来没有花时间写出好的音频播放引擎(提示,永远不要关闭SourceDataLine,而是给它写零),然后责怪Java的问题。从API的角度来看,Java音频非常简单,非常易于使用,并且 jsresources.org 有很多很多指导。


推荐