我正在寻找一种将Wave文件转换为数字列表以使相关 vector 互相关的方法(例如在MATLAB上读取wave文件时获得的数字)
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编码数据感兴趣。可以从各种来源获得格式的说明,例如herehere

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

  • header (“RIFF”块)
  • “fmt”块包含各种信息,例如每个样本的字节数,通道数(即,单声道,立体声或更多),采样率等。
  • 和“数据”块,如果要创建一个类似MATLAB的 vector ,您首先要看一下。

  • 如果要处理单通道(即单声道)WAVE文件,则数据非常容易解码。然后,样本数应对应于数据块的大小除以(取或填充几个字节)除以每个样本的字节数(可从“fmt”块中获得每个样本的位数) 。样本整数到[0-1]浮点值的映射可以通过乘以一个常数来完成(例如,每个样本1字节为1.0 / 128)。

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

    还要注意,周围有许多教程/示例(例如this sample in Cthis sample in Java),以及各种开源声音库,您可以以此为起点。

    08-28 13:23
    查看更多