从音频文件中获取字节流?

时间:2013-09-25 04:57:38

标签: java audio wav javasound

有没有办法从Java中获取音频文件(特别是wav文件)的音频流?

我正在尝试获取特定时间间隔的流,即从startTimeendTime,其中startTime不为零。例如,将音频流从20秒长的音频文件中提取5秒到10秒(持续5秒)。

怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用标准Java声音库执行此操作:javax.sound.sampled。

这里已经很好地阅读了.wav文件,以及如何将字节转换为相应的帧。如果您检查右侧的“相关”,您将找到有关如何读取音频数据的信息,一次一个缓冲区的值,以及如何迭代这些缓冲区并将字节转换为PCM数据。

假设您知道帧速率(例如,44100 fps),那么它就变成了计算音频数据的字节或帧的问题。例如,在44100 fps的立体声,16位编码中,每帧由4个字节组成,因此字节(5 * 4 * 44100)将是5秒点的开始,而(10 * 4 * 44100)将是10秒钟。

java声音教程是一个艰难的阅读。以下链接在“阅读声音文件”标题下有一个非常有用的代码示例。 http://docs.oracle.com/javase/tutorial/sound/converters.html

有一条评论专栏 “//在这里,对现在在audioBytes数组中的音频数据做一些有用的事情......”

这就是你计算字节的地方,并从字节组装PCM数据。

答案 1 :(得分:0)

这个应该帮助你:

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