zoukankan      html  css  js  c++  java
  • (转)PCM数据格式

     
     

    1. 音频简介

         经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等.

         44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2字节)记录, 双声道(立体声);

         22050HZ 8bit  mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1字节)记录, 单声道;

        当然也可以有 16bit 的单声道或 8bit 的立体声, 等等。 

        采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。

         对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);

         而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位(左声道)和低八位(右声道)分别代表两个声道。

        人对频率的识别范围是 20HZ - 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求. 所以 22050 的采样频率是常用的, 44100已是CD音质, 超过48000的采样对人耳已经没有意义。这和电影的每秒 24 帧图片的道理差不多。

        每个采样数据记录的是振幅, 采样精度取决于储存空间的大小:

       1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;

       2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;

       4 字节(也就是32bit) 能把振幅细分到 4294967296 个等级, 实在是没必要了.

       如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍.

    这样我们就可以根据一个 wav 文件的大小、采样频率和采样大小估算出一个 wav 文件的播放长度。

    譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是 "22050HZ / 16bit / 立体声" 格式(这可以从其 "属性->摘要" 里看到),

    那么它的每秒的传输速率(位速, 也叫比特率、取样率)是 22050*16*2 = 705600(bit/s), 换算成字节单位就是 705600/8 = 88200(字节/秒), 
    播放时间:424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒)。

    但是这还不够精确, 包装标准的 PCM 格式的 WAVE 文件(*.wav)中至少带有 42 个字节的头信息, 在计算播放时间时应该将其去掉, 
    所以就有:(424644-42) / (22050*16*2/8) ≈ 4.8140816(秒). 这样就比较精确了.

    关于声音文件还有一个概念: "位速", 也有叫做比特率、取样率, 譬如上面文件的位速是 705.6kbps 或 705600bps, 其中的 b 是 bit, ps 是每秒的意思;

    压缩的音频文件常常用位速来表示, 譬如达到 CD 音质的 MP3 是: 128kbps / 44100HZ.

       

    2. PCM数据格式

        PCM(Pulse Code Modulation)也被称为 脉码编码调制。PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入。(它的基本组织单位是BYTE(8bit)或WORD(16bit))

        一般情况下,一帧PCM是由2048次采样组成的( 参 http://discussion.forum.nokia.com/forum/showthread.php?129458-请问PCM格式的音频流,每次读入或输出的块的大小是必须固定为4096B么&s=e79e9dd1707157281e3725a163844c49 )。

        如果是双声道的文件,采样数据按时间先后顺序交叉地存入。如图所示:

      


       PCM的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数。

    首先存储低有效字节,表示样本幅度的位放在i的高有效位上,剩下的位置为0,这样8位和16位的PCM波形样本的数据格式如下所示。

        样本大小      数据格式            最小值    最大值

        8位PCM       unsigned int         0       225

        16位PCM      int                -32767    32767

    转自:http://blog.csdn.net/ownwell/article/details/8114121

  • 相关阅读:
    HBase 高性能加入数据
    Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案
    小程序跳转时传多个参数及获取
    vue项目 调用百度地图 BMap is not defined
    vue生命周期小笔记
    解决小程序背景图片在真机上不能查看的问题
    vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化
    vue项目 一行js代码搞定点击图片放大缩小
    微信小程序进行地图导航使用地图功能
    小程序报错Do not have xx handler in current page的解决方法
  • 原文地址:https://www.cnblogs.com/lihaiping/p/4795418.html
Copyright © 2011-2022 走看看