码迷,mamicode.com
首页 > 其他好文 > 详细

音频处理 (一) 音频文件

时间:2017-09-11 10:21:55      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:head   字节   opened   channels   标准   rowspan   重要   idt   def   

音频文件

   音频文件是对声音进行数字转换之后存放的数据文件,了解音频数据必须先知道几个重要概念。

1. 采样:对声音信息录入时,行进的最小操作单位,一般一次采样具有左右2个声道,每个声道用1或2个字节来存储;

这样采样的量化位数是8位,或16位(样本位宽),量化位数越高声音音质越好;就像11位电话号码表示的号码比7位要多得多;

2. 采样频率:每秒采样次数,单位Hz,一般的音频文件有11.025kHz22.05kHz44.10kHz等;显然,这种模-数信息的转换,每秒采样次数越多,声音就越精确;

3. 码率:每秒编码的bit数,单位是kb/s;计算方式:位宽×声道数×采样频率;(单位是bit不是字节)

4. 声道数,固定值为1-单声道,或者2-双声道,双声道时,每个采样样本中包含左声道、右声道的音频数据,因此两者的数据是交错排列的;

 

 (一)Wave 格式

    WAVE是微软开发的声音文件格式,用于保存Windows平台的音频信息资源,文件后缀名*.wav;支持多种压缩算法、多种音频位数、采样频率和声道;

    标准的wav文件采用44.1kHz采样频率,16位量化位数,声音文件质量几与CD相当;Wave格式不对源数据做任何处理,如果源数据是无损的,编码后的Wav文件也是无损的;如果源数据是有损的,编码后的Wav文件也是有损的;

1. Wave文件的构成:

RIFF 标 志 4B "RIFF"
数据大小 4B -
格式 4B "WAVE"
fmt 标志 4B "fmt "
结构体大小 4B 16/18
结构体 16B/18B  
data 标志 4B "data"
声音数据大小 4B -
data -

 

 

 

 

 

 

 

 

 

 

 

 

 

技术分享

2. Wave文件的详细结构:

// RIFF 标准媒体流文件头
struct Riff_Header
{
char szRiffId[4]; // ‘R‘,‘I‘,‘F‘,‘F‘ DWORD dwRiffSize; // Size, 除了这 8 个字节之外,文件剩余大小,等于文件总字节数-8 char szRiffFormat[4]; // ‘W‘,‘A‘,‘V‘,‘E‘ }; struct Fmt_Block { char szFmtId[4]; // ‘f‘, ‘m‘, ‘t‘,‘ ‘ DWORD dwFmtSize; // Size 为 16 或 18 WORD wFormatTag; // 编码方式,一般为 0x0001 WORD wChannels; // 声道数 1--单声道 2--双声道 DWORD dwSamplesPerSec; // 采样频率 /Hz DWORD dwAvgBytesPerSec; // 每秒字节数 WORD wBlockAlign; // 数据块对齐单位(每个采样需要的字节数) WORD wBitsPerSample; // 每个采样需要的 bit // WORD wBits; // 可能有可能没有,由dwFmtSize字段决定 }; //Fact_Block 块,有些 wav 文件中没有 struct Fact_Block { char szFactId[4]; // ‘f‘,‘a‘,‘c‘,‘t‘ DWORD dwFactSize; // }; //数据块 struct Data_Block { char szDataId[4]; //‘d‘,‘a,‘,‘t‘,‘a‘ DWORD dwDataSize; // 音频数据大小 //data ... };

 说明:

1. RIFF块里面的 dwRiffSize 表示的是整个文件除开头8个字节之外的大小0x24 0xCD 0x01 0x00,即 118,052 Byte,通过文件属性查得文件大小是118,060Byte;

2. dwFmtSize 0x10 0x00 0x00 0x00,即为16;fmt块的剩余部分是一个波形信息结构,是微软定义的:

技术分享
/*
 *  extended waveform format structure used for all non-PCM formats. this
 *  structure is common to all non-PCM formats.
 */
typedef struct tWAVEFORMATEX
{
    WORD        wFormatTag;         /* format type */
    WORD        nChannels;          /* number of channels (i.e. mono, stereo...) */
    DWORD       nSamplesPerSec;     /* sample rate */
    DWORD       nAvgBytesPerSec;    /* for buffer estimation */
    WORD        nBlockAlign;        /* block size of data */
    WORD        wBitsPerSample;     /* number of bits per sample of mono data */
    WORD        cbSize;             /* the count in bytes of the size of */
                                                                                      /* extra information (after cbSize) */
} WAVEFORMATEX, *PWAVEFORMATEX, NEAR *NPWAVEFORMATEX, FAR *LPWAVEFORMATEX;
WAVEFORMATEX

3. Data块:dwDataSize表示音频数据的大小,0x00 0x01 0xCD 0x00,即118,016,略小于118,052,说明文件末有部分无效数据

 

 (二) MP3格式

     MP3格式(待续 ...)

 

 

 

 

 

音频处理 (一) 音频文件

标签:head   字节   opened   channels   标准   rowspan   重要   idt   def   

原文地址:http://www.cnblogs.com/mwwf-blogs/p/7502355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!