簡體   English   中英

Java Sound Clip在多次播放后無法播放

[英]Java Sound Clip fails to play after multiple plays

我在游戲中使用Clips。 剪輯播放正常,但是經過一些“射擊”后,出現以下問題

線程“ PulseAudio Eventloop線程”中的異常java.lang.IllegalStateException:org.classpath.icedtea.pulseaudio.EventLoop.run(EventLoop.java:133)上的org.classpath.icedtea.pulseaudio.EventLoop.native_iterate(Native_iterate(Native Method))失敗)在java.lang.Thread.run(Thread.java:724)

我的代碼:

public static Clip[] sounds;
...
sounds = new Clip[3];
sounds[0] = getClip("gun.wav");
sounds[1] = getClip("click.wav");
sounds[2] = getClip("over.wav");
...
private void playSound(Clip clp) {
        final Clip clip = clp;
        Runnable soundPlayer = new Runnable() {

            @Override
            public void run() {
                try {
                    if(clip.isActive() || clip.isRunning()) clip.stop();
                    clip.setMicrosecondPosition(0);
                    clip.start();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        new Thread(soundPlayer).start();
}
public void shoot() { //runs when space is clicked 
if(canShoot) playSound(sounds[0]);
}

因此,我在OS X上遇到了類似的問題,如果您嘗試停止剪輯並從頭開始重新播放,則有時無法播放該剪輯。 我通過在stop()之后立即調用flush()修復它:

if(clip.isActive() || clip.isRunning()) {
    clip.stop();
    clip.flush();
}

您無需生成背景線程即可與Clip交互。 Clip的最常用方法(例如“啟動”和“停止”)是異步運行的,這意味着它們不會阻塞,因此可以從GUI / AWT / Swing線程調用它們。

該頁面有一些合理的示例: http : //www3.ntu.edu.sg/home/ehchua/programming/java/J8c_PlayingSound.html

我看到您正在使用IcedTea和PulseAudio。 與在Oracle JVM中相反,在此JVM中使用javax.sound時,您可能會遇到不同的行為,因為這兩個產品之間javax.sound的實現有很大不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM