Ab sofort benutze ich AudioPlayer, um Soundeffekte für mein Spiel zu erstellen, und ich habe Mühe, eine einfache Möglichkeit zu finden, das Audio zurückzusetzen, bevor ich es wieder spiele. Ab sofort lade ich den AudioStream komplett neu, hier ist mein Code, Anregungen sind willkommen.Bessere Methode zum Zurücksetzen von Java AudioStream
package resources;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import javax.sound.sampled.Clip;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
public class Audio {
private static HashMap<String, AudioStream> sounds = new HashMap<String, AudioStream>();
private static HashMap<String, Long> times = new HashMap<String, Long>();
Clip c;
public static AudioStream getAudio(String s){
if(sounds.containsKey(s))
return sounds.get(s);
return null;
}
public static void loadAllAudio(){
File f = new File("res/sounds");
String[] files = f.list();
for(String s:files){
if(s.endsWith(".wav")){
loadAudio(s);
System.out.println("Loaded Audio: "+s);
}
}
}
public static double getSoundLength(String sound){
return getAudio(sound).getLength()/192000.0;
}
public static void playSound(String name){
resetSound(name);
times.put(name, System.nanoTime());
AudioPlayer.player.start(sounds.get(name));
}
public static void resetSound(String name){
loadAudio(name);
}
public static void stopSound(String sound){
AudioPlayer.player.stop(sounds.get(sound));
times.put(sound, System.nanoTime());
}
private static void loadAudio(String name){
try {
File f = new File("res/sounds/"+name);
sounds.put(name, new AudioStream(new FileInputStream(f)));
times.put(name, 0L);
} catch (Exception e) {}
}
public static double getTime(String sound) {
long time = times.get(sound);
if(time==0)
return 0;
return (System.nanoTime()-time)/1E9;
}
}
Die Linie Ich mag würde ersetzen ist:
public static void playSound(String name){
---------resetSound(name);--------- THIS LINE
times.put(name, System.nanoTime());
AudioPlayer.player.start(sounds.get(name));
}
'sun.audio. *' Klassen sind nicht Teil der offiziellen API und sollten nicht verwendet werden. Betrachten Sie etwas wie "Clip", sehen Sie sich die Informationen im Tag [javasound] (https://stackoverflow.com/tags/javasound/info) für Details an. –
@ greg-449 Wenn Sie dies als eine Lösung postet, werde ich es als die richtige Lösung markieren, wenn Sie überhaupt Rep zu wollen, wenn nicht, dann danke für die Antwort. Es funktioniert jetzt und hilft sehr! – Kore