Ich überlasse Ihnen den Code der Tonklasse und den Fehler Ich habe:
Code: Select all
public class SoundThread extends Thread {
private String filename;
private Clip clip;
private float volumeScale;
private boolean isPlaying;
public SoundThread(String filename) {
try {
this.filename = filename;
clip = AudioSystem.getClip();
}
catch (LineUnavailableException ex) {
Logger.getLogger(SoundThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void run() {
isPlaying = true;
try {
InputStream in = getClass().getResourceAsStream("/sonidos/" + filename + ".wav");
if (in != null) {
AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(in));
clip = AudioSystem.getClip();
clip.open(ais);
clip.start();
while (clip.isActive()) {
Thread.sleep(80);
}
}
else {
System.err.println("No se pudo cargar el recurso de sonido: " + filename);
}
}
catch (UnsupportedAudioFileException | IOException | LineUnavailableException | InterruptedException e) {
e.printStackTrace();
} finally {
isPlaying = false;
}
}
public void reproducir(float volumen) {
if (!isPlaying && clip != null && !clip.isActive()) {
new Thread(() -> {
try {
InputStream in = getClass().getResourceAsStream("/sonidos/" + filename + ".wav");
if (in != null) {
AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(in));
clip = AudioSystem.getClip();
clip.open(ais);
ajustarVolumen(clip, volumen);
clip.start();
}
else {
System.err.println("No se pudo cargar el recurso de sonido: " + filename);
}
}
catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) {
e.printStackTrace();
}
}).start();
}
}
public void repetir(float volumen) {
if (!isPlaying && clip != null && !clip.isActive()) {
new Thread(() -> {
try {
InputStream in = getClass().getResourceAsStream("/sonidos/" + filename + ".wav");
if (in != null) {
AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(in));
clip = AudioSystem.getClip();
clip.open(ais);
ajustarVolumen(clip, volumen);
clip.start();
clip.loop(Clip.LOOP_CONTINUOUSLY);
}
else {
System.err.println("No se pudo cargar el recurso de sonido: " + filename);
}
}
catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) {
e.printStackTrace();
}
}).start();
}
}
private void ajustarVolumen(Clip clip, float volumen) {
if (clip != null)
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
float range = gainControl.getMaximum() - gainControl.getMinimum();
float gain = (range * volumen) + gainControl.getMinimum();
gainControl.setValue(gain);
}
}
public long getDuracion() {
return clip.getMicrosecondLength();
}
public void detener() {
if (clip != null && clip.isRunning()) {
clip.stop();
isPlaying = false;
}
}
public void cambiarArchivo(String nuevoArchivo) {
detener();
this.filename = nuevoArchivo;
}
}
Code: Select all
Exception in thread "Thread-40" java.lang.IllegalArgumentException: Unsupported control type: Master Gain
at java.desktop/com.sun.media.sound.AbstractLine.getControl(AbstractLine.java:149)
at principal.sonido.SoundThread.ajustarVolumen(SoundThread.java:116)
at principal.sonido.SoundThread.lambda$reproducir$0(SoundThread.java:68)
at java.base/java.lang.Thread.run(Thread.java:842)