首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java (JavaSound):"clip.play()“调用开销大吗?

Java (JavaSound):"clip.play()“调用开销大吗?
EN

Stack Overflow用户
提问于 2012-07-13 00:44:09
回答 1查看 212关注 0票数 1

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-14 03:04:49

特别是线程并不昂贵。我个人做了一个已经运行了500多次的程序。服务器程序可以产生更多的东西。

声音处理并不便宜,但我不知道它比3D中的照明等许多图形效果占用更多的cpu。我制作了一个程序,既播放了声音,又制作了一个“发光球”,在播放声音的过程中,它会变大和变暗。“发光球”不断更新一个RadialGradientPaint来实现这个效果。我遇到了大约10个球和声音的上限,而图形球是更大的处理负载。

尽管如此,在播放17个剪辑的情况下,您可能无法做很多其他的事情。您必须对其进行测试,如果cpu跟不上,就会听到辍学的声音。

您的17个剪辑可能会占用大量的RAM。你知道它们都加载到内存中了,对吧?每秒44100个样本,通常每个样本4个字节(立体声,16位PCM),这开始快速增加。

因此,可能有理由考虑使用SourceDataLine来代替,特别是对于较长的声音。

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

我获得一些效率的另一种方法是加载我自己定制的剪辑。我给了这个剪辑多个光标(指针),它们可以独立地在音频数据中移动。这样,我可以多次(以不同的速度)重叠播放一个剪辑。要对Java剪辑执行此操作,必须多次将其加载到RAM中。所以,你可以考虑写一些类似这样的东西。多个游标的输出可以相加,并通过SourceDataLine播放。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11456622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档