【发布时间】:2013-09-25 04:57:38
【问题描述】:
有没有办法从 Java 中的音频文件(尤其是 wav 文件)中获取音频流?
我正在尝试获取特定间隔的流,即从startTime 到endTime,其中startTime 不为零。例如,要获取 20 秒长的音频文件的 5 秒到 10 秒(5 秒持续时间)的音频流。
怎么做?
【问题讨论】:
有没有办法从 Java 中的音频文件(尤其是 wav 文件)中获取音频流?
我正在尝试获取特定间隔的流,即从startTime 到endTime,其中startTime 不为零。例如,要获取 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
【讨论】: