2017-06-18 1 views
0

En JDK8, je n'arrive pas à extraire des données utiles de l'AudioInputStream créé par un SoftSynthesizer.Java Gervill Software Synth ne fonctionne pas

AudioSynthesizer s = new SoftSynthesizer(); 

    AudioFormat format = new AudioFormat(44100, 16, 2, true, false); 
    AudioInputStream stream = s.openStream(format, null); 

    s.getChannels()[0].noteOn(60, 100); 

    while (stream.available() >= 0) { 
     byte[] b = new byte[2]; 
     stream.read(b); 
     System.out.println(b[0] << 8 | b[1]); 
    } 

    s.getChannels()[0].noteOff(60); 

Cependant, println() montre seulement 0, il n'y a pas de données audio sortant du AudioInputStream. Est-ce que je fais quelque chose de mal? Ou Gervill est-il obsolète à partir du JDK 8?

Répondre

0

Il semble que j'ai trouvé la réponse. vous devez lire exactement un nombre entier d'images de l'AudioInputStream ou il retournera toujours zéro. Dans mon cas, la lecture de 4 octets a résolu le problème car l'AudioFormat est 16 bits (2 octets), 2 canaux, donc c'est 4 octets/image.

changement

byte[] b = new byte[2] 

à

byte[] b = new byte[4] 

En fait, un multiple de nombre entier de 4 fonctionnera. 4, 8, 12, 16, 20, etc.