Java 游戏音效无法正常工作

Posted

技术标签:

【中文标题】Java 游戏音效无法正常工作【英文标题】:Java game sound effects isn't working correctly 【发布时间】:2013-01-11 11:27:06 【问题描述】:

我正在尝试做我的学校项目(一个简单的 Java 游戏),但我无法制作音效。我正在使用 Clip 进行此操作,现在我的 playSound 方法如下所示:

public void playSound(File filename) 
    try 
        AudioInputStream sound = Audiosystem.getAudioInputStream(filename);
        Clip clip = AudioSystem.getClip();
        clip.open(sound);

        clip.setFramePosition(0);
        clip.start();
     
    catch (UnsupportedAudioFileException ex) 
        ex.printStackTrace();
     
    catch (IOException ex) 
        ex.printStackTrace();
     
    catch (LineUnavailableException ex) 
        ex.printStackTrace();
    

我有不同的声音效果作为属性(文件),当我想播放一些声音时我会调用该方法。

一切正常:例如,当玩家吃东西时会播放声音,但有时声音会变小。当玩家没有吃任何东西时,正在播放吃东西的声音。

你知道怎么了吗?像这样播放几个音效有问题吗?谢谢! :)

【问题讨论】:

如需尽快获得更好的帮助,请发帖SSCCE。 您的声音文件是什么格式的?这可能会有所作为。 【参考方案1】:

以下建议可能对您的情况有所帮助,也可能无济于事。

每次播放声音时,您都会从磁盘加载剪辑。剪辑被设计为加载一次,并根据需要调用。要重播剪辑,请将其重置回第 0 毫秒或第 0 帧,然后像此处一样调用 play。这样,它开始非常快。按照您的编程方式,剪辑在从磁盘完全加载到内存之前甚至不会开始播放,并且 setFramePosition(0) 是多余的,因为新创建的剪辑将始终从头开始播放(除非您已明确设置到其他框架位置)。

所以,我建议在游戏开始时,将剪辑加载到将持续存在的对象中,并根据需要引用它们,此时您只需要调用 setFramePosition(0) 和 play () 方法。

如果声音在奇怪的时间播放,我会更仔细地研究调用声音的逻辑。虽然您的方法不是最佳的,但它确实有效,并且如果声音文件的加载由于某种原因被延迟,只会导致奇怪的延迟播放时间。但是,如果您的声音超过几秒钟,那么这些加载延迟可能是问题的根源。

另一种想法是,SourceDataLine 开始播放比创建、加载和播放新剪辑更快。播放 SDL 比播放 Clip 需要更多的 cpu,但如果声音文件较长,这仍然是一种合理的方式。

【讨论】:

以上是关于Java 游戏音效无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

安卓游戏,播放“Game Over”音效

浅谈游戏音效测试点

(转)CocosCreator零基础制作游戏《极限跳跃》九为游戏添加声音音效功能

浅谈游戏音效测试点

浅谈游戏音效测试点

浅谈游戏音效测试点