當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]S3C2416裸機(jī)開發(fā)系列十九_Fatfs下播放錄音wav音頻文件標(biāo)簽:wavfatfs音頻播放s3c2416sd驅(qū)動2014-06-11 09:551938人閱讀評論(0)收藏舉報分類:s3c2416裸機(jī)開發(fā)(24)版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)

S3C2416裸機(jī)開發(fā)系列十九_Fatfs下播放錄音wav音頻文件

標(biāo)簽:wavfatfs音頻播放s3c2416sd驅(qū)動

2014-06-11 09:551938人閱讀評論(0)收藏舉報

分類:

s3c2416裸機(jī)開發(fā)(24)

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。

目錄(?)[+]

S3C2416裸機(jī)開發(fā)系列十九Fatfs下播放錄音wav音頻文件

象棋小子 1048272975

對于多媒體資源,一般都是以文件的形式存儲在固化存儲器中。Fatfs所支持的fat32為windows支持的文件系統(tǒng),因此在嵌入式系統(tǒng)中采用Fatfs文件系統(tǒng)可極大地擴(kuò)展系統(tǒng)的應(yīng)用。例如,把計算機(jī)上圖片,音頻,視頻,文本等資源直接拷貝到嵌入式系統(tǒng)中的固化存儲器中,在系統(tǒng)中即可直接應(yīng)用這些資源。把嵌入式系統(tǒng)中錄制的音頻、視頻直接保存成一定的格式,在計算機(jī)上可直接播放處理,把傳感器采集的數(shù)據(jù)保存成txt或dat文件,在計算機(jī)上通過處理生成數(shù)據(jù)曲線分析等。筆者此處就wav音頻文件的播放與錄音進(jìn)行簡單的介紹。

1. wav音頻格式

Wave是錄音時用的標(biāo)準(zhǔn)windows文件格式,文件擴(kuò)展名為”.wav”,數(shù)據(jù)本身的格式為PCM或壓縮型,它是由微軟與IBM聯(lián)合開發(fā)的用于音頻數(shù)字存儲的標(biāo)準(zhǔn),采用RIFF文件格式結(jié)構(gòu)。

RIFF全稱資源互換文件格式,是windows下大部分多媒體文件遵循的一種文件結(jié)構(gòu),除了本文所說的波形格式數(shù)據(jù)(.wav),采用RIFF格式結(jié)構(gòu)的文件還有音頻視頻交錯格式(.avi)、位圖格式(.rdi)、MIDI格式(.rmi)、調(diào)色板格式(.pal)、多媒體電影(.rmn)、動畫光標(biāo)(.ani)。

RIFF結(jié)構(gòu)的基本單元為chunk,它的結(jié)構(gòu)如下:

struct chunk {

unsignedint id; /* 塊標(biāo)志 */

unsignedint size; /* 塊大小 */

unsigned chardata[size]; /* 塊內(nèi)容 */

}

Id為4個ascii字符組成,用來識別塊中所包含的數(shù)據(jù),如”RIFF”、”WAV ”、”data”、”fmt ”等;size是存儲在data域中數(shù)據(jù)的長度,不包括id與size域的大?。籨ata[size]為該塊保存的數(shù)據(jù),以字為單位排列。

wav音頻文件作為RIFF結(jié)構(gòu),其由若干個chunk組成,按照在文件中的位置包括:RIFF chunk,fmt chunk,fact chunk(可選),data chunk。所有RIFF結(jié)構(gòu)文件均會首先包含RIFF chunk,并指明RIFF類型,此處為”WAVE”。對于wav文件,在fmt chunk中指明音頻文件的信息,例如采樣位數(shù)、采樣頻率、聲道數(shù)、編碼方式等。對于壓縮型wav音頻,還會有一個fact chunk,用以指明解壓后音頻數(shù)據(jù)的大小,對于PCM非壓縮wav文件,并沒有該chunk。音頻數(shù)據(jù)保存在data chunk中,根據(jù)fmt chunk中指明的聲道數(shù)以及采樣位數(shù),wav音頻數(shù)據(jù)存放形式有不同的方式。

一個PCM格式的wav結(jié)構(gòu)定義Wav.h如下:

#ifndef __WAV_H__

#define __WAV_H__

#ifdef __cplusplus

extern "C" {

#endif

//資源互換文件格式RIFF,樹狀結(jié)構(gòu),基本單位是chunk,整個文件由chunk構(gòu)成

typedef struct RIFF_HEADER {

char Riff_ID[4];

unsigned int Riff_Size;//記錄整個RIFF文件的大小,除ID和Size這兩個變量

char Riff_Format[4];

} RIFF_HEADER;

typedef struct WAVE_FORMAT {

unsigned short FormatTag; //聲音的格式代號

unsigned short Channels; //聲音通道

unsigned int SamplesPerSec; //采樣率

unsigned int AvgBytesPerSec; //=采樣率*區(qū)塊對其單位

unsigned short BlockAlign; //區(qū)塊對其單位=每個取樣所需位數(shù)*聲音通道/8

unsigned short BitsPerSample; //每個取樣所需位數(shù)

} WAVE_FORMAT;

typedef struct FMT_CHUNK {

char Fmt_ID[4];

unsigned int Fmt_Size;//記錄fmt的大小

WAVE_FORMAT WaveFormat;

} FMT_CHUNK;

typedef struct DATA_CHUNK {

char Data_ID[4];

unsigned int Data_Size;//記錄data區(qū)的大小

} DATA_CHUNK;

typedef struct WAVE_HEADER {

RIFF_HEADER RiffHeader;

FMT_CHUNK FmtChunk;

DATA_CHUNK DataChunk;

} WAVE_HEADER;

#ifdef __cplusplus

}

