一个例子讲解wav头文件 stm32声音程序 录音和播放 wav
下面我们一wav头文件来分析一下:
下面是双声道的,16位,48000采样录的wav文件:
打开属性,能看到的有用信息只有比特率了:
上图的比特率就是
wav头文件里的bitrate:
1536kbps=量化采样点*位深*声道数
这个比特率是按照 '位' 来算的,,,480 000 * 16 * 2 :每秒内消耗多少位
用GoldWave软件打开,滑动滚轮进行放大:
200us总共输出了20个数据,,但是每个数据是16位(因为消耗两个8位得到的数据)
这20个数据是由40个8位的音频数据组成的.
200us消耗了40个数据
20us消耗4个数据
消耗4个数据就是完成一个 '音' 单元的播放 一个音,也就是图中的一个阶梯
所以产生一个 '音' 需要20us [也就是 一个音对应一个中断,当产生一个中断的时候,让两个DAC分别播放出去一个阶梯]
1秒产生500 000 个约等于480 000个 '音' :频率是根据 '音' 的设置,,一个 '音' 可能等于好几个音频数据
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
实际上这个音频的定时器是这样设置的
通过仿真得到:
转换成十进制 48000
bitrate=0x00177000 ------转换成十进制就是1536000
得到:
samplerate=48000 #在我们编写程序的时候,这个是中断设定的参数
这个是WAV头文件里得到的
按照程序里计算,48000就相当于20.833us
取整就相当于20us
20us播放两个声道,每个声道是由两个数据得到的,,
也就是20us消耗4个数据
这个结果,和我们用软件打开的查看一样的.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
用 UltraEdit软件打开
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这是百度文库的一篇文章,讲解的很清楚
https://wenku.baidu.com/view/45960348551810a6f424863f.html
上面的例子属于16位立体声道,,,
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
下面是摘自网上的:可以不用看,有些事不对的:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
推荐文档:http://www.sohu.com/a/115830046_119709
通过调整计时器,,每25us控制ADC进行一次采集,,,,采集的数据交给DMA,,,,然后DMA给一个数组缓存,,,之后存入SD卡
如果25us采集一个
采样率就是SampleRate=40000; 其值为通道数×每秒样本数×每样本的数据位数/8
怎么得到的呢?
采样率实际上意义是每秒采集的位数:
那么就是 25us采1个8位数,,,那么100us采集4个8位数,,,,1000 000us 就是1s采集 40 000个8位数
所以就是采样率为40000
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
相关文章
- 小程序页面之间的跳转方法
- 微信小程序_(组件)canvas画布
- C#.NET常见问题(FAQ)-程序如何把窗体文件从从一个项目中复制到另一个项目
- 给VC程序换皮肤
- D语言,环境安装于Helloword程序
- Zabbix监控之检测程序日志中错误发生的次数
- C#的换行符和回车符在程序语句中如何表示?
- ArcObject开发,程序编译通过,但无法启动的解决
- 使用java程序对新浪微博的内容进行语义分析
- 微信小程序解读学习
- 会员管理小程序实战开发教程(六)-会员查询功能
- 写了一个实用的图像放大缩小程序,但是动画GIF转换后不会显示了,只有第一帧
- 微信小程序 - 返回上一个历史页面
- 习题 12.4 写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上。。。
- 习题 4.6 有一个函数:。。。 写程序,输入x的值,输出y相应的值。
- 练习1-14 编写一个程序,打印输入中各个字符出现频度的直方图(水平)
- 练习 用C语言编写一个程序,解释高等数学中的映射、单射和一一映射,并表示为函数。
- Java //PP1.7 编写一个程序,用“*“字符显示一棵树的轮廓。
- 程序猿这个称谓,是一个荣誉
- 一脸懵逼学习Hive的安装(将sql语句翻译成MapReduce程序的一个工具)
- 基础的重要性(程序猿之路)
- 程序人生:你在迷茫的时候该干什么,5年后才不会后悔?