2013-01-02 3 views
9

ich eine WAV-Datei durch AudioInputStream in ein Byte-Array lesen,Muss ich mich um Big Endian und Little Endian kümmern, wenn ich Daten über AudioInputStream lese?

AudioInputStream audiofile = AudioSystem.getAudioInputStream(f); 
    byte[] audio=new byte[numberofframes*framesize]; 
    int bytes=audiofile.read(audio); 

muss ich unter Berücksichtigung der Bytes einer Probe anzuordnen, dass die Daten in Little-Endian angeordnet ist oder nicht die AudioInputStream es für mich tun?

+0

liest du aus einer Datei? –

+0

ja ich bin durch den JFilechooser, Datei f = choooser.getSelectedFile(); –

+0

'framesize' Was ist der Wert davon? Wenn '1', ist Endian nicht relevant. Wenn '4', ist es. –

Antwort

1

Big-versus Little-Endian ist wichtig, wenn die Daten in mehr als einem Byte codiert sind, z. B. Bit-Tiefen von 16 oder mehr, unabhängig von der Anzahl der Kanäle. Java ordnet die PCM-Bytes nicht automatisch in einer Standardreihenfolge an, sondern akzeptiert sie.

Das folgende ist das deutlichste, am besten geschriebene einzelne Abschnitt der Java-Audio-Tutorials, imho und deckt im Zusammenhang Frage Formate und die Umwandlungen:

http://docs.oracle.com/javase/tutorial/sound/converters.html

+0

Also sagst du, das Byte-Array wird formatierte Audiodaten haben, d. H. In Little Endian, die ich selbst konvertieren muss, um die Samples zu lesen? –

+0

Ausgabezeilen können entweder Big- oder Little-Endian sein, ja? Wenn Sie den entgegengesetzten Typ eingeben, bin ich mir zu 90% sicher, dass Sie die Bytes vor der Ausgabe austauschen müssen. Aber es wird wahrscheinlich einen Konverter dafür geben, also müssen Sie Ihre Hände nicht notwendigerweise auf der Byte-Ebene schmutzig machen. Haben Sie sich den Link angesehen, den ich gesendet habe? Ich bin nicht sicher, wie passend der Begriff "formatierte Audiodaten" für PCM-Daten ist. Wenn die Codierung 16 Bit oder mehr ist, müssen die Bytes unabhängig voneinander in der einen oder anderen Reihenfolge sein. Ich denke nicht, dass der AudioInputStream "kümmert", es bringt nur rohe Bytes von PCM. –

Verwandte Themen