Java是编写音乐DAW(数字音频工作站)的现实选择吗

时间:2010-10-10 05:57:09

标签: c# java audio

我在Java中编写了大量与Web相关的东西,但我一直在想用某种语言创建一个非常简单的DAW。我考虑过C#但它似乎不再支持Direct X(尽管有一些库可以在不同程度上取得成功)。我很好奇是否有人对通过Java播放大量多声道声音有意见。在某些时候我还需要破解一些VST支持(这可能不会是微不足道的。我真的害怕我唯一的选择就是C ++,这会让我感到不愉快,以至于我实际上没有工作(知道)一些C ++,但还不足以写出这么激烈的东西。

任何人都有一些想法?感谢

3 个答案:

答案 0 :(得分:3)

已经有一些DAW使用java平台(frinikajavaDAW 例如)。所以我认为这是一个合理的选择。

答案 1 :(得分:3)

毕竟,Java中的VST支持可能相当容易;我听说过http://github.com/mhroth/jvsthost的积极体验(也就是说,我在论坛上与之交谈的人似乎很快就开始运行,成功运行了许多不同的合成器)。

旁白:就个人而言,我正在开发一些使用SuperCollider作为音频后端的Java软件(免责声明:我对Java声音的实际体验有限)。虽然可能只是围绕SuperCollider建立一个DAW,我不会真的推荐它作为这项工作的工具。但是,我也不太明白你为什么要首先建立一个DAW ...如果你想要探索用计算机制作音乐的其他方法,你可以给SC看一看(ChucK我发现很容易上手并且非常有趣):-)

无论如何,回到这个问题......虽然我倾向于特别提到Java,但其中很多内容也适用于C#:

传统上,垃圾收集一直是人们关心的事情,在Java中,时间是最重要的;例如,在DAW中,这可能表现为输出中的不准确的定时或点击,其中GC中断程序的时间足够长,以至于它无法处理完整的缓冲区。如果您希望使用小缓冲区以实现低延迟,并且/或者不小心生成的垃圾量,则尤其如此。但是,我不想传播关于Java声音的FUD:正如我所提到的,我自己并没有真正大量使用它,无论如何我相信这些问题正在改善。这肯定是你需要注意的一个问题,但可能不是一个表演者。

我认为任何DAW的一个重大瓶颈就是文件IO,只要采取适当的谨慎措施,就不会受到Java的影响。

如果你开始同时在许多通道上进行强烈的DSP,那么可能是Java计算性能并不是完全最优的(尽管可能并不坏);但是如果你主要在你的DAW代码和任何带有VST的DSP上进行基本混音,那么无论如何他应该是一个非问题。

就实际的音频IO而言,我看到Java也有ASIO实现,如果你感兴趣的话。我甚至没有间接的经验,所以我真的不会担保他们。 Java 1.7应该具有改进的低延迟音频支持,FWIW(尽管从我所读到的,他们想到的应用程序不是DAW之类的东西)。 DirectX支持我认为不应该是DAW的主要因素。从这个意义上说,你可能不想解雇C#,因为它是一种非常好的语言。

答案 2 :(得分:1)

我正在做类似的事情,所以我不得不说这是可能的,我的笔记本电脑被盗了,我必须重新开始,但我已经重建了大部分内容。到目前为止,赛道线程已经很好地排队,但我正在考虑实施类似LWJGL的定时器以获得更好的精度。 Tritonus是一个非常有用的库,您可以在jsresources.org找到它以及一些非常有用的示例。我在那里学到了很多东西。我给你发了一封电子邮件,我很乐意与你分享我的代码。