在运行时期间无法加载声音

时间:2014-12-30 10:20:14

标签: java audio

您好我已经创建了一个小课程来在我的游戏中播放声音。在这里:

包sk.tuke.oop.game.sounds;

import java.applet.AudioClip;
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.FloatControl;

public class Sound implements AudioClip {

    private Clip clip;
    private FloatControl volume;
    private int framePosition;

    public Sound(String path) {
        loadMusic(path);
    }

    public void loadMusic(String path) {
        if (clip != null)
            clip.stop();

        clip = null;

        if (!path.equals("")) {

            File soundFile = null;

            try {
                soundFile = new File(path);
            } catch (Exception e) {
                return;
            }

            try {
                AudioInputStream input = AudioSystem.getAudioInputStream(soundFile);
                clip = AudioSystem.getClip();
                clip.open(input);
            } catch (Exception e) {
                e.printStackTrace();
                clip = null;
            }

        }

    }

    public void play() {
        if (clip != null) {
            stop();
            clip.start();
        }
    }

    public void stop() {
        if (clip != null) {
            clip.stop();
            clip.setFramePosition(0);
        }
    }

    public void pause() {
        if (clip != null) {
            if (clip.isRunning()) {
                framePosition = clip.getFramePosition();
                clip.stop();
            }
        }
    }

    public void unpause() {
        if (clip != null) {
            if (!clip.isRunning()) {
                clip.setFramePosition(framePosition);
                clip.start();
            }
        }
    }

    public void loop() {
        if (clip != null) {
            clip.loop(clip.LOOP_CONTINUOUSLY);
        }
    }

    public void setVolume(float vol) {
        if (volume.getMinimum()+ vol <= volume.getMaximum()) {
            volume.setValue(volume.getMinimum());
            volume.setValue(volume.getValue() + vol);
        }
    }
}

当所有演员都在游戏循环之前创建,但是当我射击子弹并且我想播放声音时,它工作得很好:

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
你可以帮帮我吗?谢谢。

1 个答案:

答案 0 :(得分:0)

如果声音文件不是mp3格式,那么尝试转换为mp3。 还要确保文件名是小写字母。