#endif

#endif /*__WAV_H__*/

根據(jù)以上的wav結(jié)構(gòu)定義,一個錄音文件的wav文件頭可如下定義:

static WAVE_HEADER RecorderWaveHeader = {

'R', 'I', 'F', 'F',

sizeof(WAVE_HEADER) - 8,//整個wave文件大小,初始化值

'W', 'A', 'V', 'E',

'f', 'm', 't', ' ',

sizeof(FMT_CHUNK) - 8,

1,//編碼方式,線性PCM編碼

1,//單聲道

10000,//采樣率為10k

20000,//每個采樣2個字節(jié)

2,//每個采樣2個字節(jié)

16,//每個采樣需16位

'd', 'a', 't', 'a',

0, //data長度初始化為0

};

2. wav音頻文件的播放或錄音

sd卡由于其可插拔、靈活性好,通常應(yīng)用于設(shè)備的擴(kuò)展存儲應(yīng)用。計算機(jī)上wav音頻等文件可輕易地拷貝到fat32格式的sd卡上,在嵌入式系統(tǒng)中要使用sd卡,首先需實現(xiàn)sd卡驅(qū)動,這在前面的章節(jié)有詳細(xì)的介紹,此處不再詳述。fat32文件的讀寫還需要相應(yīng)文件系統(tǒng)的接口支持,此處選用Fatfs,對于不同的嵌入式系統(tǒng),這是需要移植的部分,關(guān)于s3c2416下Fatfs文件系統(tǒng)的移植在前面章節(jié)有詳細(xì)的介紹,此處不再詳述。從wav文件讀出音頻數(shù)據(jù)后(播放),還需要把音頻數(shù)據(jù)傳輸給聲卡,聲卡還原出聲音模擬信號,即可聽到聲音。音頻數(shù)據(jù)的處理需要用到音頻編解碼器,數(shù)據(jù)的傳輸也有一定的音頻總線要求,因此還需要音頻驅(qū)動的實現(xiàn),這部分在前面的章節(jié)有詳細(xì)的介紹,此處不再詳述。

3. 應(yīng)用實例

工程中利用串口對耳機(jī)音量進(jìn)行加大、調(diào)小,對Mic錄音進(jìn)行靈敏度的調(diào)節(jié),通過串口輸入進(jìn)行播放wav音頻或開始錄音。播放時實時顯示播放進(jìn)度并可按下’s’后停止播放,錄音時實時顯示錄音wav文件的大小并可按下’s’后停止錄音。

main.c的內(nèi)容如下:

#include"s3c2416.h"

#include"UART0.h"

#include"ff.h"

#include"diskio.h"

#include "RTC.h"

#include"Wav.h"

#include"IIS.h"

#include"IIC.h"

#include"WM8960.h"

staticWAVE_HEADER RecorderWaveHeader = {

'R', 'I', 'F', 'F',

sizeof(WAVE_HEADER) - 8,//整個wave文件大小

'W', 'A', 'V', 'E',

'f', 'm', 't', ' ',

sizeof(FMT_CHUNK) - 8,

1,//編碼方式,線性PCM編碼

1,//單聲道

10000,//采樣率為10k

20000,//每個采樣2個字節(jié)

2,//每個采樣2個字節(jié)

16,//每個采樣需16位

'd', 'a', 't', 'a',

0, //data長度初始化為0

};

// 音頻數(shù)據(jù)緩存20KB

unsigned charAudioBuffer[20*1024];

int main()

{

FATFS fs;

FIL file;

FRESULT Res;

unsigned int i;

unsigned int BufferLen;

unsigned char *pData;

WAVE_HEADER WaveHeader;

int ByteWrite, ByteRead;

unsigned char State;

unsigned char VolumeLevel;

unsigned short Command;

const char Path1[] = "test.wav";

const char Path2[] = "1.wav";

char FilePath[256];

unsigned int Size = 0;

unsigned int AudioSize = 0;

unsigned int TotalSize = 0;

RTC_Time Time = {

2014, 5, 22, 23, 00, 0, 5

};

RTC_Init(&Time); // RTC初始化

Uart0_Init(); // 串口初始化

IIC_Init(); //IIC初始化,音頻芯片控制

IIS_Init(); // IIS音頻接口初始化

WM8960_Init(); // 音頻編解碼器初始化

RTC_GetTime(&Time); // 顯示RTC時間

Uart0_Printf("Time: %4d/%02d/%02d%02d:%02d:%02drn", Time.Year,

Time.Month, Time.Day, Time.Hour,Time.Min, Time.Sec);

f_mount(&fs, "" , 0);

ByteRead = 0;

pData = (unsigned char *)0;

for (i=0; i

FilePath[i] = Path1[i];

}

State = 1; // 進(jìn)入播放test.wav狀態(tài)

while(1) {

switch (State) {

case 0: // 操作選擇

WM8960_HeadphoneStop();

WM8960_RecorderStop();

IIS_TxPause();

IIS_RxPause();

Uart0_SendString("rnSelect:rn"

"0: Play test.wavrn"

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