2013-01-02 22 views
9

Tôi đang đọc một tập tin wav qua AudioInputStream vào một mảng byte,Tôi có cần phải quan tâm đến người dùng cuối lớn và nhỏ khi tôi đọc dữ liệu qua AudioInputStream không?

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

sao tôi cần phải sắp xếp các byte của một mẫu xem xét rằng các dữ liệu được sắp xếp theo little endian hay nào AudioInputStream làm điều đó cho tôi?

+0

được bạn đọc từ tập tin? –

+0

có Tôi đang thông qua JFilechooser, File f = chooser.getSelectedFile(); –

+0

'framesize' Giá trị của nó là gì? Nếu '1', endian không liên quan. Nếu '4', đúng vậy. –

Trả lời

1

Các vấn đề lớn và nhỏ nếu dữ liệu được mã hóa nhiều hơn một byte, ví dụ: độ sâu bit từ 16 trở lên, bất kể số kênh. Java không tự động sắp xếp các byte PCM theo thứ tự mặc định, nó chỉ chấp nhận chúng.

Sau đây là, viết tốt nhất phần đơn rõ ràng nhất của các hướng dẫn java âm thanh, IMHO, và bao gồm các vấn đề liên quan đến định dạng và chuyển đổi của họ:

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

+0

Vì vậy, bạn nói mảng byte sẽ có Dữ liệu âm thanh được định dạng tức là trong Little Endian mà tôi sẽ phải tự chuyển đổi để đọc các mẫu? –

+0

Các dòng đầu ra có thể là Big hoặc Little-Endian, phải không? Nếu bạn nhập kiểu đối diện, thì tôi chắc chắn 90% bạn sẽ phải thực hiện hoán đổi các byte trước khi xuất ra. Nhưng có khả năng sẽ có một công cụ chuyển đổi cho điều này, vì vậy bạn không nhất thiết phải có được bàn tay của bạn bẩn ở cấp độ byte. Bạn đã xem liên kết tôi đã gửi chưa? Tôi không chắc liệu thuật ngữ "Dữ liệu âm thanh được định dạng" thích hợp như thế nào là dành cho dữ liệu PCM. Nếu mã hóa là 16 bit trở lên, các byte phải theo thứ tự này hoặc thứ tự khác, bất kể. Tôi không nghĩ rằng AudioInputStream "quan tâm", nó chỉ mang lại các byte thô của PCM. –