(1) pcm格式
   pcm是经过话筒录音后直接得到的未经压缩的数据流
   数据大小=采样频率*采样位数*声道*秒数/8
    采样频率一般是22k或者44k,位数一般是8位或者16位,声道一般是单声道或者双声道
    pcm属于编码格式,就是一串由多个样本值组成的数据流, 本身没有任何头信息或者帧的概念,。如果不是音频的录制者,光凭一段PCM数据,是没有办法知道它的采样率等信息的。(网上有说法指2048个采样算一帧PCM,http://www.360doc.com/content/11/1230/19/2226925_176139396.shtml,不知道这种说法是否正确)
 
   参见:
 
 (2)WAV格式
   WAV格式是封装格式,里面本身可以存放多种编码格式的数据,不过一般都是存放的PCM数据,存放其他编码意义不是很大。
   wav文件由wav文件头部分和wav文件数据体部分组成,0-43字节存放采样率、通道数、数据部分的标识符等头信息,44字节以后的就是数据部分。 很显然,wav的头信息很重要,一旦头信息损坏了,播放估计会有问题。
   参见:
  WAV格式  
 
 (3)MP3格式
   MP3是封装格式,里面存放的数据使用的编码方式称为MPEG1 Layer-3 
   MP3文件由TAG_V2(ID3V2)结构体,一组Frame, TAG_V1(ID3V1)结构体组成,头部的TAG结构体不一定存在,需要进行判断,尾部的TAG长度为128个字节,也需要进行判断。
   中间的一组Frame,Frame长度可以定长也可以边长,每一个Frame都由帧头和数据实体组成,帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立,各帧相互独立。也就是说即使前面的帧损坏了,后面的也是可以播放的。
    参见:
    Mp3帧分析(数据帧)  
    MP3 File Structure   
 
  (4)AMR格式
    AMR文件包含一个文件头,后面就是一帧一帧的AMR帧。文件头里面的值是固定值,用于标识该文件为AMR文件。每个帧分为帧头和数据部分,帧头里面包含编码方式以及辅助信息。AMR的采样率根据编码方式不同而不同,因此不像MP3一样,在每个帧里面存放采样率。
  参见:
  AMR format  
 
(5)AAC格式
   初步了解,AAC文件可以没有文件头,全部由帧序列组成,每个帧由帧头和数据部分组成。帧头包含采样率、声道数、帧长度等,有点类似MP3格式。
   关于AAC格式的文章网上非常少,只看到以下几篇:
   AAC 格式分析     
 
  (6)CAF文件
   CAF是苹果的一种音频封装格式,与WAV差不多,里面可以存放LPCM、MP3等多种编码数据。
   参见:
 
---------------------------------------------------------------------------------------- 

本人博客内容系个人学习与研究的笔记,如存在谬误或缺失,请见谅并指出,谢谢。
  本文地址:http://www.cnblogs.com/gugupluto/p/3584320.html

转载请注明来自:http://www.cnblogs.com/gugupluto/

----------------------------------------------------------------------------------------

 

iOS音频学习笔记一:常见音频封装格式及编码格式的更多相关文章

  1. iOS音频学习笔记三:音频会话管理

    ​      使用Audio Session API ,可以指定App需要的音频行为,比如,当播放音频时,使得其他应用App静音或者混和在一起,也可以指定当App的音频被中断(例如被电话)时的行为,还 ...

  2. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  3. iOS音频学习笔记二:iOS SDK中与音频有关的相关框架

      上层:       Media Player Framework: 包含MPMoviePlayerController.MPMoviePlayerViewController.MPMusicPla ...

  4. Android应用开发学习笔记之播放音频

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android支持常用音视频格式文件的播放,本文我们来学习怎样开发Android应用程序对音视频进行操作. Andr ...

  5. cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)

    在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...

  6. XML学习笔记(二)-- DTD格式规范

    标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...

  7. JMeter学习笔记16-如何输出HTML格式的性能测试报告

    文本来学习下,如何输入HTML格式的JMeter测试报告.前面已经介绍, 如果要做性能测试,需要在GUI上设计好你的Test Plan,设置各种场景和负载值,包括多少个线程,多少个用户,循环多少次.设 ...

  8. FFmpeg编程学习笔记二:音频重採样

    ffmpeg实现音频重採样的核心函数swr_convert功能很强大,但是ffmpeg文档对它的凝视太过简单.在应用中往往会出这样那样的问题,事实上在读取数据->重採样->编码数据的循环中 ...

  9. ios开发学习笔记(1)

    objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...

随机推荐

  1. Python中产生随机数

    Python中产生随机数 一.Python自带的random库       1.参生n--m范围内的一个随机数:    random.randint(n,m) 2.产生0到1之间的浮点数:  rand ...

  2. 判断本网段有多少可用的ip地址

    为了提高效率,使用多线程方式同时ping. 但是如果开启255个线程,又会因为网络端口太拥挤,会被判定为无法ping通.所以本例使用java自带线程池,线程池的连接数还不能太大,启动了15个线程. 等 ...

  3. Docker容器(四)——常用命令

    (1).基本使用方法 查看所有镜像.docker images [root@youxi1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ...

  4. pix2pix&Cycle GAN&pix2pix HD

    这里简短地谈一下如题的三篇论文: 参考:https://blog.csdn.net/gdymind/article/details/82696481 (1)pix2pix:从一张图片生成另一张图片 p ...

  5. C# Web Service 不使用服务引用直接调用方法(转)

    版权声明:本文为博主原创文章,未经博主允许不得转载.          https://blog.csdn.net/u011508145/article/details/79496214 using ...

  6. Python中利用原始套接字进行网络编程的示例

    Python中利用原始套接字进行网络编程的示例 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构 ...

  7. selenium IDE下载安装(For Chrome and firefox)

    安装好Firefox/cheome之后,接下来就到了正式安装Selenuim IDE的时候了. 步骤一:下载Selenuim IDE       方法一:之前从网上查到很多安装教程,都是从http:/ ...

  8. consul(一)什么是consul

    1. consul的基本介绍 在分布式架构中,服务治理是一个重要的问题.在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进行服务关系管理,遇到服务关系变化或者增加服务的时候,人肉配置极 ...

  9. SPSS 2019年10月17日 21:46:38 今日学习总结

    数据库: 开放数据库链接是为了解决异构数据库间的数据共享而产生的,现已成为WOSA的主要部分和基于Windows环境的一种数据库访问接口标准ODBC为异构数据库访问提供一个接口,允许应用程序以SQL为 ...

  10. 【CUDA开发】CUDA开发琐碎知识

    ## 一维矩阵的加 //实现一个一维1*16的小矩阵的加法. //矩阵大小:1*16  //分配一个block,共有16个线程并发.  #include <stdio.h> #includ ...