1、C下利用 DirectSound 实现声音播放第 1 步:下载并安装 DirectX 9 SDKDirectX 9 SDK 下载地址:http:/ ,目前最新版本是 2006 年8 月,下载包 500MB 多。第 2 步:建立 C#应用程序新建一个 C#的 windows 应用程序,名称这里输 mydirectXtest。解决方案管理器里,右击项目, “添加引用” ,选中 DirectX 和 DirectSound,如下图:在 Form1.cs 里面添加:using Microsoft.DirectX;using Microsoft.DirectX.DirectSound;往 Form1 上面
2、拉一个 Label 和一个 Button,在 Button onclick 事件里面写入:/ 建立声音设备Microsoft.DirectX.DirectSound.Device dev =new Microsoft.DirectX.DirectSound.Device();dev.SetCooperativeLevel(this,Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);/ 为声音建立二级缓冲区try.Microsoft.DirectX.DirectSound.SecondaryBuffer snd =new Microso
3、ft.DirectX.DirectSound.SecondaryBuffer(“././NewDrums.wav“, dev);/ 播放声音snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);catch (Exception ex).label1.Text = ex.ToString();Microsoft.DirectX.DirectSound.Device dev = new Microsoft.DirectX.DirectSound.Device(); 建立 device 的类;dev.SetCoopera
4、tiveLevel(this, Microsoft.DirectX.DirectSound.CooperativeLevel.Normal); 设置 CooperativeLevel。因为 Windows 是多任务的系统,设备不是独占的,所以在使用设备前要为这个设备设置 CooperativeLevel。调用 Device 的 SetCooperativeLevel 方法:其中,第一个参数是一个 Control;第二个参数是个枚举类型,用来设置优先级的。SecondaryBuffer snd = new Microsoft.DirectX.DirectSound.SecondaryBuffer
5、(“././NewDrums.wav“, dev); 开辟缓冲区。声音设备有个自己的缓冲区,叫主缓冲区。系统中,一个设备有唯一的主缓冲区。由于windows 是多任务的,所以可以有几个程序同时利用一个设备播放声音,每个程序都自己开辟一个二级缓冲区,放自己的声音。这里需要注意播放声音的路径,一开始初学者容易把 wav 声音放到项目里面,在SecondaryBuffer 里面直接写“ NewDrums.wav”,调试是会显示“应用程序错误” 。因为调试的默认文件夹是 Debug,需要的声音文件应该放到 Debug 目录下,用“NewDrums.wav”的格式;或者放在项目下面,用 “././New
6、Drums.wav”的格式。很傻的错误吧。这样,调试程序,按 button 就会播放声音了。全部代码如下:Form1.cs:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Microsoft.DirectX;using Microsoft.DirectX.DirectSound;namespace mydirectXt
7、est.public partial class Form1 : Form.public Form1().InitializeComponent();private void button1_Click(object sender, EventArgs e)./ 建立声音设备Microsoft.DirectX.DirectSound.Device dev =new Microsoft.DirectX.DirectSound.Device();dev.SetCooperativeLevel(this,Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);/ 为声音建立二级缓冲区try.Microsoft.DirectX.DirectSound.SecondaryBuffer snd =new Microsoft.DirectX.DirectSound.SecondaryBuffer(“././NewDrums.wav“, dev);/ 播放声音snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);catch (Exception ex).label1.Text = ex.ToString();本文来自 CSDN 博客,转载请标明出处:http:/