Obtain wave pattern of a audio file in Java
Asked Answered
T

1

6

I'm wondering how I may obtain musical information such as amplitude from a audio file?

Suppose we have a raw audio file, what I want to extract data from the file which allows me to generate a curve such as http://www1.icsi.berkeley.edu/Speech/mr/nearfar.html. Once I have obtained this curve, I will perform FFT, etc.

enter image description here

I have been trying to search for solutions in Java Sound, but what I only know so far is that I can pour the data into byte[] using AudioInputStream. But how do I translate that byte[] into a double[] which contains actual information about the sound? In this case, the values in the double[] represent amplitude.

Could anyone please provide a solution to solve this problem in Java?

Teutonism answered 23/10, 2012 at 6:30 Comment(0)
N
5

Typical wav file is 16 bit little endian, so you can take each two consecutive bytes, b1 and b2, and get the amplitude as follows:

(double) (b2 << 8 | b1 & 0xFF) / 32767.0;

if the input is stereo, first two bytes would be left channel, then two bytes for right channel.

Narial answered 23/10, 2012 at 6:37 Comment(1)
@BjornRoche: the OP said talked about using AudioInputStream, it skips the header and gives only valid PCM bytes.Narial

© 2022 - 2024 — McMap. All rights reserved.