Pergunta

Eu estou tentando desempenhar um

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

arquivo como descrito aqui (1) e aqui (2) .

A primeira abordagem funciona, mas eu não quero depender de coisas sun.*. O segundo resultados em apenas alguns principais quadros sendo jogado, que soa mais como um clique. não pode ser um problema IO como eu estou jogando de uma ByteArrayInputStream.

Plz partilhar as suas ideias sobre por que isso pode acontecer. TIA.

Foi útil?

Solução

Eu não tenho certeza por isso que a segunda abordagem é ligada ao inicia outro segmento; Eu acredito que o áudio será reproduzido em seu próprio segmento de qualquer maneira. O problema é que os seus acabamentos aplicativo antes de o clipe tem jogo terminado?

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top