2013-08-03 56 views
1

我打算有约100个同步音轨播放每个轨道的现场可控音量。音频来自wav文件。多轨音频与Java

是否有任何库/最佳实践来实现这个在Java中?

+0

你想使用Java作为实时播放音频的环境吗? – chrylis

+0

是的,我有一个带有Processing库的Java应用程序,喜欢添加一些音频。 – fabb

+0

尽管我是Java的粉丝,但这可能不是最好的方法; Java没有实时保证,并且你永远不知道什么时候(例如)由于垃圾收集或热点重新编译而最终导致口吃。 – chrylis

回答

1

我建议看看Praxis和JAudioLibs。尼尔史密斯知道他的东西。

我已经得到了30-50 wavs一次玩,我的图书馆当然不是最有效的。我并没有改变这些wav文件的音量或平底锅。如果你的某些声音足够短,可以存储在内存中(例如一堆音效),那么你有更多的机会成功拥有这么多的音轨。我已经获得100个短片一次运行(使用自定义剪辑,但是除了触发值之外,没有添加音量或平移)。

有关于Java的实时问题的好文章。这些问题是真实的,但不是不可逾越的。如果您坚持使用javax.audio.sampled库提供的最低级别的工具,并且不介意有点延迟,那么Java是相当低级和快速的。

http://quod.lib.umich.edu/cgi/p/pod/dod-idx?c=icmc;idno=bbp2372.2007.131

控制音量的实时是艰难的,因为它需要或者非常小的缓冲区或进入和做每一帧计算,否则就会越来越像zippering或点击效果的手段。当我使用时间标记的鼠标动作监听器输出并计算出中间音量时,我在实时音量变化方面取得了一些成功。但我还没有尝试将它应用于多个频道。 (这是一个虚拟的Theremin项目)。

但是,可能有一种方法可以预先构建一个非常高效的信封选择,并通过从这些信封的菜单中选择来控制音量。 Hmmmm。

这是一个具有挑战性的问题,我不知道即使我的DAW(Cakewalk Sonar,写成C的某种味道)也能够处理这个问题。

+0

感谢您的见解。我早些时候已经偶然发现了JAudioLibs,并会试用它。也许我可以减少必要的同步音轨。实际上对于大多数情况下,这些曲目中的大部分曲目都有0音量,但我担心不会加载它们,直到它们需要引入大量的crack啪声。我想在曲目中进行一些混合,因此他们需要同步并准备好听到。我知道我无法与商业DAW的性能竞争,所以也许我只是首先检查我的想法在DAW(我的FL Studio)中是否可行。 – fabb

+0

如果wavs本身都共享一个共同的第0帧,那么同步应该没问题。您可以将它们全部加载到调音台中,随时准备就绪,以便在每次调音台迭代时读取每个文件,然后将调音台作为一个单独的动作打开。 (我在音乐工作室意义上使用术语“混音器”,而不是Java定义)。还可以从0音量的音轨中读取和丢弃数据。有时裂纹来自音量溢出:将多条音轨加在一起时很容易做到。如果这是长时间播放,可能太过于将所有内存放在内存中作为“剪辑”类型的数据。我很好奇你想出了什么。 –