Frage

Ich versuche, ein spielen

PCM_UNSIGNED 11025.0 Hz, 8 bit, mono, 1 bytes/frame

Datei wie beschrieben hier (1) und hier (2) .

Der erste Ansatz funktioniert, aber ich will nicht auf sun.* Sachen abzuhängen. Die zweiten Ergebnisse in nur einigen führenden Frames gespielt, das klingt eher wie ein Klick. Kann nicht ein IO-Problem sein, da ich aus einem ByteArrayInputStream bin zu spielen.

Plz teilen Sie Ihre Ideen auf, warum könnte dies passieren. TIA.

War es hilfreich?

Lösung

Ich bin nicht sicher, warum der zweite Ansatz, den Sie einem anderen Thread zu Beginn verbunden sind; Ich glaube, der Ton wird ohnehin in einem eigenen Thread abgespielt werden. Ist das Problem, dass Ihre Anwendung vor dem Clip endet beendet spielen?

import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.LineEvent.Type;

private static void playClip(File clipFile) throws IOException, 
  UnsupportedAudioFileException, LineUnavailableException, InterruptedException {
  class AudioListener implements LineListener {
    private boolean done = false;
    @Override public synchronized void update(LineEvent event) {
      Type eventType = event.getType();
      if (eventType == Type.STOP || eventType == Type.CLOSE) {
        done = true;
        notifyAll();
      }
    }
    public synchronized void waitUntilDone() throws InterruptedException {
      while (!done) { wait(); }
    }
  }
  AudioListener listener = new AudioListener();
  AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(clipFile);
  try {
    Clip clip = AudioSystem.getClip();
    clip.addLineListener(listener);
    clip.open(audioInputStream);
    try {
      clip.start();
      listener.waitUntilDone();
    } finally {
      clip.close();
    }
  } finally {
    audioInputStream.close();
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top