关键字: vb.net directx 9 directsound audiovideoplayback 作者:董含君
本来打算开始3d sound的,还有很多东西前面漏掉了,所以先补充一下
希望大风跟么么茶能早点完成direct3d.
=============以上是废话=======================
前面的例子都是读取的wav
打开资源管理器你会发现他们的内存使用情况.
有多大的wav内存就要消耗多少.一个4分钟以内的音乐消耗大概30m左右.
当然也要看音质,这个跟体积是成正比的.如果你打算做播放器,而不是
游戏音效(游戏背景音乐现在都用mp3或者其他要求即时性不强的方法
来实现)那么可以考虑用流式输入.就是把new secondarybuffer(filename...
换成io.stream类才行
io.stream不能直接继承....
1 自己写一个soundstream,可以,但是我比较懒,不干
2 找现成的,filestream
于是原来的
buf = new secondarybuffer("g:/media/wav/rod2.wav", desc, ad)
变成了现在的
dim s as new filestream("g:/media/wav/rod2.wav", filemode.open)
buf = new secondarybuffer(s, desc, ad)
(其实还有很多办法,但是那个电子鼓的演示实在太长...微软又没有提供
相关的代码)
经过测试,不使用stream的时候播放一个15m的程序消耗内存38m
使用stream的时候,消耗内存高达50多m!!!!
我设置缓冲区+异步播放同样狂吃内存.
看来filestream就是要全装了(以后慢慢研究)
或者为了节约内存,自己写soundstream类吧
如果你仅仅想用来播放音乐,强烈建议您使用audio类
这个不应该算dsound,但是还是顺便提一下吧
首先再工程里面添加对audiovideoplayback的引用
然后imports
imports microsoft.directx.audiovideoplayback
用的是后就简单了
const fn = "g:/media/wav/teru_teru_momiji.wav"
dim au as new audio(fn)
au.play()
而且仅用了3m的内存,超级节约.
最重要的,还可以网络播放.
dim au as audio
dim u as new system.uri("mms://music.comicme.net/free/animemusic/[m][美鸟伴身边][midori][美鸟の日々]/ed%20single%20-%20もう少し…もう少し…/01%20-%20もう少し…もう少し….wma")
au = audio.fromurl(u)
au.play()
不知道是应该哭还是应该笑.微软对托管的directx进行了封装,就把原来
的directshow 以及 directsound 的一部分放进去了(video 跟 audio
正好对应着dshow 跟 dsound&dmusic)
通过代码可以得知,实在是简单太多了.问题是我想在d3dsurface里面播放
动画只能自己想办法了....
==============以下开始废话==============
本来还3d的,结果这里浪费了这么多时间.
如果你打算播放音乐,那么老老实实的用audio类.dsound只能放wav(我还
没找到播放其他格式的方法.formats里面只有俩,一个pcm一个flaot)
而且播放的时候内存需求超大,做音效的时候,如果数量比较多,那么要
考虑定期释放了.不然光音效就占用了好几十m,图像就没地方了...