• 一个例子讲解wav头文件 stm32声音程序 录音和播放 wav


    下面我们一wav头文件来分析一下:

    下面是双声道的,16位,48000采样录的wav文件:

    打开属性,能看到的有用信息只有比特率了:

    上图的比特率就是

    wav头文件里的bitrate:

    1536kbps=量化采样点*位深*声道数

    这个比特率是按照 '位' 来算的,,,480 000 * 16 * :每秒内消耗多少位

                                                   

    用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

     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  • 相关阅读:
    JVM GC VS .Net GC
    ASP.NET Core 2.1对GDPR的支持
    老桂.net core系列课程
    微软一年一度的开发者大会,给你带来全新的开发者体验
    为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 webservice/API
    2018 .NET开发者调查报告: .NET Core 是怎么样的状态
    业务配置开发平台qMISPlat 2.0 产品介绍
    .NET Core 2.1 Preview 2发布
    .NET 应用架构电子书中文版
    Ooui.Wasm:浏览器中的.NET
  • 原文地址:https://www.cnblogs.com/chulin/p/8918957.html
Copyright © 2020-2023  润新知