有没有办法从 Java 中的音频文件(特别是 wav 文件)中获取音频流?
我正在尝试获取特定间隔的流,即 from startTime
to endTime
wherestartTime
不为零。例如,要获取 20 秒长的音频文件的 5 秒到 10 秒(5 秒持续时间)的音频流。
怎么做?
您可以使用标准 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 数据。
这个应该可以帮助您:
Java Wav 文件 IO http://www.labbookpages.co.uk/audio/javaWavFiles.html