audioInputStream.getFrameLength()返回-1
时间: 2024-03-24 19:40:55 浏览: 150
如果 `audioInputStream.getFrameLength()` 返回-1,这意味着音频流的长度未知。这通常会发生在尚未处理完整个音频文件时,或者当音频文件格式不支持获取帧长度信息时。
您可以尝试使用 `AudioSystem` 类的 `getAudioFileFormat()` 方法来获取音频文件的格式,并检查是否支持获取帧长度信息。以下是一个示例代码:
```java
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import java.io.File;
import java.io.IOException;
public class AudioDurationExample {
public static void main(String[] args) throws IOException {
// 从文件中读取PCM数据
File file = new File("your_pcm_file.pcm");
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
// 获取音频文件格式
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
AudioFormat format = fileFormat.getFormat();
// 检查是否支持获取帧长度信息
if (audioInputStream.getFrameLength() == AudioSystem.NOT_SPECIFIED) {
System.out.println("Frame length unknown. Calculating duration using file size.");
// 计算播放时长(以秒为单位)
long fileSize = file.length();
int frameSize = format.getFrameSize();
double frameRate = format.getFrameRate();
double durationInSeconds = (fileSize / (frameSize * frameRate));
System.out.println("Duration: " + durationInSeconds + " seconds");
} else {
// 获取音频流的帧长度
long frames = audioInputStream.getFrameLength();
// 计算播放时长(以秒为单位)
double durationInSeconds = (frames + 0.0) / format.getFrameRate();
System.out.println("Duration: " + durationInSeconds + " seconds");
}
}
}
```
如果音频流的帧长度仍然为-1,那么您可以尝试使用文件大小、帧大小和帧速率来计算播放时长。但这种方法仅在使用固定比特率的音频文件时有效。
阅读全文