新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 C/C++编程思想 』 → 常用语音编码的WAVE文件头格式剖析 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6084 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 常用语音编码的WAVE文件头格式剖析 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 常用语音编码的WAVE文件头格式剖析

    WAVE文件头作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。合理利用WAVE文件头可以更有效地进行语音解码。
      通常意义上说的语音编码都是指将8KHz采样、16比特量化的线性PCM语音信号压缩成其它格式的语音信号,解码时就将其它格式的语音信号变换成8KHz采样、16 比特量化的线性PCM语音信号。一般说来,这个转换过程比较复杂,费时费力。如果对其它格式的语音信号直接加上对应的WAVE文件头就不用这个转换过程,用微软自带的录音机就可解码语音。
      下面就分别剖析各种语音编码的WAVE文件头格式,用如下各个表(表1到表7)进行对比即可。
    表1 8KHz采样、16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节)
    偏移地址 字节数 数据类型 内容 文件头定义为
    00H   4   char   "RIFF"  char riff_id[4]="RIFF"
    04H   4   long int   文件总长-8 long int size0=文总长-8
    08H   8  char   "WAVEfmt " char wave_fmt[8]
    10H   4  long int   10 00 00 00H(PCM) long int size1=0x10
    14H   2  int   01 00H int fmttag=0x01
    16H   2   int   int channel=1 或2
    18H   4   long int   采样率 long int samplespersec
    1CH   4   long int   每秒播放字节数 long int bytepersec
    20H   2   int    采样一次占字节数 int blockalign=声道数*量化数/8
    22H   2   int    量化数  int bitpersamples=8或16
    24H   4   char   "data"  char data_id="data"
    28H   4   long int   采样数据字节数 long int size2=文长-44
    2CH   到文尾  char   采样数据  

    表2 8KHz采样、8比特A律量化的PCM语音信号的WAVE文件头格式表(共58字节)

    偏移地址 字节数 数据类型 内容 文件头定义为
    00H   4   char   "RIFF" char riff_id[4]="RIFF"
    04H   4   long int   文件总长-8 long int size0=文总长-8
    08H   8   char   "WAVEfmt " char wave_fmt[8]
    10H   4   long int   12000000H(ALAW) long int size1=0x12
    14H   2   int    06 00H  int fmttag=0x06
    16H   2  int    声道数  int channel=1 或2
    18H   4  long int   采样率  long int samplespersec
    1CH   4   long int   每秒播放字节数 long int bytepersec
    20H   2   int    采样一次占字节数 int blockalign=0x01
    22H   4  long int   量化数 long int bitpersamples=8
    26H   4   char   "fact"  char wave_fact="fact"
    2AH   8   char   0400000000530700H定 char temp
    32H   4   char   "data"  char wave_data="data"
    36H   4   long int   采样数据字节数 lont int size2=文长-58


    表3 8KHz采样、8比特U律量化的PCM语音信号的WAVE文件头格式表(共58字节)

    偏移地址 字节数 数据类型 内容 文件头定义为
    00H   4   char   "RIFF"  char riff_id[4]="RIFF"
    04H   4  long int   文件总长-8 long int size0=文总长-8
    08H   8  char   "WAVEfmt " char wave_fmt[8]
    10H   4   long int   12000000H(ULAW) long int size1=0x12
    14H   2   int   07 00H int fmttag=0x07
    16H   2   int    声道数 int channel=1 或2
    18H   4   long int   采样率 long int samplespersec
    1CH   4   long int   每秒播放字节数 long int bytepersec
    20H   2   int    采样一次占字节数 int blockalign=0x01
    22H   4   long int   量化数 long int bitpersamples=8
    26H   4   char   "fact"  char wave_fact="fact"
    2AH   8   char   0400000000530700H定 char temp
    32H   4   char   "data" char wave_data="data"
    36H   4  long int   采样数据字节数 lont int size2=文长-58


    表4 ADPCM语音编码后的WAVE文件头格式表(共90字节)

    偏移地址 字节数 数据类型 内容 文件头定义为
    00H 4 char "RIFF" char riff_id[4]="RIFF"
    04H 4 long int 文件总长-8 long int size0=文总长-8
    08H 8 char "WAVEfmt " char wave_fmt[8]
    10H 4 long int 32000000H(ADPCM) long int size1=0x32
    14H 2 int 02 00H int fmttag=0x02
    16H 2 int 声道数 int channel=1 或2
    18H 4 long int 采样率 long int samplespersec
    1CH 4 long int 每秒播放字节数 long int bytepersec
    20H 2 int 采样一次占字节数 int blockalign=声道数*量化数/8
    22H 2 int 量化数 int bitpersamples=4
    24H 34 char 固定字节 char temp1
    46H 4 char "fact" char wave_fact="fact"
    4AH 8 char 0400000004930600H定 char temp2
    52H 4 char "data" char wave_data="data"
    56H 4 long int 采样数据字节数 lont int size2=文长-90
    5AH 到文尾 采样数据    


    表5 GSM语音编码后的WAVE文件头格式表(共60字节)


    偏移地址 字节数 数据类型 内容 文件头定义为
    00H 4 char "RIFF" char riff_id[4]="RIFF"
    04H 4 long int 文件总长-8 long int size0=文总长-8
    08H 8 char "WAVEfmt " char wave_fmt[8]
    10H 4 long int 14000000H(GSM) long int size1=0x14
    14H 2 int 31 00H int fmttag=0x31
    16H 2 int 声道数 int channel=1 或2
    18H 4 long int 采样率 long int samplespersec
    1CH 4 long int 每秒播放字节数 long int bytepersec
    20H 8 char 4100000002004001H定 char temp1
    28H 8 char 6661637404000000H定 char temp2
    30H 4 char 40 E2 05 00H定 char temp3
    34H 4 char "data" char wave_data="data"
    38H 4 long int 采样数据字节数 lont int size2=文长-60
    3CH 到文尾 采样数据    

    表6 SBC语音编码后的WAVE文件头格式表(共58字节)


    偏移地址 字节数 数据类型 内容 文件头定义为
    00H 4 char "RIFF" char riff_id[4]="RIFF"
    04H 4 long int 文件总长-8 long int size0=文总长-8
    08H 8 char "WAVEfmt " char wave_fmt[8]
    10H 4 long int 12000000H(SBC) long int size1=0x12
    14H 2 int 71 00H int fmttag=0x71
    16H 2 int 声道数 int channel=1 或2
    18H 4 long int 采样率 long int samplespersec
    1CH 4 long int 每秒播放字节数 long int bytepersec
    20H 2 int 采样一次占字节数 int blockalign=0x25
    22H 4 long int 量化数 long int bitpersamples=16
    26H 4 char "fact" char wave_fact="fact"
    2AH 8 char 0400000076280400H定 char temp
    32H 4 char "data" char wave_data="data"
    36H 4 long int 采样数据字节数 lont int size2=文长-59


    表7 CELP语音编码后的WAVE文件头格式表(共58字节)

    偏移地址 字节数 数据类型 内容 文件头定义为
    00H 4 char "RIFF" char riff_id[4]="RIFF"
    04H 4 long int 文件总长-8 long int size0=文总长-8
    08H 8 char "WAVEfmt " char wave_fmt[8]
    10H 4 long int 12000000H(CELP) long int size1=0x12
    14H 2 int 70 00H int fmttag=0x70
    16H 2 int 声道数 int channel=1 或2
    18H 4 long int 采样率 long int samplespersec
    1CH 4 long int 每秒播放字节数 long int bytepersec
    20H 2 int 采样一次占字节数 int blockalign=0x0C
    22H 4 long int 量化数 long int bitpersamples=16
    26H 4 char "fact" char wave_fact="fact"
    2AH 8 char 0400000060520700H定 char temp
    32H 4 char "data" char wave_data="data"
    36H 4 long int 采样数据字节数 lont int size2=文长-58


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/4/19 11:20:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/28 16:39:01

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms