音频采集的基础知识

自然界中的声音非常复杂,波形极其复杂,需要将模拟信号转换成数字信号,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。 

  • 抽样:对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号,对应采样频率;
  • 量化:用一组规定的电平,把瞬时抽样值用最接近的电平值来表示,通常是用二进制表示;
  • 编码:用一组二进制码组来表示每一个有固定电平的量化值,对应采样位数;

(1)音频文件的组成:文件格式(或者音频容器)+数据格式(或者音频编码)

  • 文件格式是用于形容文件本身的格式,可以通过多种不同方法为真正的音频数据编码,例如CAF文件便是一种文件格式,它能够包含MP3格式,线性PCM以及其他数据格式音频
  • 线性PCM:这是表示线性脉冲编码机制,主要是描写用于将模拟声音数据转换成数组格式的技术,简单地说也就是未压缩的数据。因为数据是未压缩的,所以我们便可以最快速地播放出音频,而如果空间不是问题的话这便是iPhone 音频的优先代码选择

(2).音频文件计算大小
简述:声卡对声音的处理质量可以用三个基本参数来衡量,即采样频率,采样位数和声道数。  

  • 采样频率:单位时间内采样次数。采样频率越大,采样点之间的间隔就越小,数字化后得到的声音就越逼真,但相应的数据量就越大,声卡一般提供11.025kHz,22.05kHz和44.1kHz等不同的采样频率。

  • 采样位数:记录每次采样值数值大小的位数。采样位数通常有8bits或16bits两种,采样位数越大,所能记录的声音变化度就越细腻,相应的数据量就越大。

  • 声道数:处理的声音是单声道还是立体声。单声道在声音处理过程中只有单数据流,而立体声则需要左右声道的两个数据流。显然,立体声的效果要好,但相应数据量要比单声道数据量加倍。

  • 声音数据量的计算公式:数据量(字节 / 秒)=(采样频率(Hz)* 采样位数(bit)* 声道数)/ 8
    单声道的声道数为1,立体声的声道数为2. 字节B,1MB=1024KB = 1024*1024B

  • 一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率=44.1K×16×2 bps=1411.2 Kbps= 176.4 KB/s。
    1秒的数据就这么大,这是不合适的,需要进行压缩编码,所以就会有aac,MP3,wma等等格式.

struct AudioStreamBasicDescription
{
   Float64             mSampleRate;        // 采样率 :Hz
   AudioFormatID       mFormatID;          // 采样数据的类型,PCM,AAC等
   AudioFormatFlags    mFormatFlags;       // 每种格式特定的标志,无损编码 ,0表示没有
   UInt32              mBytesPerPacket;    // 一个数据包中的字节数
   UInt32              mFramesPerPacket;   // 一个数据包中的帧数,每个packet的帧数。如果是未压缩的音频数据,值是1。动态帧率格式,这个值是一个较大的固定数字,比如说AAC的1024。如果是动态大小帧数(比如Ogg格式)设置为0。
   UInt32              mBytesPerFrame;     // 每一帧中的字节数
   UInt32              mChannelsPerFrame;  // 每一帧数据中的通道数,单声道为1,立体声为2
   UInt32              mBitsPerChannel;    // 每个通道中的位数,1byte = 8bit
   UInt32              mReserved;          // 8字节对齐,填0
};
typedef struct AudioStreamBasicDescription  AudioStreamBasicDescription;

https://www.jianshu.com/p/a671f5b17fc1

https://www.jianshu.com/p/e2d072b9e4d8 

扫描二维码关注公众号,回复: 11122486 查看本文章
发布了101 篇原创文章 · 获赞 33 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/u014600626/article/details/104048111