C#里边怎么用directsound混音?
或者有什么其它的方法可以同时播放几个声音,产生叠在一起的效果,就好像放鞭炮的效果那样。谢谢啦。...
或者有什么其它的方法可以同时播放几个声音,产生叠在一起的效果,就好像放鞭炮的 效果那样。谢谢啦。
展开
1个回答
2013-05-13
展开全部
第1步:下载并安装DirectX 9c第2步:建立C#应用程序新建一个C#的windows应用程序,名称这里输mydirectXtest。解决方案管理器里,右击项目,“添加引用”,选中DirectX和DirectSound,如下图:
在Form1.cs里面添加:
using Microsoft.DirectX;
using Microsoft.DirectX.DirectSound;
往Form1上面拉一个Label和一个Button,在Button onclick事件里面写入:1// 建立声音设备
2Microsoft.DirectX.DirectSound.Device dev =
3 new Microsoft.DirectX.DirectSound.Device();
4
5dev.SetCooperativeLevel(this,
6 Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);
7
8// 为声音建立二级缓冲区
9try
10{
11 Microsoft.DirectX.DirectSound.SecondaryBuffer snd =
12 new Microsoft.DirectX.DirectSound.SecondaryBuffer(
13 "../../NewDrums.wav", dev);
14
15 // 播放声音
16 snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);
17}
18catch (Exception ex)
19{
20 label1.Text = ex.ToString();
21}
Microsoft.DirectX.DirectSound.Device dev = new Microsoft.DirectX.DirectSound.Device(); ——建立device的类;dev.SetCooperativeLevel(this, Microsoft.DirectX.DirectSound.CooperativeLevel.Normal); ——设置CooperativeLevel。因为Windows是多任务的系统,设备不是独占的,所以在使用设备前要为这个设备设置CooperativeLevel。调用Device的SetCooperativeLevel方法:其中,第一个参数是一个Control;第二个参数是个枚举类型,用来设置优先级的。SecondaryBuffer snd = new Microsoft.DirectX.DirectSound.SecondaryBuffer("../../NewDrums.wav", dev); —— 开辟缓冲区。声音设备有个自己的缓冲区,叫主缓冲区。系统中,一个设备有唯一的主缓冲区。由于windows是多任务的,所以可以有几个程序同时利用一个设备播放声音,每个程序都自己开辟一个二级缓冲区,放自己的声音。
这里需要注意播放声音的路径,一开始初学者容易把wav声音放到项目里面,在SecondaryBuffer里面直接写“NewDrums.wav”,调试是会显示“应用程序错误”。因为调试的默认文件夹是Debug,需要的声音文件应该放到Debug目录下,用“NewDrums.wav”的格式;或者放在项目下面,用“../../NewDrums.wav”的格式。很傻的错误吧。这样,调试程序,按button就会播放声音了。全部代码如下:
Form1.cs:1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9using Microsoft.DirectX;
10using Microsoft.DirectX.DirectSound;
11
12
13namespace mydirectXtest
14{
15 public partial class Form1 : Form
16 {
17 public Form1()
18 {
19 InitializeComponent();
20 }
21
22 private void button1_Click(object sender, EventArgs e)
23 {
24
25 // 建立声音设备
26 Microsoft.DirectX.DirectSound.Device dev =
27 new Microsoft.DirectX.DirectSound.Device();
28
29 dev.SetCooperativeLevel(this,
30 Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);
31
32 // 为声音建立二级缓冲区
33 try
34 {
35 Microsoft.DirectX.DirectSound.SecondaryBuffer snd =
36 new Microsoft.DirectX.DirectSound.SecondaryBuffer(
37 "../../NewDrums.wav", dev);
38
39 // 播放声音
40 snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);
41 }
42 catch (Exception ex)
43 {
44 label1.Text = ex.ToString();
45 }
46
47 }
48 }
49}到这里OK ! 。。。。应该行的 ,慢慢摸索下吧
在Form1.cs里面添加:
using Microsoft.DirectX;
using Microsoft.DirectX.DirectSound;
往Form1上面拉一个Label和一个Button,在Button onclick事件里面写入:1// 建立声音设备
2Microsoft.DirectX.DirectSound.Device dev =
3 new Microsoft.DirectX.DirectSound.Device();
4
5dev.SetCooperativeLevel(this,
6 Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);
7
8// 为声音建立二级缓冲区
9try
10{
11 Microsoft.DirectX.DirectSound.SecondaryBuffer snd =
12 new Microsoft.DirectX.DirectSound.SecondaryBuffer(
13 "../../NewDrums.wav", dev);
14
15 // 播放声音
16 snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);
17}
18catch (Exception ex)
19{
20 label1.Text = ex.ToString();
21}
Microsoft.DirectX.DirectSound.Device dev = new Microsoft.DirectX.DirectSound.Device(); ——建立device的类;dev.SetCooperativeLevel(this, Microsoft.DirectX.DirectSound.CooperativeLevel.Normal); ——设置CooperativeLevel。因为Windows是多任务的系统,设备不是独占的,所以在使用设备前要为这个设备设置CooperativeLevel。调用Device的SetCooperativeLevel方法:其中,第一个参数是一个Control;第二个参数是个枚举类型,用来设置优先级的。SecondaryBuffer snd = new Microsoft.DirectX.DirectSound.SecondaryBuffer("../../NewDrums.wav", dev); —— 开辟缓冲区。声音设备有个自己的缓冲区,叫主缓冲区。系统中,一个设备有唯一的主缓冲区。由于windows是多任务的,所以可以有几个程序同时利用一个设备播放声音,每个程序都自己开辟一个二级缓冲区,放自己的声音。
这里需要注意播放声音的路径,一开始初学者容易把wav声音放到项目里面,在SecondaryBuffer里面直接写“NewDrums.wav”,调试是会显示“应用程序错误”。因为调试的默认文件夹是Debug,需要的声音文件应该放到Debug目录下,用“NewDrums.wav”的格式;或者放在项目下面,用“../../NewDrums.wav”的格式。很傻的错误吧。这样,调试程序,按button就会播放声音了。全部代码如下:
Form1.cs:1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9using Microsoft.DirectX;
10using Microsoft.DirectX.DirectSound;
11
12
13namespace mydirectXtest
14{
15 public partial class Form1 : Form
16 {
17 public Form1()
18 {
19 InitializeComponent();
20 }
21
22 private void button1_Click(object sender, EventArgs e)
23 {
24
25 // 建立声音设备
26 Microsoft.DirectX.DirectSound.Device dev =
27 new Microsoft.DirectX.DirectSound.Device();
28
29 dev.SetCooperativeLevel(this,
30 Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);
31
32 // 为声音建立二级缓冲区
33 try
34 {
35 Microsoft.DirectX.DirectSound.SecondaryBuffer snd =
36 new Microsoft.DirectX.DirectSound.SecondaryBuffer(
37 "../../NewDrums.wav", dev);
38
39 // 播放声音
40 snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);
41 }
42 catch (Exception ex)
43 {
44 label1.Text = ex.ToString();
45 }
46
47 }
48 }
49}到这里OK ! 。。。。应该行的 ,慢慢摸索下吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询