当在做录音、变声、保存等功能时,那些代码看得我一头雾水,所以总觉得要懂一点基本原理和算法才行。

计算机保存音频之采样率
1、某些音频可以用数学数学公式合成。
2、采样频率-->每隔一段时间在波形上取一个点(采样频率越高,还远度越高)。
3、100Hz-->每秒取样100次。
4、声音的频率-->震动幅度的空间坐标(-1.0f-1.0f),100Hz-->1秒震动了100次(有100个波形)-->采样率=2*声音频率(至少2个点才能记录1个波形)-->香农采样定理。


压缩算法
1、(wav格式)5分钟的音乐20多M(音乐文件一般都经过压缩,wav是无损压缩)。
2、MPEG Lager3是MP3的压缩算法。
3、有大神把各种音色打包记录下来(可以利用生成音频文件)。
4、wav文件用ADPCM或PCM压缩算法格式。


关于WAV文件格式
我们从度娘那复制一段

偏移地址 字节数 类型 内容 
00H~03H 4 字符 资源交换文件标志(RIFF) 
04H~07H 4 长整数 从下个地址开始到文件尾的总字节数 
08H~0BH 4 字符 WAV文件标志(WAVE) 
0CH~0FH 4 字符 波形格式标志(FMT) 
10H~13H 4 整数 过滤字节(一般为00000010H) 
14H~15H 2 整数 格式种类(值为1时,表示数据为线性PCM编码) 
16H~17H 2 整数 通道数,单声道为1,双声音为2 
18H~1BH 4 长整数 采样频率 
1CH~1FH 4 长整数 波形数据传输速率(每秒平均字节数) 
20H~21H 2 整数 数据的调整数(按字节计算) 
22H~23H 2 整数 样本数据位数



AAC


音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率(单位为s)


一帧 1024个 sample。采样率 Samplerate 44100KHz,每秒44100个sample,


所以 根据公式


     音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率


(NOTE:该时间可作解码时间的参考,解码时间应偏差确保在该时间的一定范围,异常的话,做一定的异常处理)


如,当前AAC一帧的播放时间是= 1024*1000000/44100= 22.32ms(单位为ms)




当前AAC一帧的播放时间是= 1024/44100 = 0.02232 s(单位为秒)=22.32ms(单位为ms)


反过来,如当想通过音频缓冲多少ms来计算实际应缓冲多少个音频帧时,可下计算:


比如对48K缓冲300ms需要多少个buffer,


buffer = 一秒内能产生多少个音频帧(48000/1024) 乘以 时间比例(300/1000) = (48000*300)/(1024*1000) = 14.0625个。