在Android中将WAV文件转换为矢量
Posted
技术标签:
【中文标题】在Android中将WAV文件转换为矢量【英文标题】:convert WAVE file into vectors in Android 【发布时间】:2014-04-23 12:20:41 【问题描述】:我正在寻找一种将 Wave 文件转换为数字列表的方法,以使结果向量相互关联(就像您在 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++ 中做到这一点?我真的不知道如何开始。
【问题讨论】:
【参考方案1】:WAVE 文件格式相当简单,特别是如果您对线性 PCM 编码数据感兴趣。格式说明可从各种来源获得,例如 here 和 here。
使用这些,您应该能够解码:
标头(“RIFF”块) “fmt”块包含各种信息,例如每个样本的字节数、通道数(即单声道、立体声或更多)、采样率等。 以及“数据”块,如果您想查看主要内容,以便创建类似 MATLAB 的向量。如果您处理的是单通道(即单声道)WAVE 文件,则数据解码起来相当简单。然后样本数应该对应于(给或取几个字节用于填充)数据块的大小除以每个样本的字节数(每个样本的位数可从“fmt”块中获得) .样本整数到 [0-1] 浮点值的映射可以通过乘以一个常数来完成(例如,1.0/128 表示每个样本 1 字节)。
对于多通道 WAVE 文件,请记住通道数据是交错的(例如,左/右样本 1、左/右样本 2、...)
另请注意,有许多教程/示例随处可见(例如 this sample in C 或 this sample in Java),以及可以用作起点的各种开源声音库。
【讨论】:
谢谢。如果我通过声音发送波形文件,您是否知道智能手机 ADC 是否可以解码波形文件? 不是 Android API 专家,但请查看 SoundPool 和 MediaPlayer 以获得高级 API、AudioTrack(参见 ***.com/questions/7372813/… 和 ***.com/questions/3925030/…)以获得样本缓冲区级别 API,或 OpenSL 和 NDK(参见audioprograming.wordpress.com/2012/03/03/…) 用于更低级别的原生 API。但是将 raw 波形文件直接发送到 ADC 不太可能(如某些链接中所述)。以上是关于在Android中将WAV文件转换为矢量的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 或 C++ 中将压缩的 wav 文件转换为未压缩的 wav 文件的最简单方法是啥?
在 Javascript 中将 32 位 WAV 转换为 16 位 WAV