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();
}
});
Ответы (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();
