获取 Mixer 可以支持的最大剪辑数量?

问题描述

我通过为每个音频文件调用以下方法,将多个音频文件作为 Clip 的实例打开:

final mixer.Info[] mixerInfo = AudioSystem.getmixerInfo();
final AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(audioStream);
final Clip clip = AudioSystem.getClip(mixerInfo[selectedmixerIdx]);
clip.open(audioInputStream);

但是,在某些机器上运行它时,我在打开几个文件后得到 LineUnavailableException

我是 Java Sound API 的新手,所以我可能完全走错了路;但是有什么方法可以查看 mixer 可以处理的最大剪辑数量吗?

解决方法

我冒昧地猜测一下,线路不可用的问题是由于尝试重用线路造成的。 AFAIK,您可以根据需要打开任意数量的剪辑(假设您没有耗尽内存)。

有多少人可以同时玩是另一个问题。我认为这在很大程度上取决于个人电脑。我想我最后一次尝试是在几年前在一台较旧的笔记本电脑上,它可以同时处理 30 个剪辑或一半的 SourceDataLines 播放。

如果您尝试同时将声音文件作为 Clip 播放(制作相同音频资源的多个副本),您可能有兴趣查看 AudioCue。这利用了一个计划,其中源数据在内存中只存储一次,但管理多个游标(每个游标一个播放实例),并将游标的输出合并为一个 {{1 }}。使用此工具可以构建一些非常复杂的音景。