数字音频规范与程序设计

当前位置:首页 > 网络编程 > 编程语言与程序设计 > 数字音频规范与程序设计

出版社:中国水利水电出版社
出版日期:2012-6-1
ISBN:9787508498195
作者:曹强
页数:472页

章节摘录

版权页:   插图:   (1)MIDI解码。音源驱动根据不同的MIDI信息类型进入对应的处理模块。比如MIDI发音信息,需要解析其通道、音高与力度,然后进入声音处理单元。对于控制信息,需要解析其控制号,然后进入相应的控制单元。 (2)声音预处理。波表合成不是简单的样本回放,它还需要一些重要音色参数的控制,包括音高、音量、包络处理、滤波处理等。音源驱动得到开音相关信息后,将根据当前的音色号、音高和力度到音色库中查找其对应的样本(一个或多个),找到每个样本对应的音色参数,然后再根据这些参数进行一定的运算,并将部分运算结果传递给DSP做进一步处理。 (3)DSP处理。DSP根据音源驱动提供的样本地址取出样本数据,并根据音源驱动计算出来的部分音色参数调整波形数据的回放速率和放大系数等。 (4)数模转换。从DSP出来的数字信息就是最终的波形数据,经过数模(D/A)转换器将数字信号转换为模拟信号后通过扬声器,于是我们最终听到了MIDl音符的发声。 从图5.9中可以看出,波表合成主要由如下几个功能模块组成:逻辑控制模块;发音控制模块;发音处理模块。逻辑控制模块主要是指音源驱动的MIDl解码与样本选择(寻址)。发音控制模块主要是指音源驱动对音色参数的解析与运算(比如包络运算、LFO运算、滤波运算等),并将部分计算结果传递给DSP进行处理。发音处理模块主要是根据音源驱动提供的参数(如样本存储地址、Loop点信息、包络信息等)进行波形数据的回放,当然,回放不是简单的播放,回放时需要进行回放速率的控制、去除噪声、数字放大等处理。 与FM相比,波表(Wave Table)合成确实使电子音乐的发展取得了历史性的进步,虽然它的核心思想并不复杂,但通过对真实乐器的数字化录音与回放,使MIDl音乐听起来更接近自然、更具真实感。当然,波表合成也有它的缺点,虽然通过音色参数的一些调整可以使原声发生一些变化,但相比于FM波表合成较难产生新的音色。 5.4.2波表合成的关键技术 首先我们来看两个问题,第一个问题是,是不是每个音色都应该像前面所举的例子(见图5.8)一样,每个音高(键位)都需要一个对应的采样样本昵?答案是否定的,因为使用频率变换技术可以用已有的样本模拟出其相邻音高的音。如图5.10所示,从c2到B6共有4个八度,但只用了5个采样样本(a.wav为G2采样样本,b.wav为A3采样样本,c.way为G4采样样本,d.wav为D5采样样本,e.wav为E6采样样本),其他键位的音高都是根据这5个样本变换出来的,比如C2的发音是通过a.wav变换出来的,C4的发音是通过b.wav变换出来的,86的发音是通过e.wav变换出来的。也就是说,一个或多个样本将整个音高划分了N个区域,每个区域内的其他键位都通过该样本变换发声。假设当前制作的音色为原声钢琴,那么只需要录制真实钢琴5个键位的样本就可以了,所以,在波表合成器中,并不是每个音色都需要为每个音高采集样本。事实上,很少有音色为每个键位都分配一个样本,因为这样的话,一个音色占用的样本容量就太大了,当然,整个音高区域只使用一个样本也是不好的,因为频率变换也有精度的问题,关于频率变换的相关信息请参考5 4.3节。

书籍目录

