gpt4 book ai didi

java - Android:读取wav文件并显示其值

转载 作者:太空狗 更新时间:2023-10-29 14:24:29 24 4
gpt4 key购买 nike

您好,我正在尝试读取 wav 文件中的数据,以便将其绘制为波形。以下是我试过的代码:

    try {
RandomAccessFile file = new RandomAccessFile(myFile,"r");
while(file.read()>-1){
byte b1 = (byte) file.read();
byte b2 = (byte) file.read();
Log.d(TAG,"DATA:"+ (double) (b2 << 8 | b1 & 0xFF) / 32767.0);
}
file.close();

} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

我的输出最初是一个介于 -1 和 +1 之间的值,但后来它只给出 DATA:0,它看起来像是一个无限循环,并且有一个强制关闭。根据我的说法,循环应该在到达文件末尾时终止。任何人都可以建议循环的一些终止条件。请帮忙....提前致谢...

最佳答案

此代码段存在以下问题:

1) 在 while 循环中使用 file.read()>-1 您仍然读取字节,因此此代码在每次迭代时读取 3 个字节。

2) WAV 文件可能是(并且经常是)带有 WAV block 的 RIFF 容器。此外,不能保证值以整数编码(我见过 WAV 中的浮点编码)。字节顺序似乎没问题,但容器的元信息也会被打印出来。

我不是 Java 专家,但是用字节 (-1, -1) 运行表达式给出的值非常接近 0。

要检查文件终止,请检查是否有任何字节为 -1:while ((b1 != -1) && (b2 != -1))

此外,从intbyte 的转换似乎是wrong : byte 是有符号的,所以你会得到 -128 到 127 之间的值,这不是你想要的 (0..255)。

关于java - Android:读取wav文件并显示其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13744385/

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