關(guān)鍵字: vb.net directx 9 directsound audiovideoplayback 作者:董含君
本來(lái)打算開(kāi)始3d sound的,還有很多東西前面漏掉了,所以先補(bǔ)充一下
希望大風(fēng)跟么么茶能早點(diǎn)完成direct3d.
=============以上是廢話=======================
前面的例子都是讀取的wav
打開(kāi)資源管理器你會(huì)發(fā)現(xiàn)他們的內(nèi)存使用情況.
有多大的wav內(nèi)存就要消耗多少.一個(gè)4分鐘以內(nèi)的音樂(lè)消耗大概30m左右.
當(dāng)然也要看音質(zhì),這個(gè)跟體積是成正比的.如果你打算做播放器,而不是
游戲音效(游戲背景音樂(lè)現(xiàn)在都用mp3或者其他要求即時(shí)性不強(qiáng)的方法
來(lái)實(shí)現(xiàn))那么可以考慮用流式輸入.就是把new secondarybuffer(filename...
換成io.stream類才行
io.stream不能直接繼承....
1 自己寫(xiě)一個(gè)soundstream,可以,但是我比較懶,不干
2 找現(xiàn)成的,filestream
于是原來(lái)的
buf = new secondarybuffer("g:/media/wav/rod2.wav", desc, ad)
變成了現(xiàn)在的
dim s as new filestream("g:/media/wav/rod2.wav", filemode.open)
buf = new secondarybuffer(s, desc, ad)
(其實(shí)還有很多辦法,但是那個(gè)電子鼓的演示實(shí)在太長(zhǎng)...微軟又沒(méi)有提供
相關(guān)的代碼)
經(jīng)過(guò)測(cè)試,不使用stream的時(shí)候播放一個(gè)15m的程序消耗內(nèi)存38m
使用stream的時(shí)候,消耗內(nèi)存高達(dá)50多m!!!!
我設(shè)置緩沖區(qū)+異步播放同樣狂吃內(nèi)存.
看來(lái)filestream就是要全裝了(以后慢慢研究)
或者為了節(jié)約內(nèi)存,自己寫(xiě)soundstream類吧
如果你僅僅想用來(lái)播放音樂(lè),強(qiáng)烈建議您使用audio類
這個(gè)不應(yīng)該算dsound,但是還是順便提一下吧
首先再工程里面添加對(duì)audiovideoplayback的引用
然后imports
imports microsoft.directx.audiovideoplayback
用的是后就簡(jiǎn)單了
const fn = "g:/media/wav/teru_teru_momiji.wav"
dim au as new audio(fn)
au.play()
而且僅用了3m的內(nèi)存,超級(jí)節(jié)約.
最重要的,還可以網(wǎng)絡(luò)播放.
dim au as audio
dim u as new system.uri("mms://music.comicme.net/free/animemusic/[m][美鳥(niǎo)伴身邊][midori][美鳥(niǎo)の日々]/ed%20single%20-%20もう少し…もう少し…/01%20-%20もう少し…もう少し….wma")
au = audio.fromurl(u)
au.play()
不知道是應(yīng)該哭還是應(yīng)該笑.微軟對(duì)托管的directx進(jìn)行了封裝,就把原來(lái)
的directshow 以及 directsound 的一部分放進(jìn)去了(video 跟 audio
正好對(duì)應(yīng)著dshow 跟 dsound&dmusic)
通過(guò)代碼可以得知,實(shí)在是簡(jiǎn)單太多了.問(wèn)題是我想在d3dsurface里面播放
動(dòng)畫(huà)只能自己想辦法了....
==============以下開(kāi)始廢話==============
本來(lái)還3d的,結(jié)果這里浪費(fèi)了這么多時(shí)間.
如果你打算播放音樂(lè),那么老老實(shí)實(shí)的用audio類.dsound只能放wav(我還
沒(méi)找到播放其他格式的方法.formats里面只有倆,一個(gè)pcm一個(gè)flaot)
而且播放的時(shí)候內(nèi)存需求超大,做音效的時(shí)候,如果數(shù)量比較多,那么要
考慮定期釋放了.不然光音效就占用了好幾十m,圖像就沒(méi)地方了...