На данный момент я использую AudioPlayer для создания звуковых эффектов для своей игры, и я изо всех сил пытаюсь найти простой способ сбросить звук, прежде чем снова начну воспроизводить его. На данный момент я просто перезагружаю AudioStream полностью, heres мой код, любые предложения приветствуются.Лучший способ сброса 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;
}
}
Линия Я хотел бы заменить это:
public static void playSound(String name){
---------resetSound(name);--------- THIS LINE
times.put(name, System.nanoTime());
AudioPlayer.player.start(sounds.get(name));
}
'sun.audio. *' Классы не являются частью официального API и не должны использоваться. Посмотрите на использование чего-то типа 'Clip', посмотрите информацию в теге [javasound] (https://stackoverflow.com/tags/javasound/info) для получения более подробной информации. –
@ greg-449, если вы опубликуете это как решение, я помечаю его как правильное решение, если вы вообще не хотите репутации, если нет, то спасибо за ответ. Он работает сейчас и помогает много! – Kore