一個例子講解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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM