有没有办法从Java中获取音频文件(特别是wav文件)的音频流?
我正在尝试获取特定时间间隔的流,即从startTime
到endTime
,其中startTime
不为零。例如,将音频流从20秒长的音频文件中提取5秒到10秒(持续5秒)。
怎么做?
答案 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