Hallo sehr geehrtes Forum,
wie der Titel schon sagt, habe ich ein Problem beim Ausblenden von Sounds.
Ich möchte die Triebwerkgeräusche eines Raumschiffs beim Drücken einer Taste einblenden, loopen und beim Loslassen wieder ausblenden. Das Einblenden und Loopen löse ich im Moment folgendermaßen:
Die WAV-Datei ist eine Sekunde lang und hat von 0,0s bis 0,1s ein Fade-In und von 0,8s bis 1,0s ein Fade-Out
Das Fade-Out wollte ich dann so lösen:
Und nun zu meinem Problem. Der ganze Vorgang geht ungefähr einmal gut (manchmal auch zweimal oder keinmal), und dann fliegt mir folgende Exception um die Ohren, sobald ich die Taste für die Triebwerke loslasse:
Der Fehler tritt allerdings nicht auf, wenn ich "Sound.start();" in der Fade-Out Funktion auskommentiere. Ein "Thread.sleep(10);" davor zu setzen, hat auch nichts gebracht. Genausowenig war es von Vorteil einfach nur "Sound.loop(0);" zu nutzen, wie es in der Java-Dokumentation zu "Clip.loop(int count)" vorgeschlagen wird.
Ich hab auch schon versucht, ein Fade-Out über (FloatControl)Sound.getControl(FloatControl.Type.MASTER_GAIN) zu lösen, allerdings klingt der sehr stufig für die kurze Zeit.
Könnt ihr mir weiterhelfen?
Vielen Dank schonmal,
ruerob
P.S.: Der Wert hinter "illegal len:" ist immer ein anderer, aber immer negativer Natur.
wie der Titel schon sagt, habe ich ein Problem beim Ausblenden von Sounds.
Ich möchte die Triebwerkgeräusche eines Raumschiffs beim Drücken einer Taste einblenden, loopen und beim Loslassen wieder ausblenden. Das Einblenden und Loopen löse ich im Moment folgendermaßen:
Java:
public static void loop(){
Sound.stop();
Sound.setLoopPoints(Sound.getFrameLength()/10,Sound.getFrameLength()/10)*8);
Sound.setFramePosition(0);
Sound.loop(Clip.LOOP_CONTINUOUSLY);
}
Die WAV-Datei ist eine Sekunde lang und hat von 0,0s bis 0,1s ein Fade-In und von 0,8s bis 1,0s ein Fade-Out
Das Fade-Out wollte ich dann so lösen:
Java:
public static void fadeOut(){
Sound.stop();
Sound.setFramePosition(Sound.getFrameLength()/10)*8);
Sound.start();
}
Und nun zu meinem Problem. Der ganze Vorgang geht ungefähr einmal gut (manchmal auch zweimal oder keinmal), und dann fliegt mir folgende Exception um die Ohren, sobald ich die Taste für die Triebwerke loslasse:
Java:
Exception in thread "Direct Clip" java.lang.IllegalArgumentException: illegal len: -46322
at com.sun.media.sound.DirectAudioDevice$DirectDL.write(Unknown Source)
at com.sun.media.sound.DirectAudioDevice$DirectClip.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Der Fehler tritt allerdings nicht auf, wenn ich "Sound.start();" in der Fade-Out Funktion auskommentiere. Ein "Thread.sleep(10);" davor zu setzen, hat auch nichts gebracht. Genausowenig war es von Vorteil einfach nur "Sound.loop(0);" zu nutzen, wie es in der Java-Dokumentation zu "Clip.loop(int count)" vorgeschlagen wird.
Ich hab auch schon versucht, ein Fade-Out über (FloatControl)Sound.getControl(FloatControl.Type.MASTER_GAIN) zu lösen, allerdings klingt der sehr stufig für die kurze Zeit.
Könnt ihr mir weiterhelfen?
Vielen Dank schonmal,
ruerob
P.S.: Der Wert hinter "illegal len:" ist immer ein anderer, aber immer negativer Natur.
Zuletzt bearbeitet: