2012-05-19 37 views
6

im khá mới với java ... tôi muốn vẽ biểu đồ tần suất/thời gian hoặc hình ảnh mẫu từ tệp wav. để bắt đầu tôi đang đấu tranh để có được mảng dữ liệu thô từ tệp Wav sử dụng AudioInputStream cũng tham chiếu từ Reading wav file in Java. Tôi cũng đã thử lớp WavFile tham chiếu http://www.labbookpages.co.uk/audio/javaWavFiles.html nhưng khi thử nghiệm, tôi không thể tìm thấy các gói chính xác để đáp ứng lỗi "WavFile" - "không thể tìm thấy biểu tượng". nhập khẩu java.io. * được cung cấp; cho mẫu đó không thỏa mãn điều này ...Vẽ đồ thị/Vẽ một tệp Wav java

để nhắc lại tôi muốn lấy dữ liệu thô ở định dạng mảng của tệp Wav.

tôi rất thích bất kỳ ví dụ nhỏ nào về điều này, vì tôi học được từ các ví dụ dễ dàng hơn nhiều! cảm ơn vì thời gian của bạn

+0

bạn vẫn cần giải pháp ?? tôi có câu trả lời đầy đủ. – Mihir

Trả lời

3

Skip đầu tiên 44 byte từ file wav (tiêu đề), sau đó đọc dữ liệu sử dụng chức năng này:

private static double readLEShort(RandomAccessFile f) { 
try { 
    byte b1 = (byte) f.read(); 
    byte b2 = (byte) f.read(); 
    return (double) (b2 << 8 | b1 & 0xFF)/32767.0; 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
return 0; 
} 

Một giá trị cho mỗi kênh. Điều này sẽ cho bạn số từ -1 đến 1, mà bạn có thể vẽ trên biểu đồ của mình. Tôi hy vọng rằng có thể làm việc

+0

OP vẫn cần chuyển đổi thành tần số. Đối với điều đó, liên kết này có thể hữu ích - http://stackoverflow.com/questions/636686/signal-processing-library-in-java –

+0

Tôi không hiểu rõ lắm, bạn có nói cách sử dụng chức năng với tập tin? –

+0

@Andfoy điều này khá hữu ích mặc dù tôi không có ý tưởng làm thế nào để đưa nó vào một mảng ... – Mitchb

0

Trong số Java DSP collection có một chương trình thử nghiệm có tên là TestSignalPlot.java có thể hiển thị các tệp WAV. Nó sử dụng AudioIo.loadWavFile() để tải nội dung tập tin WAV vào bộ nhớ và lớp SignalPlot để hiển thị tín hiệu âm thanh. Tất cả các lớp là một phần của bộ sưu tập nguồn mở.