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

  • 相关阅读:
    HDU4474 Yet Another Multiple Problem BFS搜索
    HDU4473 Exam 数学分析
    2013ACM多校联合(4)
    POJ1273 网络流...
    HDU4472 Count 递推
    POJ1149 PIGS 网络流
    UVA10881 Piotr's Ants 想法题
    javascript js string.Format()收集
    修改 设置 vs.net 网站 调试 设为 起始页
    【转】HTML5杂谈 概念与现行游戏 割绳子 宝石迷阵
  • 原文地址:https://www.cnblogs.com/lihaiping/p/4795418.html
Copyright © 2011-2022 走看看