前言
第一章
Windows音频体系与VC++开发基础
1.1
认识声音与音频
1.2
Windows音频体系层次结构
1.2.1
用户模式与内核模式
1.2.2
关于声音的延迟问题及解决方法
1.3
VC++开发基础
1.3.1
区分C、C++和VC++三者的关系
1.3.2
事件驱动与消息处理
1.3.3
开发环境概述
1.3.4
MFC概述
1.3.5
利用向导创建一个简单的对话框程序
第二章
MCI与MMAPI多媒体编程接口
2.1
MCI简介
2.1.1
MCI逻辑结构
2.1.2
MCI接口、函数与命令
2.1.3
MCI消息与宏定义
2.2
MCI编程步骤
2.3
MCI编程实例
2.3.1
播放CD
2.3.2
WAV播放与录音
2.3.3
基于MCIWnd的多媒体播放器
2.4
MMAPI简介
2.4.1
四种多媒体文件IO
2.4.2
波形音频处理
2.4.3
MIDI的流缓冲区与非流缓冲区处理
2.4.4
多媒体定时器
第三章
WAVE格式及播放与录制
3.1
认识WAVE
3.2
WAVE文件结构
3.3
采样点与采样帧的区别
3.4
WAVE中常用的一些块
3.4.1
格式块
3.4.2
数据块
3.4.3
提示块
3.4.4
播放列表块
3.4.5
关联数据块
3.4.6
采样块
3.5
多媒体波形音频函数
3.6
波形音频处理的回调机制
3.7
WAVE播放
3.7.1
WAVE播放基本流程
3.7.2
双缓冲播放机制
3.7.3
关于死锁的问题
3.8
WAVE录音
3.9
程序实例
3.9.1
WAVE文件解析及分离与合并
3.9.2
WAVE播放器
3.9.3
WAVE录音机
第四章
MIDI标准与程序设计
4.1
什么是MIDI
4.1.1
MIDI硬件接口
4.1.2
MIDI设备连接
4.1.3
MIDI通讯方式
4.2
MIDI信息
4.2.1
MIDI音乐制作
4.2.2
通道信息
4.2.3
控制器
4.2.4
系统信息
4.2.5
运行状态
4.3
其他MIDI规范
4.4
GM、GS与XG
4.5
GM2
4.6
MIDI文件格式
3.6.1
头部信息
3.6.2
轨道信息
3.6.3
Meta信息
4.7
MIDI文件示例
4.8
与MIDI相关的时间计算
4.8.1
BPM
4.8.2
PPNQClock
4.8.3
MIDIClock
4.8.4
SMPTE
4.9
程序实例
4.9.1
MIDI设备枚举、播放与录制
4.9.2
MIDI信息发送器
4.9.3
鼓速测试工具
4.9.4
MIDI播放器
4.9.5
截获MIDI信息
4.10
USBMIDI概述
4.11
USBMIDI的实现机制
4.12
USB-MIDI功能器件
4.12.1
MIDI流接口
4.12.2
拓扑结构
4.12.3
USB-MIDI转换器
4.12.4
元件
4.13
USB-MIDI数据格式
4.14
USB-MIDI操作模型
4.14.1
主机到USB-MIDI功能器件的通讯
4.14.2
USB-MIDI功能器件到主机的通讯
4.14.3
高带宽数据传输机制
4.15
USB-MIDI描述符
4.15.1
MIDI流接口描述符
4.15.2
MIDI流端点描述符
4.16
USBMIDI驱动设计
4.16.1
用户模式音频驱动程序
4.16.2
用户模式音频驱动的入口点
4.16.3
用户模式音频驱动入口点消息
4.16.4
用户模式音频驱动通知客户端
4.16.5
用户模式音频驱动的安装
4.17
USB驱动程序
4.17.1
IRP的分层处理
4.17.2
IRP的基本结构与内容
4.17.3
驱动对象与设备对象
4.17.4
核心模式驱动的入口点
4.17.5
USB驱动程序的设计步骤
4.18
户模式音频驱动几个上层接口的实现
第五章
数字音乐合成
5.1
合成器概述
5.2
MIDI的发音原理
5.3
FM合成原理
5.4
波表合成
5.4.1
波表合成器工作原理
5.4.2
波表合成的关键技术
5.4.3
频率变换
5.4.4
循环(LOOP)
5.4.5
波表合成器的衡量指标
5.5
软波表与硬波表
5.6
音色制作
5.6.1
样本准备与分配
5.6.2
样本参数调整
5.6.3
音色参数调整
5.6.4
设置效果参数
5.6.5
保存音色文件
第六章
音频混音器
6.1
混音器原理
6.1.1
声卡硬件模型
6.1.2
音频线路
6.1.3
控件
6.2
混音器编程
6.2.1
MixerAPI函数介绍
6.2.2
枚举系统中的混音器设备
6.2.3
打开混音器设备
6.2.4
枚举音频线路
6.2.5
获取音频线路信息
6.2.6
枚举音频线路的相关控件
6.2.7
获取与线路相关的所有控件信息
6.2.8
通过控件ID获取控件信息
6.2.9
通过控件类型获取控件信息
6.2.10
获取或设置控件之值
6.2.11
多声道控件
6.2.12
多条目控件
6.2.13
混音器专用信息
6.3
程序实例-混音器调节软件
第七章
音频插件设计
7.1
插件的实现原理
7.2
基于动态链接库的方法实现DLL插件
7.2.1
定义插件接口结构
7.2.2
实现插件的功能
7.2.3
插件管理
7.3
实现一个支持三种插件类型的MINI播放器
7.3.1
主程序设计
7.3.2
输入型插件设计
7.3.3
常规型插件设计
7.3.4
输出型插件设计
7.4
给Winamp写一个MIDI键盘插件
7.4.1
确定插件的类型
7.4.2
截获系统API
7.4.3
实现插件功能
7.5
基于ATL的方法实现COM插件
7.6
VST插件概述
7.7
VSTSDK与VST的音频数据处理
7.8
创建一个最简单的VST插件
7.9
设计一个StereoDelay效果的VST插件
7.10
VSTXML文件
7.11
设计一个简单的FM合成器插件
7.11.1
什么是FM合成
7.11.2
用到哪些VST(i)函数
7.11.3
波形产生器
7.11.4
包络发生器
7.11.5
频率比
7.11.6
低频振荡器
7.11.7
合成信号路径
7.11.8
合成实现
7.11.9
音高测试
7.11.10
谐振频率测试
7.12
VSTGUI编程
7.12.1
创建一个最简单GUI的VST插件
7.12.2
几种常用GUI控件的使用方法
7.12.3
监听器与控件标识符
7.13
实现一个自行设计界面的RingModulator插件
7.14
VST宿主程序设计
第八章
基音的时频域检测
8.1
概述
8.2
音乐信号的前期处理
8.2.1
信号数字化
8.2.2
取音框
8.2.3
静音与杂音处理
8.3
时域基频检测方法
8.3.1
自相关函数法
8.3.2
自相关函数法的程序实例
8.3.3
平均振幅差函数法
8.3.4
平均振幅差函数法的程序实例
8.4
频域基频检测方法
8.4.1
傅里叶变换的原理及其物理意义
8.4.2
快速傅里叶变换法
8.4.3
快速傅里叶变换法的程序实例
8.4.4
谐波积频谱法
8.4.5
谐波积频谱法的程序实例
8.4.6
倒谱法
8.4.7
极大似然法
8.5
时频域检测方法
8.5.1
小波变换法
8.5.2
ACF与AMDF结合法
8.5.3
ACF与AMDF相结合的程序实例
8.6
基频检测的后期处理
8.7
软件调音器的设计
第九章
ASIO音频驱动设计
9.1
何为ASIO
9.2
用户层ASIO驱动设计
9.2.1
ASIO的有限状态机
9.2.2
音频数据流的传输
9.2.3
ASIO驱动接口
9.2.4
数据同步
9.2.5
四个重要的回调函数
9.2.6
几个重要的数据结构
9.2.7
输入输出延迟问题
9.3
用户层ASIO驱动的实现
9.3.1
准备工作
9.3.2
添加自注册功能
9.3.3
实现IASIO的所有接口
9.4
在音频软件中使用ASIO驱动
9.4.1
ASIO播放
9.4.2
ASIO录音
第十章
MP3编解码
10.1
MP3简介
10.2
MP3文件格式
10.2.1
TAG_V2(ID3V2)
10.2.1.1
标签头
10.2.1.2
扩展标签头
10.2.1.3
标签帧
10.2.2
帧(Frame)
10.2.2.1
帧头(FRAME_HEADER)
10.2.2.2
音频数据(AUDIO_DATA)
10.2.3
TAG_V1(ID3V1)
10.3
程序实例-MP3文件分析
10.4
MP3编码的基本概念
10.4.1
奈奎斯特定理
10.4.2
非均匀量化
10.4.3
霍夫曼编码
10.4.4
离散余弦变换
10.4.5
心理声学模型
10.4.5.1
静音门槛曲线
10.4.5.2
临界频带
10.4.5.3
屏蔽效应
10.4.5.4
感知熵
10.4.5.5
第二心理声学模型
10.4.5.6
滤波器组
10.4.5.7
比特分配与非均匀量化
10.4.5.8
霍夫曼编码
10.4.5.9
封装成帧
10.5
MP3编码过程
10.5.1
编码框架
10.5.2
心理声学模型
10.5.2.1
汉宁窗快速傅里叶变换FFT
10.5.2.2
非预测值计算
10.5.2.3
计算长块阈值(第一部分)
10.5.2.4
计算感知熵PE
10.5.2.5
长块阈值计算(第二部分)
10.5.2.6
短块阈值计算
10.5.3
分析滤波器组
10.5.4
MDCT
10.5.4.1
窗框选择
10.5.4.2
改进的离散余弦变换
10.5.5
长窗混叠处理
10.5.6
非均匀量化与编码
10.5.6.1
帧循环的准备工作
10.5.6.2
外层循环(失真控制)
10.5.6.3
内层循环(速率控制)
10.5.7
格式化
10.6
MP3解码过程
10.6.1
帧头信息处理
10.6.2
帧边信息处理
10.6.3
解码比例因子信息
10.6.3.1
长块(LongBlock)
10.6.3.2
短块(ShortBlock)
10.6.3.3
混合块(MixBlock)
10.6.4
解码霍夫曼编码
10.6.4.1
解码Zeros区
10.6.4.2
解码Count1区
10.6.4.3
解码BigValues区
10.6.5
非均匀反量化
10.6.6
重新排序
10.6.7
立体声处理
10.6.8
混叠消除
10.6.9
IMDCT反余弦变换
10.6.10
频率反转
10.6.11
多相合成滤波器
10.7
程序实例
10.7.1
MP3文件解析
10.7.2
MP3的实时录制
10.7.2.1
编译LAME
10.7.2.2
Lame-EncDLL接口函数使用与说明
10.7.2.3
录制原始波形音频数据
10.7.2.4
WAVE转MP3
10.7.3
MP3播放器
10.7.4
Libmad源码分析
第十一章
DirectSound开与应用
11.1
DirectX概述
11.2
DirectSound简介
11.2.1
DirectSound的功能组成与组件对象
11.2.2
DirectSound的缓冲区
11.2.3
DirectSound的数据结构
11.3
DirectSound播放
11.3.1
VC++编译环境配置
11.3.2
DirectSound回放的基本过程
11.3.3
枚举系统输出声音设备
11.3.4
创建DirectSound对象
11.3.5
设置声音设备的协作等级
11.3.6
创建声音缓冲区对象
11.3.7
加载WAVE声音数据
11.3.8
声音缓冲区回放
11.3.9
声音缓冲区控制
11.3.10
混音
11.3.11
3D音效和声音效果
11.3.12
DirectSound3D收听者
11.3.13
设置声音特效
11.4
DirectSound录音
11.4.1
枚举系统录音设备
11.4.2
创建设备对象
11.4.3
获取录音设备的性能
11.4.4
创建录音缓冲区
11.4.5
获取录音缓冲区信息
11.4.6
为录音缓冲区对象设置通知机制
11.4.7
开始录音
11.5
使用DirecSound中的效果
11.5.1
在缓冲区中设置效果
11.5.2
混响(Reverb)
11.5.3
合唱(Chorus)
11.5.4
回响(Echo)
11.5.5
镶边(Flanger)
11.5.6
参量均衡(ParametricEQ)
11.5.7
咕噜(Gargle)
11.5.8
失真(Distortion)
11.5.9
压缩(Compression)
11.6
扬声器配置
11.6.1
设置扬声器配置
11.6.2
获取扬声器配置
11.7
程序实例
11.7.1
DirectSound播放
11.7.2
DirectSound录音
11.7.3
DirectSound效果器

