Audio Android java获取wav文件帧

Audio Android java获取wav文件帧,audio,java,Audio,Java,我需要从wav文件中获取波形数据,但我的代码返回的波形不正确(我将结果与fl studio的波形进行比较) 这是我的代码: path = "/storage/emulated/0/FLM User Files/My Samples/808 (16).wav"; waveb = FileUtil.readFile(path); waveb = waveb.substring((int) (waveb.indexOf("data") + 4), (int)(

我需要从wav文件中获取波形数据,但我的代码返回的波形不正确(我将结果与fl studio的波形进行比较) 这是我的代码:

path = "/storage/emulated/0/FLM User 
Files/My Samples/808 (16).wav";
waveb = FileUtil.readFile(path);
waveb = waveb.substring((int) (waveb.indexOf("data") + 4), (int)(waveb.length()));
byte[] b = waveb.getBytes();

for(int i= 0; i < (int)(b.length/4); i++) {
        map = new HashMap<>();
        map.put("value", String.valueOf((long)((b[i*4] & 0xFF) + 
            ((b[i*4+1] & 0xFF) << 8))));
        map.put("byte", String.valueOf((long)(b[i*4])));
        l.add(map);
    }
listview1.setAdapter(new 
Listview1Adapter(l));
( (BaseAdapter)listview1.getAdapter()).notifyDataSetChanged();
path=“/storage/emulated/0/FLM User
Files/My Samples/808(16).wav”;
waveb=FileUtil.readFile(路径);
waveb=waveb.子字符串((int)(waveb.indexOf(“数据”)+4),(int)(waveb.长度());
字节[]b=waveb.getBytes();
对于(int i=0;i<(int)(b.length/4);i++){
map=新的HashMap();
map.put(“value”,String.valueOf((长)((b[i*4]&0xFF))+

((b[i*4+1]&0xFF)我不确定我能帮上什么忙,因为我已经知道了我的想法,但这可能会激发你寻找解决方案的一些想法

在我看来,您假设声音文件是16位立体声,little endian,并且您只尝试检查立体声帧的一个音轨。您能确认这一点吗

此计划至少有一种可能会出错:.wav头的长度可能是奇数字节,因此您可能无法正确解析帧边界。作为一个实验,您可以尝试在引用b[]数组时添加不同的增量?例如,b[i4+1]和b[i4+2],而不是b[i4]和b[i4+1]。这不会解决解析.wav头的一般问题,但至少可以让您更接近了解情况

看起来Java的
AudioInputStream
在Android中是不可访问的,我所有询问是否有Android等价物的搜索结果都没有得到回答

我曾经使用过原始PCM的播放,但我不知道有哪种Android等效方法可以读取wav文件。class和read()方法看起来很有趣,因为read方法将PCM数据存储在一个短数组中,但我从未使用过它们,而且它们似乎是硬编码到麦克风上进行输入的

过去有一个谷歌集团:andraudio@googlegroups.com.IDK,如果它还在的话。我过去经常去那里,偶尔问一些事情

也许你可以从或使用一些代码?后者使用OpenAL,用于跨平台开发,Android是目标平台之一。我没有研究过这两个问题


如果你真的找到了答案,把它作为一个解决方案发布就太好了。这似乎是一个许多人试图解决并放弃的问题。

很抱歉,你不能简单地打开一个
wav
文件,读取一些字节,然后期望得到一个波形。如果AV文件是PCM编码的,这可能会起作用,但wav文件是一个可以使用c的容器尽管有很多不同的格式,即使是PCM也有多种变体。请为自己准备一个库,该库可以正确读取WAV文件,并根据使用的编码器对包含的数据进行解码(如果不支持解码器,则会引发错误)谢谢,你也知道这样的库,我第二天一直在寻找现成的解决方案,在stackoverflow.com上询问库建议被认为是离题的。只需使用你最喜欢的搜索引擎,搜索
JAVA read wav PCM
,或者查看以下页面:不幸的是,这对我没有帮助,我仍然没有找到找到解决办法。