Pregunta

Estoy tratando de jugar un

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

(1) y aquí (2) .

El primer enfoque funciona, pero no quiere depender de cosas sun.*. Los segundos resultados en tan sólo algunas tramas principales que se está reproduciendo, que suena más como un clic. no puede ser un problema IO como estoy jugando desde un ByteArrayInputStream.

Los PLZ compartir sus ideas sobre qué podría suceder esto. TIA.

¿Fue útil?

Solución

No estoy seguro de por qué el segundo enfoque se inicia vinculada a otro hilo; Creo que el audio se reproducirá en su propio hilo de todos modos. Está el problema de que la aplicación termina antes de que el clip ha terminado de jugar?

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();
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top