gpt4 book ai didi

java - Java剪辑(声音) 'echoing'不能有效播放

转载 作者:行者123 更新时间:2023-12-03 02:24:30 25 4
gpt4 key购买 nike

解决了

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负担加重到页面交换点,这将导致卡顿。

关于java - Java剪辑(声音) 'echoing'不能有效播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com