unity3D学习之音频基础原理-audio菜鸟笔记3
2017-08-07 20:39
302 查看
当在做录音、变声、保存等功能时,那些代码看得我一头雾水,所以总觉得要懂一点基本原理和算法才行。
计算机保存音频之采样率
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个。
我这里的知识点不完整,只挑了自己看懂的来记,要看完整的可以打开以下链接:
原文链接:http://blog.sina.com.cn/s/blog_6b87c7eb010182hs.html。
链接2:http://tieba.baidu.com/p/1868393695。
计算机保存音频之采样率
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个。
我这里的知识点不完整,只挑了自己看懂的来记,要看完整的可以打开以下链接:
原文链接:http://blog.sina.com.cn/s/blog_6b87c7eb010182hs.html。
链接2:http://tieba.baidu.com/p/1868393695。
相关文章推荐
- unity3D学习之音频测试-audio菜鸟笔记4
- unity3D学习之音频播放 、实时变声简化版-audio菜鸟笔记5
- unity3D学习之音频数据的采集要点-audio菜鸟笔记6
- unity3D学习之声音的采集与处理-audio菜鸟笔记1
- unity3d基础学习笔记16:C#Socket应用
- 学习笔记之javaweb基础:JSP的HelloWorld及其运行原理
- 【华为网赛学习笔记第二日】【01】服务器操作系统基础原理(下)
- unity3d基础学习笔记1:监视面板与基本组件
- jdk的配置和JVM内部原理 java 基础学习笔记 第一天
- FFmpeg基础库编程开发学习笔记——音频常见格式及字幕格式
- Audio驱动开发 之 音频链路学习笔记
- 视音频技术零基础学习笔记(三)及解码程序添加注释
- 【华为网赛学习笔记第一日】【01】服务器操作系统基础原理
- unity3d基础学习笔记2:脚本篇
- Unity3D笔记(一)基础知识学习笔记
- FFmpeg学习笔记001_视音频基础知识
- unity3d基础学习笔记3:坐标
- 微信小程序学习笔记(十八)audio音频
- 【Unity3D插件】NGUI基础学习笔记
- Javascript基础学习笔记(菜鸟必看篇)