Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java(JavaSound):是;clip.play();昂贵的电话?_Java_Multithreading_Performance_Jvm_Javasound - Fatal编程技术网

Java(JavaSound):是;clip.play();昂贵的电话?

Java(JavaSound):是;clip.play();昂贵的电话?,java,multithreading,performance,jvm,javasound,Java,Multithreading,Performance,Jvm,Javasound,我在StackOverflow上读到,每次在JavaSound中播放一个剪辑时,它都会在幕后创建一个线程来播放它。如果这是真的(如果不是,请告诉我,因为我没有找到任何关于这方面的文档/源代码),这会被认为是一个昂贵的调用吗,因为在任何OS/JVM中创建线程都是一项昂贵的任务?我还不确定,但我可能需要同时播放10到20个剪辑,所以我想知道这是否会是一个问题 PS:如果除了创建线程之外,还有其他原因,这是一个非常重要的调用,请让我知道。线程并不昂贵,尤其是。我个人制作了一个运行超过500次的程序。服

我在StackOverflow上读到,每次在JavaSound中播放一个剪辑时,它都会在幕后创建一个线程来播放它。如果这是真的(如果不是,请告诉我,因为我没有找到任何关于这方面的文档/源代码),这会被认为是一个昂贵的调用吗,因为在任何OS/JVM中创建线程都是一项昂贵的任务?我还不确定,但我可能需要同时播放10到20个剪辑,所以我想知道这是否会是一个问题


PS:如果除了创建线程之外,还有其他原因,这是一个非常重要的调用,请让我知道。

线程并不昂贵,尤其是。我个人制作了一个运行超过500次的程序。服务器程序可以产生比这多得多的东西

声音处理并不便宜,但我不知道它比许多图形效果(如3D中的灯光)占用更多的cpu。我制作了一个程序,既可以播放声音,也可以制作一个“发光球”,当声音播放时,发光球会变大或变暗。“发光球”不断更新RadialGradientPaint以实现此效果。我遇到了一个大约10个球和声音的上限,图形球是更大的处理负载

尽管如此,您可能无法在播放17个剪辑的情况下完成很多其他工作。你必须测试它,如果cpu跟不上,你会听到辍学的声音

您的17个剪辑可能会占用大量内存。你知道它们都被载入了记忆,是吗?每秒44100个样本,通常每个样本4个字节(立体声,16位PCM),这一速度开始加快

这样,可能有理由考虑使用SoxEditalin代替,特别是对于较长的声音。

此外,一些操作系统似乎不能很好地处理多种声音。我在这里遇到了一些问题,尤其是Linux。最后,我编写了一个程序,将所有播放声音混合到一个输出SourceDataLine中,作为处理此问题的一种方法


另一种提高效率的方法是加载自己定制的剪辑。我给这个片段提供了多个光标(指针),它们可以独立地在音频数据中移动。这样,我可以播放一个剪辑多次(并以不同的速度)重叠。要使用Java片段实现这一点,您必须多次将其加载到RAM中。所以,你可以考虑写些类似的东西。多个游标的输出可以通过SourceDataLine进行汇总和播放。

谢谢,您不仅回答了我的问题,还提供了一些有趣的信息。