Android获取WAV音频时长
2018-03-06 20:12
806 查看
1.简介
wav(Waveform Audio File Format)是微软公司开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范。WAV是最接近无损的音乐格式,所以文件大小相对也比较大。 项目中需要获取wav音频文件的音频时长,因为之前获取gif文件的帧间隔是通过解析gif文件格式获取的,所以这次自然而然就想到通过解析wav文件格式获取音频时长。2.wav文件格式解析
学习自:http://soundfile.sapp.org/doc/WaveFormat/。图1如图1所示,wav文件一般由3个区块组成,包括RIFF块、fmt块、data块。
图2
2.1 RIFF区块
1.RIFF区块以“RIFF”为标识,见图2第一个红色框标识。2.如图1所示RIFF包括ChunkID、ChunkSize、Format,具体的偏移地址、字节数及端序(大端或小端)见图1。2.2 fmt区块
1.fmt区块以“fmt”为标识,见图2第二个红色框标识。2.fmt区块包括ID、Size(该区块数据的长度)、AudioFormat(音频格式)、NumChannels(声道数)、SampleRate(采样率)、ByteRate(每秒数据字节数)、BlockAlign、BitsPerSample(采样位数)等,具体的偏移地址、字节数及端序(大端或小端)见图1。2.3 data区块
1.data区块以“data”为标识,见图2第三个红色框标识。2.data区块包括ID、Size(音频数据的长度)、data(音频数据)。3.计算时长
data区块里面的size表示所有音频数据的长度,fmt区块里面的ByteRate表示每秒数据字节数。所以音频时长可以通过(size/ByteRate)得到。4.代码
/** * 获取wav音频时长 ms * @param wavdata wav音频文件字节数组 * @return */ public static long g 4000 etWavLength(byte[] wavdata) { long start = SystemClock.uptimeMillis(); if (wavdata != null && wavdata.length > 44) { int byteRate = bytes2ToInt(wavdata, 28, 31); int waveSize = bytes2ToInt(wavdata, 40 , 43); TestLog.d(TAG, TestLog.isDebug() ? "getWavLength:waveSize=" + waveSize + ",byteRate=" + byteRate : ""); TestLog.d(TAG, TestLog.isDebug() ? "getWavLength:len=" + waveSize * 1000 / byteRate : ""); return waveSize * 1000 / byteRate; } TestLog.d(TAG, TestLog.isDebug() ? "getWavLength:time=" + (SystemClock.uptimeMillis() - start) : ""); return 0; }说明:用到的(28,31)、(40,43)是(偏移地址,偏移地址+字节数)。具体可在图1中查到。
6.参考
1.http://soundfile.sapp.org/doc/WaveFormat/ 2.https://www.jianshu.com/p/947528f3dff8相关文章推荐
- 安卓AudioRecord实现录音和播放,可以暂停和获取声音的大小,格式为amr和wav,可以对音频进行加密
- Android中VideoView中音频焦点的获取源码分析(不同sdk版本有的有获取音频焦点操作有的没有)
- android获取音频、视频、图片信息
- Android-获取手机上的图片、视频、音频
- android获取音频、视频、图片信息
- android音频编辑之音频转换PCM与WAV
- android 怎么获取所有含有音频文件的文件夹
- Android音频开发(4):如何存储和解析wav文件
- android获取音频、视频、图片信息
- Android获取SD卡视频音频文件
- Android中实现多段wav音频文件拼接
- Android获取SD卡视频音频文件
- Android获取视频音频的时长的方法
- [Android] 获取音频输出getOutput
- Android wav音频解码混音算法的JNI实现
- android-从音频数据库获取音乐数据
- android获取多媒体库的视频、音频、图片
- Android获取视频音频的时长的方法
- Android学习之SeekBar(控制wav音频的声音)
- 【Android开发经验】如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库