Java(JavaSound):是;clip.play();昂贵的电话?
我在StackOverflow上读到,每次在JavaSound中播放一个剪辑时,它都会在幕后创建一个线程来播放它。如果这是真的(如果不是,请告诉我,因为我没有找到任何关于这方面的文档/源代码),这会被认为是一个昂贵的调用吗,因为在任何OS/JVM中创建线程都是一项昂贵的任务?我还不确定,但我可能需要同时播放10到20个剪辑,所以我想知道这是否会是一个问题Java(JavaSound):是;clip.play();昂贵的电话?,java,multithreading,performance,jvm,javasound,Java,Multithreading,Performance,Jvm,Javasound,我在StackOverflow上读到,每次在JavaSound中播放一个剪辑时,它都会在幕后创建一个线程来播放它。如果这是真的(如果不是,请告诉我,因为我没有找到任何关于这方面的文档/源代码),这会被认为是一个昂贵的调用吗,因为在任何OS/JVM中创建线程都是一项昂贵的任务?我还不确定,但我可能需要同时播放10到20个剪辑,所以我想知道这是否会是一个问题 PS:如果除了创建线程之外,还有其他原因,这是一个非常重要的调用,请让我知道。线程并不昂贵,尤其是。我个人制作了一个运行超过500次的程序。服
PS:如果除了创建线程之外,还有其他原因,这是一个非常重要的调用,请让我知道。线程并不昂贵,尤其是。我个人制作了一个运行超过500次的程序。服务器程序可以产生比这多得多的东西 声音处理并不便宜,但我不知道它比许多图形效果(如3D中的灯光)占用更多的cpu。我制作了一个程序,既可以播放声音,也可以制作一个“发光球”,当声音播放时,发光球会变大或变暗。“发光球”不断更新RadialGradientPaint以实现此效果。我遇到了一个大约10个球和声音的上限,图形球是更大的处理负载 尽管如此,您可能无法在播放17个剪辑的情况下完成很多其他工作。你必须测试它,如果cpu跟不上,你会听到辍学的声音 您的17个剪辑可能会占用大量内存。你知道它们都被载入了记忆,是吗?每秒44100个样本,通常每个样本4个字节(立体声,16位PCM),这一速度开始加快
这样,可能有理由考虑使用SoxEditalin代替,特别是对于较长的声音。
此外,一些操作系统似乎不能很好地处理多种声音。我在这里遇到了一些问题,尤其是Linux。最后,我编写了一个程序,将所有播放声音混合到一个输出SourceDataLine中,作为处理此问题的一种方法另一种提高效率的方法是加载自己定制的剪辑。我给这个片段提供了多个光标(指针),它们可以独立地在音频数据中移动。这样,我可以播放一个剪辑多次(并以不同的速度)重叠。要使用Java片段实现这一点,您必须多次将其加载到RAM中。所以,你可以考虑写些类似的东西。多个游标的输出可以通过SourceDataLine进行汇总和播放。谢谢,您不仅回答了我的问题,还提供了一些有趣的信息。