编辑推荐

《数字音频规范与程序设计:基于Visual C++开发》结构清晰,逻辑严密,内容具体且涉及面广泛,不但是从事多媒体(音频)开发与应用的广大开发人员的技术指导书,同时也可作为各高等院校相关专业、非相关专业师生重要的参考读物。

作者简介

本书是作者根据多年的工作经验而总结出来的有关Windows平台下数字音频规范与程序设计的一手资料,由浅入深地介绍了当今多数主流音频相关的技术规范与编程实现,适合于对数字音频感兴趣、准备或正在从事数字音频相关工作和开发的用户。

本书共分11章,涵盖了Windows平台下数字音频相关规范与编程的许多方面,详细介绍了Windows系统下高层与底层的多媒体音频接口(API);WAVE音频的全面解析、播放与录音;MIDI音乐的全面解析、播放与录制;USB MIDI驱动设计;MP3的格式与编解码;乐音的基频检测;音频混音器原理与编程;低延迟ASIO音频驱动开发;普通音频插件与VST(i)插件的设计;游戏开发中经常使用的DirectSound播放与录制等。

本书最大的特色是不但针对多媒体音频应用程序的开发做了较全面的介绍,可以满足大部分常规音频编程用户的需求,而且对音频驱动的开发也做了较多的切入。其中一部分是作者近几年独自研究的成果,对于有这方面需求的读者来说都是很宝贵的参考资料。

本书结构清晰,逻辑严密,内容具体且涉及面广泛,不但是从事多媒体(音频)开发与应用的广大开发人员的技术指导书,同时也可作为各高等院校相关专业、非相关专业师生重要的参考读物。

本书中每章都提供了一个或多个经典的编程实例程序,附带在光盘中赠送,光盘中提供了所有章节中实例程序的Visual C++源代码。

图书封面


 数字音频规范与程序设计下载



发布书评

 
 


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024