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

3

你好,我正在尝试读取一个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个回答

1

这段代码存在以下问题:

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

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

我不是Java专家,但使用字节(-1,-1)运行您的表达式会得到一个非常接近0的值。

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

此外,从int转换为byte似乎错误:字节是有符号的,因此您将获得从-128到127的值,这不是您想要的(0..255)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接