在C#中利用DirectX实现声音播放

在C#中利用DirectX实现声音播放,第1张

在C#中利用DirectX实现声音播放,第2张

感觉声音播放比较简单。让我们从播放声音开始。为什么我会这么想?我也不知道。

下面是DirectX播放声音最简单的例子。我尽量省略不相关的代码。最后的代码只有19行。够简单吗?

准备工作:

1.安装了DirectX SDK(有9个DLL文件)。我们这里只用MicroSoft.DirectX.dll和Microsoft.Directx.DirectSound.dll。

2.WAV文件。这样的文件很容易找到,QQ目录里也有不少。这里不多说了。)名字叫SND。WAV,并且它被放置在最后一个目标程序的相同目录下。

开始写程序。使用UltraEdit即可。

1.在导入到DirectX的DLL文件的名称空之间:

使用微软。DirectX
使用Microsoft。DirectX . DirectSound

2.设置设备。在微软。DirectX.directsound空我们导入的房间,有一类设备。这代表系统中的声音设备。

设备dv =新设备();

3.设置合作级别。因为Windows是一个多任务系统,并且该设备不是独占的,所以您应该在使用该设备之前设置它的协作级别。调用Device:的SetCooperativeLevel方法,其中第一个参数是控件,第二个参数是枚举类型。

在这个程序中,Control我只是得到了一个参数,并把它塞了进去(非常汗!)。如果你在windows程序中,你可以用这个来代替。第二个参数是优先级,意思是优先播放。

dv。SetCooperativeLevel((new UF()),CooperativeLevel。优先);

4.创建一个缓冲区。对于以上的音响设备,他都有自己的缓冲,叫做主缓冲。在系统中,设备的主缓冲器。由于windows是多任务的(这又来了!),所以几个程序可以用一个设备同时播放声音,所以每个程序都有自己的二级缓冲区来播放自己的声音。

根据系统中每个节目的优先级,从每个二级缓冲区读取内容,并按相应的顺序在主缓冲区播放。在这里,我们为SND打开一个缓冲区。声音资源文件

其中,第一个参数表示文件名(傻子都能看出来!),二是需要使用的设备。

SecondaryBuffer buf = new SecondaryBuffer(@ " snd . wav ",dv);

5.然后就可以玩了。第一个参数表示优先级,0表示最低。第二个参数是播放模式,这里是循环播放。

buf。播放(0,BuffERPlayFlags。循环);

6.由于命令行程序没有消息循环,执行完代码就退出了,所以我们需要暂停程序。

控制台。read();

7.关键部分完成了。这里只是交代一下刚才那个倒霉的新用友()是什么。这完全是为了满足SetCooperativeLevel的参数要求。我不知道这有什么额外的影响(如果你因为这个烧了你的声卡)

UF类:表单{}

8.代码写完了~ ~ ~。可以编译如下。这里的编译比较复杂。

csc /r:directX\MicroSoft。DirectX.dll;directX\Microsoft。Directx.DirectSound.dll dxsnd . cs

这里我把2个DLL文件放在当前目录的directx目录下(这个是我自己搭建的,你只需要指出这2个文件的位置。)

顺便解释一下我的目录结构:

|
|-dxsnd . cs
|-snd . wav
|-
|
|-微软。DirectX . dll
|-Microsoft.Directx.dll

以下是完整的代码:

//dxsnd . cs
使用System
使用Microsoft。DirectX
使用Microsoft。DirectX . DirectSound
使用系统。Windows . Forms
命名空间test1
{
类测试
{
public static void Main(string[]args)
{
Device dv = new Device();
dv。SetCooperativeLevel((new UF()),CooperativeLevel。优先);
SecondaryBuffer buf = new SecondaryBuffer(@ " snd . wav ",dv);
buf。播放(0,BufferPlayFlags。循环);
控制台。ReadLine();
}
class UF:Form { }
}
}


位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 在C#中利用DirectX实现声音播放

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情