Problemas wav jogar em Java
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.
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