Search code examples
javaaudiowavjavasound

Get byte stream from an audio file?


Is there any way to get audio stream from an audio file (wav file in particular) in Java?

I am trying to get the stream of a particular interval i.e from startTime to endTime where startTime is not zero. For example, to get the audio stream from 5 sec to 10 sec (5 sec duration) of a 20 sec long audio file.

How to do that?


Solution

  • You can do this with the standard Java sound library: javax.sound.sampled.

    Reading .wav files has been well covered here, as well as how to convert bytes to the corresponding frames. If you check the "Related" on the right, you will find info on how to read audio data, one buffer's worth at a time, and how to iterate through those buffers and convert the bytes to PCM data.

    Assuming you know the frame rate (e.g., 44100 fps) it then just becomes a matter of counting bytes or frames of audio data. At stereo, 16-bit encoding at 44100 fps, for example, each frame consists of 4 bytes, so byte (5 * 4 * 44100) would be the start of the 5 second point, and (10 * 4 * 44100) would be the 10 second spot.

    The java sound tutorials are a tough read. The following link has a very useful code example under the header "Reading Sound Files". http://docs.oracle.com/javase/tutorial/sound/converters.html

    There's a comment line that reads "// Here, do something useful with the audio data that's now in the audioBytes array..."

    That's where you would count your bytes, and assemble the PCM data from bytes.