繁体   English   中英

Java Clip(声音)“呼应”并且无法有效播放

[英]Java Clip (sound) 'echoing' and not playing efficiantly

解决了

Runnable出现了问题,因此共有两个游戏线程同时运行。 (相等的问题!)因此,命中音频播放器的第二个线程出错了,这就是为什么它听起来很响亮的原因-它是从两个不同的线程播放的!

我还按照建议使用SourceDataLine来启用更长的声音剪辑。

原始后


该代码触发时,弹出错误提示

IllegalStateException: Mixer is already open

clip.open()行。 我已采取一切措施来检查代码是否运行了两次,不是。 但是,即使出现错误,声音仍然会播放。 在较长的剪辑(30秒)上,听起来好像有2种声音在播放,一种紧接着一种。 在非常长的剪辑(3分钟)上,声音发st。

stringFileString ,例如"example.wav"

File soundFile = new File(stringFile);
AudioInputStream inputStream = AudioSystem.getAudioInputStream(soundFile);
AudioFormat format = inputStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
clip = (Clip) AudioSystem.getLine(info);
clip.open(inputStream);
clip.start();
playing = true;

如果这个问题已经发布,我非常抱歉。 我已经搜索过,但没有找到与此线程相似的线程。

只是检查,但使用Clip的部分要点是您可以将Clip保留在内存中并多次调用,而不必从文件中重新加载它。

因此,要开始和停止,您可以使用myClip.open(),myClip.start(),myClip.stop(),然后再次播放,如果我读过myClip.setFramePosition(0)和myClip.start(),教程正确。 (通常,我只使用SourceDataLines,因此,如果遇到此错误,请原谅我。)

如果您每次都从文件中重新加载它,这可能会导致该问题或导致该问题吗? 无论如何,我都会考虑切换到SourceDataLine。 除其他外,这消除了在开始播放之前必须将整个剪辑加载到内存中的开销。

顺便说一下,30秒是很多RAM。 30 * 44100 = 1.323 MB(每帧只有1个字节,更常见的wav格式是该大小的4倍)。 因此,随着声音的变长,您可能会将RAM负担加重到页面交换点,这将导致卡顿。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM