第1章 Windows音频体系与Visual C++开发基础 1
导读 1
1.1 认识声音与音频 1
1.2 Windows音频体系层次结构 2
1.2.1 用户模式与内核模式 2
1.2.2 关于声音的延迟问题及解决方法 3
1.3 Visual C++开发基础 5
1.3.1 区分C、C++和Visual C++三者的关系 5
1.3.2 事件驱动与消息处理 8
1.3.3 开发环境概述 11
1.3.4 MFC概述 12
1.3.5 利用向导创建一个简单的对话框程序 13
第2章 MCI与MMAPI多媒体编程接口 20
导读 20
2.1 MCI简介 20
2.1.1 MCI逻辑结构 21
2.1.2 MCI接口、函数与命令 21
2.1.3 MCI消息与宏定义 24
2.2 MCI编程步骤 24
2.3 MCI编程实例 27
2.3.1 播放CD 27
2.3.2 WAVE播放与录音 27
2.3.3 基于MCIWnd的多媒体播放器 28
2.4 MMAPI简介 28
2.4.1 四种多媒体文件I/O 29
2.4.2 波形音频处理 40
2.4.3 MIDI的流缓冲区与非流缓冲区处理 41
2.4.4 多媒体定时器 47
第3章 WAVE格式及播放与录制 49
导读 49
3.1 认识WAVE 49
3.2 WAV文件结构 50
3.3 采样点与采样帧的区别 51
3.4 WAVE中常用的一些块 53
3.4.1 格式块 53
3.4.2 数据块 54
3.4.3 提示块 55
3.4.4 播放列表块 55
3.4.5 关联数据块 56
3.4.6 采样块 57
3.5 多媒体波形音频函数 59
3.6 波形音频处理的回调机制 60
3.7 WAVE播放 61
3.7.1 WAVE播放基本流程 61
3.7.2 双缓冲播放机制 65
3.7.3 关于死锁的问题 66
3.8 WAVE录音 66
3.9 编程实例 70
3.9.1 WAV文件解析及分离与合并 70
3.9.2 WAVE播放器 71
3.9.3 WAVE录音机 71
第4章 MIDI相关标准与程序设计 73
导读 73
4.1 MIDI规范 73
4.1.1 什么是MIDI 73
4.1.2 MIDI信息 75
4.1.3 其他MIDI规范 94
4.1.4 GM、Gs与XG 96
4.1.5 GM2 99
4.2 MIDI文件解析 100
4.2.1 MIDI文件格式 100
4.2.2 MIDI文件示例 107
4.2.3 与MIDI相关的时间计算 108
4.2.4 程序实例 111
4.3 USB MIDI 123
4.3.1 USB MIDI概述 123
4.3.2 USB MIDI的实现机制 124
4.3.3 USB-MIDI功能器件 125
4.3.4 USB MIDI数据格式 129
4.3.5 USB MIDI操作模型 130
4.3.6 描述符 132
4.3.7 USB MIDI驱动设计 137
4.3.8 USB驱动程序 145
4.3.9 用户模式音频驱动几个上层接口的实现 154
第5章 数字音乐合成 159
导读 159
5.1 合成器概述 159
5.2 MIDI的发音原理 160
5.3 FM合成原理 161
5.4 波表合成 163
5.4.1 波表合成器工作原理 165
5.4.2 波表合成的关键技术 166
5.4.3 频率变换 167
5.4.4 循环(Loop) 168
5.4.5 波表合成器的衡量指标 168
5.5 软波表与硬波表 169
5.6 音色制作 170
5.6.1 样本准备与分配 170
5.6.2 样本参数调整 171
5.6.3 音色参数调整 171
5.6.4 设置效果参数 172
5.6.5 保存音色文件 172
第6章 音频混音器编程 173
导读 173
6.1 混音器原理 173
6.1.1 声卡硬件模型 174
6.1.2 音频线路 175
6.1.3 控件 177
6.2 混音器编程 179
6.2.1 Mixer API函数介绍 180
6.2.2 枚举系统中的混音器设备 180
6.2.3 打开混音器设备 181
6.2.4 枚举音频线路 182
6.2.5 获取线路信息 185
6.2.6 枚举线路的相关控件 185
6.2.7 获取与线路相关的所有控件信息 187
6.2.8 通过控件ID获取控件信息 188
6.2.9 通过控件类型获取控件信息 188
6.2.10 获取或设置控件的值 189
6.2.11 多声道控件 190
6.2.12 多条目控件 191
6.2.13 混音器专用消息 193
6.3 程序实例——混音器调节软件 193
第7章 音频插件设计 195
导读 195
7.1 普通音频插件 195
7.1.1 插件的实现原理 195
7.1.2 基于动态链接库的方法实现音频插件 196
7.1.3 实现支持三种插件类型的MiNi播放器 200
7.1.4 给Winamp编写一个MIDI键盘插件 209
7.1.5 基于ATL的方法实现COM插件 212
7.2 VST音频插件 212
7.2.1 VST插件概述 212
7.2.2 VST SDK与音频数据处理 214
7.2.3 创建一个最简单的VST插件 214
7.2.4 设计一个Stereo Delay效果的VST插件 218
7.2.5 VST XML文件 226
7.2.6 设计一个简单的FM合成器插件 226
7.2.7 VST GUI编程 242
7.2.8 实现一个自行设计界面的Ring Modulator插件 247
7.2.9 VST宿主程序设计 249
第8章 基音的时频域检测 253
导读 253
8.1 概述 253
8.2 音乐信号的前期处理 254
8.2.1 信号数字化 254
8.2.2 音框 255
8.2.3 静音与杂音处理 256
8.3 时域基频检测方法 259
8.3.1 自相关函数法 259
8.3.2 自相关函数法的程序实例 261
8.3.3 平均振幅差函数法 261
8.3.4 平均振幅差函数法的程序实例 262
8.4 频域检测方法 263
8.4.1 傅里叶变换的原理及其物理意义 263
8.4.2 快速傅里叶变换法 270
8.4.3 快速傅里叶变换法的程序实例 271
8.4.4 谐波积频谱法 272
8.4.5 谐波积频谱法的程序实例 273
8.4.6 倒谱法 274
8.4.7 极大似然法 275
8.5 时频域检测方法 276
8.5.1 小波变换法 276
8.5.2 ACF与AMDF结合法 276
8.5.3 ACF与AMDF结合法的程序实例 277
8.6 基频检测的后期处理 277
8.7 软件调音器的设计 278
第9章 ASIO音频驱动设计 280
导读 280
9.1 何为ASIO 280
9.2 用户层ASIO驱动设计 281
9.2.1 ASIO的有限状态机 282
9.2.2 音频数据流的传输 283
9.2.3 ASIO驱动接口 286
9.2.4 数据同步 289
9.2.5 四个重要的回调函数 289
9.2.6 几个重要的数据结构 290
9.2.7 输入输出延迟问题 293
9.3 用户层ASIO驱动的实现 295
9.3.1 准备工作 297
9.3.2 添加自注册功能 298
9.3.3 实现IASIO的所有接口 299
9.4 在音频软件中使用ASIO驱动 306
9.4.1 ASIO播放 307
9.4.2 ASIO录音 312
第10章 MP3格式与编解码 316
导读 316
10.1 MP3文件格式 316
10.1.1 MP3简介 316
10.1.2 MP3文件格式 320
10.1.3 程序实例——MP3文件分析 335
10.2 MP3编解码 336
10.2.1 MP3编码的相关概念 336
10.2.2 MP3编码过程 359
10.2.3 MP3解码过程 377
10.2.4 程序实例 390
第11章 DirectSound开发与应用 410
导读 410
11.1 DirectX概述 410
11.2 DirectSound简介 413
11.2.1 DirectSound的功能组成与组件对象 414
11.2.2 DirectSound的缓冲区 414
11.2.3 DirectSound的数据结构 415
11.3 DirectSound播放 415
11.3.1 Visual C++编译环境配置 415
11.3.2 DirectSound回放的基本流程 416
11.3.3 枚举系统输出声音设备 417
11.3.4 创建DirectSound对象 418
11.3.5 设置声音设备的协作等级 418
11.3.6 创建声音缓冲区对象 420
11.3.7 加载WAVE声音数据 422
11.3.8 声音缓冲区回放 422
11.3.9 声音缓冲区控制 428
11.3.10 混音 429
11.3.11 3D音效和声音效果 430
11.3.12 DirectSound 3D收听者 434
11.3.13 设置声音特效 434
11.4 DirectSound录音 435
11.4.1 枚举系统录音设备 436
11.4.2 创建设备对象 436
11.4.3 获取录音设备的性能 436
11.4.4 创建录音缓冲区 436
11.4.5 获取录音缓冲区信息 437
11.4.6 为录音缓冲区对象设置通知机制 438
11.4.7 开始录音 439
11.5 使用DirectSound中的效果 441
11.5.1 在缓冲区中设置效果 441
11.5.2 混响(Reverb) 442
11.5.3 合唱(Chorus) 443
11.5.4 回响(Echo) 444
11.5.5 镶边(Flanger) 445
11.5.6 参量均衡(Parametric EQ) 446
11.5.7 咕噜(Gargle) 447
11.5.8 失真(Distortion) 448
11.5.9 压缩(Compression) 449
11.6 扬声器配置 451
11.6.1 设置扬声器配置 451
11.6.2 获取扬声器配置 451
11.7 程序实例 452
11.7.1 DirectSound播放 452
11.7.2 DirectSound录音 452
11.7.3 DirectSound效果器 453
附录 MP3附表 454
参考文献 459