说同时播放两首音乐有点不妥,因为这样没什么意义。今天我想说的是在播放背景音乐的同时,可以播放音效,类似于游戏中的声音。我们都知道在游戏中不仅有背景音乐,还有各种特殊的声音,其实就是音效啦。我在做课程设计时,正好也需要实现类似游戏的这种功能,心想这应该不难吧,做了才知道并非易事。
起初我是用System.Media.SoundPlayer来同时播放两首音乐,结果总是只听到一首歌的声音,网上查了下,
原来System.Media.SoundPlayer是不能同时播放两首歌曲的(注:我开了两个线程来播放也是不行)。既然不行,那只好寻找其它方法了,找了很久,网上的资料零零散散,具体介绍的没有一个(至少我没发现)。
经过努力,我实现了用C#在播放背景音乐的同时可以播放音效。我实现的思路如下:
1)用System.Media.SoundPlayer 来播放背景音乐
2)用Microsoft.DirectX.DirectSound 来播放音效(其实吧,按网上的说法,用DirectSound来同时播放两首音乐是完全可以的,这个我没有测试,有兴趣的童鞋不妨一试)
实现过程如下:
1)音乐资源文件的添加和System.Media.SoundPlayer的使用,请看我以下这篇文章,这里不再敖述。
http://blog.csdn.net/friendan/article/details/8209413
2)这里主要介绍Microsoft.DirectX.DirectSound的使用方法
我测试时使用的DirectX版本为DirectX 10,其下载地址为:
http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe
下载DirectX 10,然后安装完DirectX 10后,我们就可以进到VS2008中对其进行引用了。
展开-->>解决方案资源管理器-->>TestCSharp(这是我的解决方案的名称,请灵活应变)-->>引用-->右键-->添加引用
//截图如下
//在添加引用窗口中选择浏览,然后找到以下目录:
C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0
找到以上目录后,在该目录里面找到以下连个dll文件,将它们添加到工程中来
1.)Microsoft.DirectX.DirectSound.dll 2.)Microsoft.DirectX.dll
//呵呵,这两个dll文件我已经上传到网上了,下载地址为:
http://download.csdn.net/download/friendan/4804057
//截图如下
//添加完后,引用中就会出现Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll了
如下图所示:
接下来我们就可以写代码来用Microsoft.DirectX.DirectSound来播放音效或音乐了。
//我程序截图如下
程序代码如下(别忘了引入命名空间:using Microsoft.DirectX.DirectSound)
//程序启动时...
private void Form1_Load(object sender, EventArgs e)
{
System.Reflection.Assembly assembly;
System.Media.SoundPlayer sp;
assembly = System.Reflection.Assembly.GetExecutingAssembly();
sp = new System.Media.SoundPlayer(global::TestCSharp.Properties.Resources.bkMusic);
sp.PlayLooping();
}
//按钮【播放音效】
private void btnPlay_Click(object sender, EventArgs e)
{
SecondaryBuffer secBuffer;//缓冲区对象
Device secDev;//设备对象
secDev = new Device();
secDev.SetCooperativeLevel(this, CooperativeLevel.Normal);//设置设备协作级别
secBuffer = new SecondaryBuffer(global::TestCSharp.Properties.Resources.YinXiao, secDev);//创建辅助缓冲区
secBuffer.Play(0, BufferPlayFlags.Default);//设置缓冲区为默认播放
}