Get byte stream from an audio file?

偶尔善良 提交于 2019-12-12 04:54:47

问题


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?


回答1:


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.




回答2:


This one should help You:

Java Wav File IO http://www.labbookpages.co.uk/audio/javaWavFiles.html



来源:https://stackoverflow.com/questions/18996526/get-byte-stream-from-an-audio-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!