Java звуковая библиотека

Возникает ошибка при попытке воспроизвести звук с помощью библиотеки javax.sound.sampled. Прошу помощи

Класс звука:

package com.company;

import java.io.File;
import java.io.IOException;
import javax.sound.sampled.*;

public class Audio {

    private String track; // адрес трека(файла)
    private Clip clip = null;// ссылка на объект класса
    private FloatControl volumeC = null;// контролер громкости
    private double wt; //уровень громкости
    private boolean pl_audio;// воспроизведение звука

    private long timer_p = 0;// начальное время для таймера звучания
    private long timer_f = 0;// конечное время звучания
    private long timer_d;// (количество миллисекунд) длительность трека

    //конструктор (адрес файла, уровень громкости)
    public Audio( String track, double wt){
        this.track = track;
        this.wt =wt;
        this.pl_audio = false;
    }
    //конструктор (адрес файла, уровень громкости, кол.милсек звук трек)
    public Audio( String track, double wt,long timer_d){
        this.timer_d = timer_d;
        this.track = track;
        this.pl_audio = false;
        this.wt =wt;
    }



    public void sound() {
        File f = new File(this.track);// передаем звуковой файл в f
        //поток для записи и считывания
        AudioInputStream tr = null; // обьект потока AudioInputStream пуст
        try {
            tr = AudioSystem.getAudioInputStream(f); // Получаем AudioInputStream (нужный файл)
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            clip = AudioSystem.getClip();//Получаем реализацию интерфейса Clip
            clip.open(tr); //Загружаем наш звуковой поток в Clip
            //Получаем контроллер громкости
            volumeC = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);

            clip.setFramePosition(0); //устанавливаем указатель на старт
            clip.start(); //Поехали!!!

        } catch (LineUnavailableException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // пероигрывать звук объкта одиночное проигрывание с stop()
    public void play() {
        File f = new File(this.track);// передаем звуковой файл в f
        //поток для записи и считывания
        AudioInputStream tr = null; // обьект потока AudioInputStream пуст
        try {
            tr = AudioSystem.getAudioInputStream(f); // Получаем AudioInputStream (нужный файл)
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            clip = AudioSystem.getClip();//Получаем реализацию интерфейса Clip
            clip.open(tr); //Загружаем наш звуковой поток в Clip
            //Получаем контроллер громкости
            volumeC = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);

            if(!this.pl_audio) {
                clip.setFramePosition(0); //устанавливаем указатель на старт
                clip.start(); //Поехали!!!
                this.pl_audio = true; // играет
            }

        } catch (LineUnavailableException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    //стоп
    public void stop() {

        clip.stop();
        clip.close(); //Закрываем
        this.pl_audio = false;
    }

    //уровень громкости
    public void setVolume() {
        if (wt<0) wt = 0;
        if (wt>1) wt = 1;
        float min = volumeC.getMinimum();
        float max = volumeC.getMaximum();
        volumeC.setValue((max-min)*(float)wt+min);
    }

    // повтор (работает с треками запущенными методом play())
    public void repeat() {
        if (this.pl_audio)
            clip.loop(10); //повторить n раз
    }
    // таймер звука ( для треков запущ. play() и конструктор с timer_d)
    public void timer_play (){
        if (timer_p == 0) { //если таймер не запущен
            timer_p = System.currentTimeMillis();// получаем текущее время милсек
            timer_f = timer_p + timer_d; // конечное время трека
        }
        if(timer_f<=System.currentTimeMillis()) { //если время звучания меньше текущювремени
            this.stop();//стоп трек
            timer_p=0;// обнуляем счетчик
        }
    }
}

Попытка воспроизвести звук:

soundTest = new Audio("open.wav",0.68);
buttonUA.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                soundTest.sound();
                soundTest.setVolume();
                frame.setVisible(false);
                GameField app = new GameField();
            }
        });

error


Ответы (1 шт):

Автор решения: Agzam4

Недавно(2-3 месяца назад) все-таки получилось добавить музыку в проекты, написал класс, может будет работать, попробуй:

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

public class Sounds {
            
    private static Clip getClip() {
        try {
            return AudioSystem.getClip();
        } catch (LineUnavailableException e) {
        }
        return null;
    }
    private static Clip clip = getClip();
    
    public static void stop() {
        clip.close();
        clip.stop();
        clip.flush();
    }
    
    public static void play(String path, int loops) {
        AudioInputStream ais;
        try {
            ais = AudioSystem.getAudioInputStream(
                    new File(path).getAbsoluteFile());
        } catch (UnsupportedAudioFileException | IOException e2) {
            return;
        }
        if(clip.isOpen())
            return;
        try {
            try {
                clip.open(ais);
                clip.loop(loops);
                clip.start();
            } catch (IOException e) {
            }
        } catch (LineUnavailableException e1) {
        }
    }   
}

Что бы запустить:

Sounds.play("open.wav", -1);

второе значение - это сколько раз повторить (-1 для бесконечного цикла)

Что бы остановить:

Sounds.stop();

→ Ссылка