zoukankan      html  css  js  c++  java
  • iOS开发——WAVE音频文件解析

      WAV文件也分了好几类,相应的非数据信息存储在文件的头部,下面简单的提一下,然后在最后重点介绍44字节的那种,一般用的都是这个。

    1、8KHz采样、16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节)

    偏移地址  字节数  数据类型     内容             文件头定义为

     00H    4    char       "RIFF"           char riff_id[4]="RIFF"
       04H    4    long    文件总长-8            long int size0=文总长-8
       08H    8    char   "WAVEfmt "            char wave_fmt[8]
     10H    4    long      过滤字节(一般为10H)       long size1=0x10
     14H    2    int       编码方式(01 00H)       int fmttag=0x01
     16H    2    int  通道数(1为单声道,2为双声道)  int channel=1 或2
     18H    4    long     采样率           long int samplespersec
     1CH    4    long      传输速率                long int bytepersec
    =采样频率*通道数*量化数/8

     20H    2    int   数据块对齐(采样一次占的字节)  int blockalign=声道数*量化数/8
     22H    2    int     量化数(采样精度)         int bitpersamples=8或16 
     24H    4    char        "data"          char data_id[4]="data"
     28H    4    long   数据部分长度          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=文总长-808H 8 char "WAVEfmt " char wave_fmt[8]10H 4 long int 12000000H(SBC) long int size1=0x1214H 2 int 71 00H int fmttag=0x7116H 2 int 声道数 int channel=1 或218H 4 long int 采样率 long int samplespersec1CH 4 long int 每秒播放字节数 long int bytepersec20H 2 int 采样一次占字节数 int blockalign=0x2522H 4 long int 量化数 long int bitpersamples=1626H 4 char "fact" char wave_fact="fact"2AH 8 char 0400000076280400H定 char temp32H 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

  • 相关阅读:
    什么是线程组,为什么在 Java 中不推荐使用?
    什么是 FutureTask?使用 ExecutorService 启动任务?
    Java 中用到的线程调度算法是什么?
    什么是阻塞队列?阻塞队列的实现原理是什么?如何使用 阻塞队列来实现生产者-消费者模型?
    说说对 SQL 语句优化有哪些方法?(选择几条)
    什么是 Executors 框架?
    Java Concurrency API 中的 Lock 接口(Lock interface) 是什么?对比同步它有什么优势?
    什么是原子操作?在 Java Concurrency API 中有哪些原 子类(atomic classes)?
    Java 中你怎样唤醒一个阻塞的线程?
    你将如何使用 thread dump?你将如何分析 Thread dump?
  • 原文地址:https://www.cnblogs.com/yyt-hehe-yyt/p/5608157.html
Copyright © 2011-2022 走看看