Java Clip.start() полусистемно не воспроизводит звук

Эта проблема требует некоторого контекста. Казалось бы, что-то в java-клипе я не совсем понимаю. У меня есть следующий способ воспроизведения клипа.

    public class AudioPlayer {

    ..... 

        public void play(float gain) throws LineUnavailableException, IOException {
            this.changeVol(gain);
            clip.start();
            System.out.println("played");
            /*
            to see that clip.start() was
            executed successfully without throwing any exceptions
            */
        }
    }

    public class Speaker {

    ......

        public static void play(String path)throws UnsupportedAudioFileException, IOException, LineUnavailableException {

            AudioPlayer AP = new AudioPlayer(path, Effect);
            audio.add(AP);
            if (!paused) {
                AP.play(Options.volumeSetting[Effect]);
            }
        }

    }

Это установлено, чтобы играть каждый раз, когда щелчок левой кнопкой мыши реагировал на одну из кнопок следующим образом

    public void respond() {
    responded = true;

    if(soundFile != null) {
            try {
                Speaker.play(soundFile);
            } catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) {

                e.printStackTrace();
            }
        }
    } 

Проблема, с которой я столкнулся, заключается в том, что иногда вызывается вышеуказанный метод ответа, и "играющий" печатается на терминале, а звук на самом деле не воспроизводится.

что я не понимаю, так это то, что это происходит довольно регулярно в отношении того, какой тип кнопки вызывает этот метод ответа, хотя существует только один метод, который фактически вызывает этот метод ответа.

ниже приведены места, где вызывается вышеуказанный метод:

    public class SimpleButton extends GameObject {
        .....
        public boolean tick() {

            if(this.isMousedOver() && Controller.LeftMouse.isPressed() && 
    !Controller.LeftMouse.isResponded()) {
                Controller.LeftMouse.respond();
                return true;
            }

            return false;
        }
    }

это корневой класс кнопок, от которого наследуются все типы кнопок. каждый случай простой кнопки (исключая ее подклассы) воспроизводит звук 100% времени, когда она нажата

    public class ThreeStateButton extends SimpleButton{
        ......

    public boolean tick() {

            if (index == Clicked) {
                return !t.tick();
            }

            if (super.tick()) {
                index = Clicked;
                t = new Timer(Idle_Time);
            } else if (isMousedOver()) {
                index = Moused;
            } else {
                index = Idle;
            }

            return false;
        }

    }

ThreeStatesButton, с другой стороны, воспроизводит звук каждые 30 или около того щелчков, даже если строка "воспроизведена" печатается при каждом нажатии.

    public class ToggleButton extends SimpleButton {

    ......

        public boolean tick() {

            if(super.tick()) {
                if(++index >= models.length) {
                    index = 0;
                }

                this.m = models[index];
                return true;
            }

            return false;
        }

    }

ToggleButton, хотя и выходит из SimpleButton и использует очень похожий код, звук воспроизводится 100% времени.

Я не мог понять, что вызывает это, так как оба типа кнопок подкласса вызывают метод tick() SimpleButton, который вызывает оба метода response при нажатии, а затем им всем удалось вывести "Play", однако только он ThreeStateButton не издает никаких звуков. Я что-то упускаю?

0 ответов

Другие вопросы по тегам