G
Gast
Gast
Hi Leute,
ich habe folgendes Problem das ich seit Tagen nicht lösen kann:
Es geht um das Abspielen von .wav Dateien. Dies funktioniert zwar schon recht gut, allerdings
wenn ich ein Sample schnell hintereinander abspiele (z.B. bei jedem Mausklick soll eine(die selbe) .wav Datei abgespielt
werden) funktioniert dies nicht. Das Sample kann nur im Abstand von ca. 1 Sekunde abgespielt werden.
Ich hoffe ihr könnt mir helfen.
Hier ist der Code zum Laden der Datei und zum Abspielen:
ich habe folgendes Problem das ich seit Tagen nicht lösen kann:
Es geht um das Abspielen von .wav Dateien. Dies funktioniert zwar schon recht gut, allerdings
wenn ich ein Sample schnell hintereinander abspiele (z.B. bei jedem Mausklick soll eine(die selbe) .wav Datei abgespielt
werden) funktioniert dies nicht. Das Sample kann nur im Abstand von ca. 1 Sekunde abgespielt werden.
Ich hoffe ihr könnt mir helfen.
Hier ist der Code zum Laden der Datei und zum Abspielen:
Code:
private void loadClip(String pFileName) {
try {
//Verknüpfen des Audio-Streams mit der Clip Datei
stream = AudioSystem.getAudioInputStream(getClass().getResource(pFileName));
//Ermittle Format des Streams
AudioFormat format = stream.getFormat();
//Konvertiere ULAW/ALAW Format ins PCM format
if((format.getEncoding() == AudioFormat.Encoding.ULAW) ||
(format.getEncoding() == AudioFormat.Encoding.ALAW)) {
//Lege neues PCM-Format an
AudioFormat newFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits()*2,
format.getChannels(),
format.getFrameSize()*2,
format.getFrameRate(),true);
//Setzte das neue Format
stream = AudioSystem.getAudioInputStream(newFormat, stream);
LoggerAccess.getActiveLogger().writeInfo("Konvertiertes Audioformat:" + newFormat);
format = newFormat;
}
//Sammle Information für die DataLine
DataLine.Info info = new DataLine.Info(Clip.class, format);
//Sound-System muss die Data-Line unterstützen
if(!AudioSystem.isLineSupported(info)) {
LoggerAccess.getActiveLogger().writeWarning("");
return;
}
//Hole die Line-Resource des Clips
clip = (Clip) AudioSystem.getLine(info);
//Lausche auf Clip-Events
clip.addLineListener(this);
//Öffne die Sound-Datei als einen Clip
clip.open(stream);
//Stream wird nicht mehr benötigt
stream.close();
//Überprüfe die Länge des Clips (< 1sec kann zu Problemen führen)
checkDuration();
} catch (UnsupportedAudioFileException ae) {
LoggerAccess.getActiveLogger().writeError(fileName + " - Datei wird nicht unterstützt!");
} catch (LineUnavailableException ne) {
LoggerAccess.getActiveLogger().writeError("Keine Audio-Line für " + fileName + "vorhanden!");
} catch (IOException ie) {
LoggerAccess.getActiveLogger().writeError(fileName + " konnte nicht gelesen werden!");
} catch (Exception e) {
LoggerAccess.getActiveLogger().writeError(fileName + " - Es ist ein Fehler aufgetreten!");
}
}
//Spiele Clip ab
public void play(boolean toLoop) {
if(clip != null) {
isLooping = toLoop;
clip.start();
}
}