數字音頻規范與程序設計:基于Visual C++開發
-
【作 者】曹強 編著
【I S B N 】978-7-5084-9819-5
【責任編輯】李炎
【適用讀者群】本專通用
【出版時間】2012-06-01
【開 本】16開
【裝幀信息】平裝(光膜)
【版 次】第1版第1次印刷
【頁 數】472
【千字數】715
【印 張】29.5
【定 價】¥58
【叢 書】暫無分類
【備注信息】贈1CD
簡介
本書特色
前言
章節列表
精彩閱讀
下載資源
相關圖書
本書是作者根據多年的工作經驗而總結出來的有關Windows平臺下數字音頻規范與程序設計的一手資料,由淺入深地介紹了當今多數主流音頻相關的技術規范與編程實現,適合于對數字音頻感興趣、準備或正在從事數字音頻相關工作和開發的用戶。
本書共分11章,涵蓋了Windows平臺下數字音頻相關規范與編程的許多方面,詳細介紹了Windows系統下高層與底層的多媒體音頻接口(API);WAVE音頻的全面解析、播放與錄音;MIDI音樂的全面解析、播放與錄制;USB MIDI驅動設計;MP3的格式與編解碼;樂音的基頻檢測;音頻混音器原理與編程;低延遲ASIO音頻驅動開發;普通音頻插件與VST(i)插件的設計;游戲開發中經常使用的DirectSound播放與錄制等。
本書最大的特色是不但針對多媒體音頻應用程序的開發做了較全面的介紹,可以滿足大部分常規音頻編程用戶的需求,而且對音頻驅動的開發也做了較多的切入。其中一部分是作者近幾年獨自研究的成果,對于有這方面需求的讀者來說都是很寶貴的參考資料。
本書結構清晰,邏輯嚴密,內容具體且涉及面廣泛,不但是從事多媒體(音頻)開發與應用的廣大開發人員的技術指導書,同時也可作為各高等院校相關專業、非相關專業師生重要的參考讀物。
本書中每章都提供了一個或多個經典的編程實例程序,附帶在光盤中贈送,光盤中提供了所有章節中實例程序的Visual C++源代碼。
本書為作者多年工作經驗總結出來的有關Windows平臺下數字音頻規范與程序設計的一手資料,由淺入深地介紹 了當今多數主流音頻相關的技術規范與編程實現。
本書不但針對多媒體音頻應用程序的開發做了較全面的介紹,可以滿足大部分常規音頻編程用戶的需求,而且對音頻驅動的開發也做了較多的切入,可以說本書是目前為止市場上最為全面的音頻應用學習和開發資料。
書中作者把自己的技術和經驗通過文字、圖形相結合的方式進行知識點的描述,通俗易懂,同時通過大量的精選實例程序進行過程和效果展示,具體實用,所見即所得。
音頻是多媒體技術中非常重要的一部分,它往往與視頻結合在一起廣泛應用于影視娛樂、多媒體系統、電子樂器、游戲設計、廣告設計等諸多行業。近幾年來,隨著多媒體技術的迅速發展,音頻所涉及的領域也越來越廣泛,越來越深入人們日常生活的方方面面,多媒體開發也是近年來開發人員所關注的重點。
本書包含了Windows平臺下音頻開發的許多方面,主要由如下幾部分組成:Windows多媒體音頻API;多種主流音頻格式及其播放與錄制,包括WAVE、MIDI、MP3等;數字音樂合成;音頻插件;基頻檢測;MP3編解碼等。為了使讀者能夠抓住重點,把握解決問題的方法,書中每章都安排了由Visual C++實現的一個或多個實例程序,力求做到理論聯系實踐,所見即所得。
因本書涉及的概念和專業術語比較多,并且在實際應用中所需要的原理也比較廣泛,建議讀者在閱讀本書時可以先略過不懂的概念或詞匯,因為篇幅的限制也許對它們沒在書中做出詳細的解釋,不過有關樂理的常識大部分在本人的博客上可以找到詳細的解釋和說明,有此方面需求的讀者請關注我的博客空間:http://blog.sina.com.cn/consonance。
雖然本書的所有實例程序均基于Visual C++,但為了能夠使不同開發平臺下的開發人員也能很好地理解其實現原理與過程,一些核心代碼在書中都有詳細的解釋,并且大部分關鍵代碼都已通過類的形式封裝好,因此要移植到其他的開發平臺也不是很困難的事。當然,本書的第1章對Visual C++的入門做了最基本的介紹,目的就是希望每位讀者都能夠熟悉Visual C++的一些基本使用方法,會使用并看懂書中的所有實例程序。
本書的所有內容都是作者在實際工作中總結出來的寶貴而實用的經驗,有些還是個人多年來專心研究的成果,比如VST(i)插件、ASIO音頻驅動等。書中所有程序實例也是本人精心挑選設計而成,我想對不少讀者來說應該都是很有參考價值的,某些代碼甚至可以直接應用在你的項目開發中。CD中的所有源代碼都通過了Visual C++ 6.0和Visual Studio 2005的編譯。
本書既可以作為廣大音頻行業工作者的參考書,也可以供從事多媒體相關研究和設計的院校師生使用。
應該說本書的創作過程是艱難的,能夠以這樣全面和完整的方式與讀者見面,我想離不開我的家人、朋友和同事以及中國水利水電出版社的全力支持。
感謝顧冰峰先生和郭潤博先生為本書寫的序,使我的作品蓬蓽生輝,特別是顧總在本書的構架和篇章的安排上給了我很多非常好的建議,從而加速了此書的出版。
感謝公司董事長Fanny,因為得理公司給了我很好的學習環境和生活環境,使我有更多的學習機會,在這樣的環境中我才能靜下心來完成此書。
感謝中國樂器協會電鳴樂器分會會長盛子斐先生對本書的特別指導和宣傳。
感謝中國水利水電出版社楊慶川老師的耐心指導和幫助,她請業內專業的老師看了本書的內容簡介和目錄后提出了幾點非常中肯的意見,比如第1章的內容就是我后來添加進來的。
感謝中國水利水電出版社編輯李炎老師的信任和支持,將書中的錯誤降至最低,使本書更加完整。
感謝我的父母和岳父岳母,謝謝他們這幾年的所有辛勤付出和源源不斷的精神鼓勵。
最后,特別感謝我的妻子,因為寫作占用了我很多休息時間,確切地說是三年的業余時間,很多時候都忽略了她的感受,還要承擔家里的家務活,在此我要對她說一聲辛苦。
希望本書對讀者有所幫助,也希望能夠為音頻行業的發展做出一點點貢獻。盡管在編寫本書時盡了最大的努力,但由于工作繁忙和限于作者的水平,書中難免會出現一些不足甚至錯誤之處,還望廣大讀者給予批評和指正。
推薦序二
前言
第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
- C程序設計實踐教程 [劉衛國]
- C程序設計(慕課版) [劉衛國]
- 程序設計基礎實踐教程(C/C++語言版) [張桂芬 葛麗娜]
- C++案例項目精講 [主編 楊國興]
- SwiftUI完全開發 [李智威 著]
- MySQL數據庫項目式教程 [陳亞峰]
- C語言程序設計習題與實驗指導(第二版) [主編 甄增榮 張賓]
- C語言程序設計(第二版) [主編 甄增榮 田云霞]
- Unity3D虛擬現實應用開發實踐 [主 編 劉龍]
- Python程序設計 [主編 姜春磊 陳虹潔]
- C語言程序設計實踐教程(活頁式) [主編 鄭茵 陳巍 滕泓虬]
- 面向對象程序設計 [主編 張勇 張平華 趙小龍]
- Python程序設計基礎及實戰 [主編 劉健]
- C語言程序設計 [姜雪]
- Python程序設計實踐教程 [王鶴琴 蔡正保]
- C++程序設計實踐教程(第三版) [主編 劉衛國 曹岳輝]
- C++程序設計(第三版) [主編 曹岳輝 劉衛國]
- C語言程序設計項目化教程(活頁式) [主編 張利華 潘曉利]
- 機器人流程自動化(RPA)實戰——基于UiPath [主編 金鑫]
- Python 語言程序設計實踐指導 [主編 張雙獅]
- Python程序設計案例教程 [主編 毛錦庚 鐘肖英 周賢來 ]
- 基于.NET Core框架的分布式系統架構設計 [湯佳 著]
- Python語言程序設計教程 [郭其標 房宜汕]
- C語言同步案例習題精解 [主編 肖朝暉]
- Python程序設計 [李國燕 王新強 劉佳 等編著]
- Python程序設計項目化教程(活頁式) [主編 盧鳳偉]
- Java編程基礎案例式教程 [主編 陳艷華 唐春蘭]
- Python語言同步案例習題精解 [主編 肖朝暉]
- Unity應用開發與實戰(微課版) [主 編 程永恒]
- PHP程序設計項目化教程 [主 編 杜海穎]