首页 > 编程 > .NET > 正文

VB.NET 使用DirectSound 3

2024-07-10 13:12:16
字体:
来源:转载
供稿:网友
关键字: 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,图像就没地方了...


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表