0

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

我正在尝试获取特定间隔的流,即 from startTimeto endTimewherestartTime不为零。例如,要获取 20 秒长的音频文件的 5 秒到 10 秒(5 秒持续时间)的音频流。

怎么做?

4

2 回答 2

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 数据。

于 2013-09-25T21:18:49.507 回答
0

这个应该可以帮助您:

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

于 2013-09-25T05:01:14.000 回答