用DirectX Audio和DirectShow播放聲音和音樂(7) 摘要:
MP3是一種音頻壓縮格式,它通過刪除或修改音樂中不易被人耳察覺的部分來使音樂更小,占用的存儲空間更少。在項目中使用MP3(.MP3文件)需要使用
DirectX中的DirectShow組件,在這個組件的幫助下,只需幾行短短的代碼,就能使用任意的MP3文件了(DirectShow也支持其他的媒體文件,比如WMA,AVI,MPG等)。當然要想使用更多的媒體文件,必須已經在操作系統中安裝了解碼器。
解碼器(codec)是一個程序,用于解碼或編碼一些指定的格式(比如MP3解碼器專門解碼.MP3文件)。通常可以從發(fā)明或者創(chuàng)建這種格式的公司中獲取這種格式的解碼器。比如,
MP3解碼器來自于Fraunhofer Insitute。幸運的是,MP3解碼器等幾種比較流行的解碼器已經被集成到操作系統中(比如.mp3,.avi,.mpg等),而無需另外從
internet下載這些格式的解碼器了。
要在項目中使用DirectShow,需要包含dshow.h頭文件,并且在鏈接庫中加入strmiids.lib。
用DirectX Audio和DirectShow播放聲音和音樂(6) 摘要:
DirectMusic加載器在使用固有文件或者MIDI文件的時候會自動加載默認的音色庫。樂器總是被一組一組地使用,很多組樂器音色的集合被稱之為 DLS音色庫(可下載的音樂)。每組樂器使用三個值編號,它們是:最高有效位(most-significant
byte,MSB),最低有效位(least-significant byte,LSB)和組編號。
通常播放MIDI文件的樂器組是標準化的,也就是說編號為1的樂器總是鋼琴,如果想使用新的鋼琴作為樂器,可以從DLS集合中加載。
DirectMusic包含了標準的樂器集合,通常稱之為GM/GS集合(GM = General MIDI,GS = General
Synthesizer),這個集合由日本羅蘭(Roland)公司提出,稱為MIDI合成器標準。
用DirectX Audio和DirectShow播放聲音和音樂(5) 摘要: 在DirectAudio中,DirectSound負責數字音頻方面的處理,而DirectMusic則負責Midi文件(Musical
Instrument Data
Interface,數字音樂格式,.mid作為文件擴展名),DirectMusic固有音樂文件(.sgt文件)和數字錄音設備錄制的波形格式文件(.wav文件)等文件的播放操作。
能體現DirectMusic的強大之處是DirectMusic固有文件格式,一首用DirectMusic固有文件格式制作的音樂包括數個小音樂格式,這些樣式還能用不同的樂器組合一個接一個地播放。隨機的樣式和樂器的選取創(chuàng)造出了隨時都在改變的音樂,再加上節(jié)拍變化,就形成了一個魅力無窮的音樂系統。DirectMusic的另一個特性是可以使用“基調”,就是在正在播放的音樂片段上疊加一段其他音樂,新加入的音樂可以很平滑的融入到原有的音樂中。這在很多時候都有用,比如一個玩家完成了一個目標,可以馬上播放一段“獲得榮譽”的音樂提示他。
用DirectX Audio和DirectShow播放聲音和音樂(4) 摘要:
“通告”是一種觸發(fā)機制,當緩存中播放位置達到某個固定的位置時,就會向程序發(fā)出通知。有了通告,就可以知道播放什么時候結束,這種機制在比較長的聲音中特別有效。通告使用一個叫做IDirectSoundNotify8的對象,這個程序的作用就是在音頻緩存中標記一個位置,然后觸發(fā)事件通知應用程序,而應用程序可以通過消息循環(huán)或者單獨的線程進行處理。
標記的位置可以是一個緩存中的偏移值,也可以是由宏指定的停止標記,這個表示停止的宏是DSBPN_OFFSETSTOP。并不是任何偏移值都可以用來作為通告發(fā)生的位置,這個值必須和音頻的數據塊對齊,并且通告的偏移必須按照從小到大的順序排列。偏移值是不能夠共享的,如果使用
DSBPN_OFFSETSTOP宏,它必須被放在最后。舉例來說,對于一個塊大小為2的音頻(單聲道、16位),嘗試對偏移為4和5的位置設通告會導致失敗,因為偏移量位置4和5都在同一個數據塊中。
用DirectX Audio和DirectShow播放聲音和音樂(3) 摘要: 所謂聲道平衡就是調節(jié)左右聲道的大小,
DirectSound定義了兩個宏幫助把聲道平衡調節(jié)到最左邊和最右邊,使用DSBPAN_LEFT將聲道調整到最左邊,使用DSBPAN_RIGHT
將聲道調整到最右邊。
通過調用IDirectSoundBuffer8::SetPan函數可以調節(jié)聲道平衡。
用DirectX Audio和DirectShow播放聲音和音樂(2) 摘要:
讓緩存在程序啟動的時候開始播放可以節(jié)省不少處理器時間。因為內存資源是有限的,特別是在硬件設備中,而你使用的數據緩存可能需要任意大小,因此主音頻緩沖區(qū)和輔助緩沖區(qū)使用環(huán)形緩存。因為數據緩沖是一個一維數組,所以可以讓這個緩沖區(qū)頭尾相接。這是一個十分強大的技術,利用這個技術我們可以節(jié)省大量的內存。
聲音在進行混音處理后,被送入環(huán)形主音頻緩存。一旦播放位置到達主音頻緩存的終點,聲音又從頭開始播放,這樣聲音就被無間隙地連續(xù)播放。如果想要使用緩存的這種循環(huán)特性,需要指定啟用循環(huán)播放的特性,若不然當播放到緩沖區(qū)終點時,播放就停止了。
為了播放緩存中的音頻數據(在開啟循環(huán)選項的情況下播放),需要調用Play函數。
用DirectX Audio和DirectShow播放聲音和音樂(1) 摘要:
音樂就是一系列的音符,這些音符在不同的時間用不同的幅度被播放或者停止。有非常多的指令被用來播放音樂,但是這些指令的操作基本相同,都在使用各種各樣不同的音符。在計算機上進行作曲,實際上是存儲了很多組音樂,回放時由音頻硬件將這些音符播放出來。
Midi格式(文件擴展名是.MID)是存儲數字音樂的標準格式。
DirectMusic 音樂片段(music segments)使用.SGT文件擴展名,其他的相關文件包括樂隊文件(band file .BND),這種文件里面包含樂器信息;弦映射表文件(chordmaps
file .CDM)包含在回放時修改音樂的和弦指令;樣式文件(styles file .STY)包含回放樣式信息;模板文件(templates file
.TPL)包含創(chuàng)造音樂片段的模板。