关于 Wave 文件的基础知识与文件格式

Wave 文件的基础知识

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

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

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

人对频率的识别范围是 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), 换算成字节是 705600/8 = 88200(字节);
424644(总字节数) / 88200(每秒字节数) ≈ 4.8145578(秒).

这还不够精确, 在标准的 PCM 格式的 WAVE 文件中还有 44 个字节是采样数据之外的内容, 应该去掉:
(424644-44) / (22050*16*2/8) ≈ 4.8140589(秒). 这比较精确了.

关于声音文件还有一个概念: "位速", 也有叫做比特率、取样率, 譬如上面文件的位速是 705.6kbps 或 705600bps, 其中的 b 是 bit, ps 是每秒的意思; 压缩的音频文件常常用位速来表示, 譬如达到 CD 音质的 mp3 是: 128kbps / 44100HZ.

Wave 文件的文件格式

微软的多媒体文件(wav、avi、tif 等)都有一个 RIFF 头, Wave 文件基本是这个样子:

RIFF 头
  fmt 子块
data 子块


Wave 文件的编码方式有好多, 最常用最简单的就是 PCM 编码.

其他编码会包含更多的"块", 但至少会包含上面的块, PCM 编码只包含上面的块.

下面是 PCM 编码的祥表:

RIFF 头 ckid 4 "RIFF" 标识
cksize 4 文件大小; 这个大小不包括 ckid 和 cksize 本身, 下面的子块大小也是这样
fccType 4 类型, 这里是 "WAVE" 标识
    24 fmt 子块 ckid 4 "fmt " 标识
cksize 4 块大小;  PCM 编码这里是 16, 其他编码也不小于 16
wFormatTag 2 编码格式; 1 表示是 PCM 编码 
nChannels 2 声道数; 1 是单声道、2 是立体声
nSamplesPerSec 4 采样频率(每秒的样本数); 譬如 44100
nAvgBytesPerSec 4 传输速率 = 采样频率 * 每次采样大小, 单位是字节
nBlockAlign 2 每次采样的大小 = 采样精度 * 声道数 / 8(因单位是字节所以要/8);
这也是字节对齐的最小单位, 譬如 16bit 立体声在这里的值是 4 字节
wBitsPerSample 2 采样精度; 譬如 16bit 在这里的值就是 16
  ? data 子块 ckid 4 "data标识
cksize 4 块大小
采样数据 ? 双声道数据排列: 左右左右...; 8bit: 0-255, 16bit: -32768-32767


其他编码可能会包含的块有: 事实块(Fact)、提示块(Cue)、标签块(Label)、注释块(Note)、标签文本块(Labeled Text)、采样器块(Sampler)、乐器块(Instrument)、列表块(List)等等, 如果有 List 块, 它还会包含更多子块. 



判断文件是否为Wave格式

Wave 文件的前 12 个字节可以这样描述:


TRiff = record
  ckId    : DWORD; {'RIFF'}
  ckSize  : DWORD; {文件大小, 不包括前 8 个字节}
  fccType : DWORD; {'WAVE'}
end;

  
  

