PCM(脉冲 +编码+调制)为原始音频数据采集的一种格式,可以只包含负载(payload),也可以包含头信息(header)+负载(payload)。通过arecord得到的PCM文件是包含头信息(header)+负载(payload)的格式。

头信息为44个字节的格式如下:

内容 长度
“RIFF” 4
后续字节长度(即文件大小-8) 4
“WAVE” 4
“fmt    ” 4
下一结构体变成16位长(10 00 00 00) 4
PCM标示(01 00) 2
通道数 2
采样率(44 AC  00 00 表示 44100Hz) 4
每秒字节数(采样率x通道数x每个采样点字节数) 4
每个采样点字节数(04 00 表示双声道16位采样) 2
量化比特数(10 00表示16比特采样) 2
“data” 4
实际负载长度 4

负载格式如下:

1. 8 Bit 单声道:

采样点1 采样点2
数据1 数据2

2. 8 Bit 双声道

采样点1   采样点2  
声道1数据1 声道2数据1 声道1数据2 声道2数据2

3. 16 Bit 单声道:

采样点1   采样点2  
数据1低字节 数据1高字节 数据1低字节 数据1高字节

4. 16 Bit 双声道

采样点1      
声道1数据1低字节 声道1数据1高字节 声道2数据1低字节 声道2数据1高字节
采样点2      
声道1数据2低字节 声道1数据2高字节 声道2数据2低字节 声道2数据2高字节
 

测试代码如下:

#include <iostream>
int main()
{FILE* fp=fopen("brocast.pcm","rb");FILE* fpw=fopen("brocastwb.pcm","wb");for(int i=0;i<11;i++)//读过44个字节的头信息{unsigned char* buffer=(unsigned char*)malloc(4*8);fread(buffer,4,1,fp);fwrite(buffer,4,1,fpw);// printf("%x %x %x %x\n",buffer[0],buffer[1],buffer[2],buffer[3] );free(buffer);}for(int i=0;i<600000;i++)//将左声道的数据写到右声道{unsigned char* buffer=(unsigned char*)malloc(4*8);fread(buffer,4,1,fp);//  buffer[0]=0;// buffer[1]=0;//   buffer[2] = buffer[2]-abs(buffer[2]-buffer[0]);buffer[0]=buffer[2];buffer[1]=buffer[3];fwrite(buffer,4,1,fpw);// printf("%x %x %x %x\n",buffer[0],buffer[1],buffer[2],buffer[3] );free(buffer);}fflush(fpw);fclose(fp);fclose(fpw);return 0;
}

功能为:读入brocast.pcm文件,假设是16位采样双声道的音频,将左声道的数据写入右声道,然后保存为brocastwb.pcm文件。

PCM格式分析(头信息+负载)相关推荐

  1. 【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 头文件与静态库拷贝到 Android Studio 二. CMakeList.txt 构建脚本配置 三. Java 层 AudioRecord 音频 ...

  2. python pcm,python pcm音频添加头转成Wav格式文件的方法

    如下所示: ''''' add Head Infomation for pcm file ''' import sys import struct import os __author__ = 'bo ...

  3. PCM音频文件格式的头信息

    一个裸的PCM格式音频数据,如果不带头信息,不知道其采样率等相关信息,就无法用播放器播放出来.下面是默认的头信息格式: //音频头部格式 struct wave_pcm_hdr {char riff[ ...

  4. AAC_LC用LATM封装header信息解析 Audio Specific Config格式分析

    通常来说AAC的头信息在编解码过程中是可以获取到的,但今天需要根据音频参数生成相应的AAC头.项目中使用的是AAC_LC,今天先对它的结构进行分析. 项目中使用ffmpeg进行音频编码,音频编码库为F ...

  5. AAC ADTS头格式分析

    ADTS ADTS(Audio Data Transports Stream)是AAC的一种十分常见的常见的传输流格式.可以把ADTS这个头看作是AAC的frame header.一般的AAC解码器都 ...

  6. PCM 音频格式分析

    PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志.Windows的Convert工具可以把PCM音频格式的文件转换成Microsoft的WAV ...

  7. 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | 文件头 Header 分析 | 标签 Tag 分析 | 视频标签 Tag 数据分析 )

    文章目录 安卓直播推流专栏博客总结 一. RTMP 格式解析 二. 文件头 Header 分析 三. 标签 Tag 分析 四. 视频标签 Tag 数据分析 安卓直播推流专栏博客总结 Android R ...

  8. 也说FLV格式分析(C语言从0开始,详解,完整版)

    也说FLV格式分析(C语言完整版) 最近想写一个在线视频播放软件,经研究得知某视频网站会将一个视频分成很多段来投放从而方便在线缓冲,以及加Ad之类的目的.下载后大概如下图所示(星哥的九品芝麻官),于是 ...

  9. HTTP协议的头信息详解

    HTTP协议的头信息详解 http://blog.csdn.net/guoguo1980/archive/2008/07/14/2649658.aspx HTTP协议的头信息详解 HTTP(Hyper ...

最新文章

  1. 如何用简单易懂的例子解释隐马尔可夫模型?
  2. Java实现C语言select函数_一道面试题目,分别用sql 和java,c++, c语言实现,
  3. 提交本地项目到github
  4. php自动加载指定目录下的类文件
  5. linux恢复mysql配置文件_linux下mysql配置文件my.cnf详解【转】
  6. VRRP技术原理与注意点
  7. android 半透明背景
  8. 【Windows】VMware虚拟机安装Windows 10 教程
  9. MacOS删除打印机软件指引
  10. 算法提高 盾神与砝码称重
  11. 进阶版拉依达准则(3sigm准则)的提出与应用
  12. 在uni-app中使用element-ui
  13. NX二次开发-UFUN工程图导入视图UF_DRAW_import_view
  14. 【python标准库】sys模块全解
  15. 爬虫是什么,该如何学习爬虫呢?
  16. 【考研政治】马哲常考的50个成语哲学原理总结 快码上!
  17. 自己更换云平台绑定QQ号的方法
  18. 有关 Java Long 型数据的比较
  19. 产品经理知识体系学习与实践指南
  20. 一等公民 二等公民_公民莫

热门文章

  1. 面条html5,手擀面条的家常做法教你怎么做好吃的图文解析-聚餐网
  2. 请将你的App签名文件放进保险箱
  3. [转]NOKIA5320--偶必装的软件之大结局
  4. Doom 3 GPL source release
  5. 鸿蒙珠传承现代,鸿蒙珠-从灵珠开始万界修炼-话本小说网
  6. 955公司名单分享,便愿每个人都能找到自己喜欢的工作能进入自己喜欢的公司
  7. latex绘制三线表格,并设置分割线粗细
  8. 华为鸿蒙几时有新机,华为鸿蒙系统正小规模测试 新机年底前推出或备货百万台...
  9. 汤家凤强化五套卷(一)复盘
  10. HAL库版STM32双轮自平衡车(二) ——— CubeMX的配置、原理图接线、物料准备