Как я могу улучшить свой звуковой модуль на Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу улучшить свой звуковой модуль на Java?

Сообщение Anonymous »

Я разрабатываю 2D-игру на Java, и иногда у меня возникают проблемы со звуком. На данный момент я не использую звук во многих частях, кроме музыки, при ходьбе, при атаке и при получении урона врагами.
Оставляю вам код класса звука и ошибку У меня есть:

Код: Выделить всё

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;
}
}
Ошибка:

Код: Выделить всё

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)
Я пробовал добавлять исключения или искать другую библиотеку, но не знаю, какая из них поможет лучше. Я также не знаю, почему накапливается так много тем. Как упоминается в ошибке, это поток 40, и я не думаю, что использую этот класс во многих местах.


Подробнее здесь: https://stackoverflow.com/questions/793 ... le-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»