我们读出文件的前 12 个字节进行判断, 就基本可以确认它是不是 Wave 文件.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 计算机应用基础知识概述 第2讲 计算机应用基础知识概述(二) 教学目标及基本要求: 1、掌握计算机软件系统的构成,软件的概念、特点及分类 2、了解指令、语言、程序的概念。 3、掌握计算机的基本工作原理。 教学重点: 软件的概念、特点,存储程序原理。 1. 教学难点: 存储程序原理。 1. 教学内容: 1、系统软件、应用软件 2、程序设计语言、计算机的指令、计算机的程序 3、计算机的工作原理、计算机的基本工作过程 教学时间: 1学时 主要内容: 1.3.3 计算机软件系统的构成 软件:在硬件设备上运行的各种程序以及有关资料,主要由程序和文档两部分组成。 1.系统软件 指管理、监控和维护计算机资源(包括硬件和软件)的软件。它是为整个计算机系统 所配置的、不依赖于特定应用领域的通用性软件。它扩大了计算机的功能,提高了计算 机的工作效率。系统软件是不可少,一般由生产厂家或专门的软件开发公司研发,其他 程序都在它的支持下编写和运行。系统软件主要包括操作系统和实用系统软件。 (1)操作系统 概念:操作系统(Operating System,OS)是直接运行在裸机上的最基本的系统软件,是系统软件的核心,其他软 件必须在操作系统的支持下才能运行。它控制和管理计算机系统内各种软、硬件资源 ,合理有效地组织计算机系统的工作。 DOS、Unix、Windows(95、98,2000、xp等) (2)实用系统软件 1. 语言处理程序 概念:将非机器语言的程序通过解释或翻译成与其相对应的机器指令后,使其被计算 机执行。 要点: 计算机只能直接识别和执行机器语言程序。非机器语言的程序必须通过解释或翻译 成与其相对应的机器指令后,才能被计算机执行 一般将用高级语言或汇编语言编写的程序称为源程序,而将已翻译成机器语言的程 序称为目标程序,不同高级语言编写的程序必须通过相应的语言处理程序进行翻 译。 计算机将源程序翻译成机器指令时,通常有两种翻译方式:编译方式和解释方式, 具体如图1-7所示。 2. 1. 1. 图1-7 计算机语言处理程序的翻译过程 经编译方式编译的程序执行速度快、效率高。 语言处理程序主要有:汇编程序、解释程序和编译程序。汇编程序用来处理汇编语 言编写的程序,它把汇编语言源程序翻译成机器语言程序。解释程序和编译程序 用来处理高级语言程序。现在大多数的高级语言都是编译型的,例如C++、Pasca l等 。 数据库管理系统(DBMS) 完成数据库中对于数据的管理 。当前流行的关系型DBMS有FoxPro、Access、Oracle、Sybase等。 各种实用工具程序 实用工具程序能配合各类其他系统软件为用户的应用提供方便和帮助。如磁盘及文件管 理软件、瑞星、金山毒霸及诺顿等。在Windows的附件中也包含了系统工具,包括磁盘碎 片整理程序、磁盘清理等实用工具程序。 2.应用软件 概念:应用软件是指为解决用户某个实际问题而编写的程序和有关资料应用软件可分 为通用软件和专用软件,前者往往具有一定的通用性,为各行各业的人所使用,如M icrosoft Word、Adobe Photoshop等;后者没有通用性,只完成某一特定专业的任务,往往是针对某行业、 某用户的特定需求而专门开发的,如某个公司的ERP系统。 常用的应用软件有如下几种: (1)办公软件包 办公软件包包括文字处理、桌面排版、电子表格处理、商务图表、演示软件等。如M icrosoft Office中的 word, excel, access 等。常用的办公软件包的结构功能与应用将在第3章中详细介绍。 (2)多媒体制作软件 多媒体制作软件是用于录制、播放、编辑声音和图像等多媒体信息的一组应用程序。 包括处理声音的 Wave Studio、Sound O'LD、Mixer等软件和处理图像的 VFW(Video For Windows)以及Photoshop、AutoCAD、3DS、PowerPoint、Authorware、FrontPage、Fla sh等。 (3)其他应用软件 如辅助财务管理、大型工程设计、建筑装潢设计、服装裁剪、网络服务工具以及各种 各样的管理信息系统等应用软件 。 3.嵌入式系统 概念:嵌入式系统是把计算机的硬件与软件嵌入到各种应用产品中的系统,包括构成 软件基本运行环境的硬件和操作系统两部分 。 嵌入式处理器可以分为3类: 嵌入式微处理器 嵌入式微控制器 嵌入式DSP(Digital Signal Processor)。 4.程序设计语言 (1)程序设计的基本概念 程序=算法+数据结构 算法 算法可以看作是由有限个步骤组成的、用来解决问题的具体过程。 【例1.1】欧几里德算法(求p、q的最大公约数)。 a. 如果p>q,则交换p和q。 b. 令r为p/q的余

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值