gpt4 book ai didi

java - 从 MP3 文件中获取解码后的字节流

转载 作者:行者123 更新时间:2023-12-02 03:38:45 26 4
gpt4 key购买 nike

我想对 MP3 文件进行 FFT。为此,我想从该文件格式中提取解码后的字节流(我相信它称为原始 PCM 数据)。对于此任务,我使用 jLayer 1.0.1 库。这里是提取每帧的 PCM 数据的代码:

        short[] pcmOut = {};
Bitstream bitStream = new Bitstream(new FileInputStream(path_to_mp3_file));
boolean done = false;
while (!done) {
Header frameHeader = bitStream.readFrame();
if (frameHeader == null) {
done = true;
} else {
Decoder decoder = new Decoder();
SampleBuffer output = (SampleBuffer) decoder.decodeFrame(bitStream.readFrame(), bitStream); //returns the next 2304 samples
short[] next = output.getBuffer();
pcmOut = concatArrays(pcmOut, next);
//do whatever with your samples
}
bitStream.closeFrame();
}
for (int i = 0; i < pcmOut.length; i++) {
if (pcmOut[i] != 0) {
System.out.println(pcmOut[i]);
}
}

问题是变量 short[] pcmOut 仅针对有效的 MP3 文件用零填充。造成这个问题的根本原因是什么?

最佳答案

检查一下似乎与解码器有关;除此之外,每次创建一个新的解码器都是一种浪费,这似乎是此实现中的一个基本问题,因为它似乎返回到第一帧,而恒定的解码器似乎保持跟踪:

Decoder decoder = new Decoder();
while (!done) {
Header frameHeader = bitStream.readFrame();
if (frameHeader == null) {
done = true;
}
else {
SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitStream);
short[] next = output.getBuffer();
for(int i=0; i<next.length; i++) System.out.print(" "+next[i]);
pcmOut = concatArrays(pcmOut, next);
//do whatever with your samples
}

关于java - 从 MP3 文件中获取解码后的字节流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37110763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com