在Android中将WAVE文件转换为向量

在Android中将WAVE文件转换为向量,android,matlab,audio,signal-processing,wave,Android,Matlab,Audio,Signal Processing,Wave,我正在寻找一种将波形文件转换成数字列表的方法,以交叉关联生成的向量(就像在MATLAB上读取波形文件时得到的数字) 0.6653 -0.8445 0.9589 -0.9999 0.9643 -0.8547 0.6797 -0.4525 0.1907 0.0858 -0.3557 0.5983 -0.7951 0.9309 -0.9953 0.9835 -0.8962 0.7402 -0.5275 0.2742 在Android甚至C/C++中有没有办法做到这一点?我真的不知道如何开始。WAVE

我正在寻找一种将波形文件转换成数字列表的方法,以交叉关联生成的向量(就像在MATLAB上读取波形文件时得到的数字)


0.6653
-0.8445
0.9589
-0.9999
0.9643
-0.8547
0.6797
-0.4525
0.1907
0.0858
-0.3557
0.5983
-0.7951
0.9309
-0.9953
0.9835
-0.8962
0.7402
-0.5275
0.2742


在Android甚至C/C++中有没有办法做到这一点?我真的不知道如何开始。

WAVE文件格式相当简单,特别是如果您对线性PCM编码数据感兴趣的话。格式说明可从各种来源获得,如和

使用这些,您应该能够解码:

  • 标题(“RIFF”块)
  • “fmt”块,包含各种信息,如每个采样的字节数、通道数(即单声道、立体声或更多)、采样率等
  • 以及“数据”块,如果你想看的主要内容是为了创建一个类似MATLAB的向量
如果你处理的是单通道(即单声道)波形文件,那么数据的解码就相当简单。然后,样本数应与数据块的大小除以每个样本的字节数(每个样本的位数可从“fmt”区块获得)相对应(为填充提供或获取几个字节)。样本的整数到[0-1]浮点值的映射可以通过乘以常数来完成(例如,1.0/128表示每个样本1字节)

对于多通道波形文件,请记住通道数据是交错的(例如,样本1左/右,样本2左/右,…)


另外请注意,有许多教程/示例(如或)和各种开源音库,您可以将它们作为起点。

谢谢。你知道如果我通过声音发送,智能手机ADC是否可以解码波形文件吗?不是安卓API专家,但请检查SoundPool&MediaPlayer以获得高级API,AudioTrack(请参阅和)以获得示例缓冲区级API,或者OpenSL&NDK(请参阅)以获得更低级别的本机API。但是将原始波形文件直接发送到ADC不太可能工作(如某些链接中所述)。