DirectX初级编程:C#利用DirectSound播放WAV文件[最少只要4句话]

1.注意:

      a.DirectSound引用方法:http://blog.csdn.net/woaixiaozhe/article/details/7861340

      b.Mixed mode assembly is built against version 'v1.1.4322' of the runtime and...问题:http://blog.csdn.net/woaixiaozhe/article/details/7864391


2.原文如下:

        网上已经有很多朋友介绍过如何在C#中利用DirectSound来播放声音。今天自己试了下,发现真得很简单,对于初学者来说最简单不过了。只需要短短几句代码。其中关键的只要4句左右代码就OK了。

        效果图如下 :

      

      平台:VS.NET 2005 ,DirectX SDK(June 2008)

      需要引用的外部DLL:Microsoft.DirectX.dll 和 Microsoft.DirectX.DirectSound.dll。

      需要引用的命名空间:using Microsoft.DirectX.DirectSound。

      要实现播放效果的大致步骤:1 建立播放设备对象;2 建立缓冲区对象;3 设置缓冲区协作级别;4.播放缓冲区。因为比较简单,所以大家直接看代码吧。其中"Play"按钮主要的就四句话,实现播放效果,但它的缓冲区信息是默认的。"GlobalPlay"按钮通过设置缓冲区信息来对缓冲区做调整,让播放可以在失去焦点的时候继续播放。除了播放功能外,还可以控制音量和声道。

      代码如下:

[csharp]  view plain  copy
  1. <span style="font-size:14px;">using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8.   
  9. //引用的命名空间  
  10. using Microsoft.DirectX.DirectSound;  
  11.   
  12. namespace MyVoice  
  13. {  
  14.     public partial class Form4 : Form  
  15.      {  
  16.         public Form4()  
  17.          {  
  18.              InitializeComponent();  
  19.          }  
  20.   
  21.         private SecondaryBuffer secBuffer;//缓冲区对象  
  22.         private Device secDev;//设备对象  
  23.   
  24.         private void button1_Click(object sender, EventArgs e)  
  25.          {  
  26.              openFileDialog1.Filter = "(*.*)|*.*|(.wav)|*.wav";  
  27.              DialogResult dlgResult = openFileDialog1.ShowDialog();  
  28.             if (dlgResult == DialogResult.OK)  
  29.              {  
  30.                  textBox1.Text = openFileDialog1.FileName;  
  31.              }  
  32.   
  33.          }  
  34.   
  35.         private void button2_Click(object sender, EventArgs e)  
  36.          {  
  37.             if (textBox1.Text.Length > 0)  
  38.              {  
  39.                  secDev = new Device();  
  40.                  secDev.SetCooperativeLevel(this, CooperativeLevel.Normal);//设置设备协作级别  
  41.                  secBuffer = new SecondaryBuffer(textBox1.Text, secDev);//创建辅助缓冲区  
  42.                  secBuffer.Play(0, BufferPlayFlags.Looping);//设置缓冲区为循环播放  
  43.              }  
  44.          }  
  45.   
  46.         private void button3_Click(object sender, EventArgs e)  
  47.          {  
  48.             if (textBox1.Text.Length>0)  
  49.              {  
  50.                  secDev = new Device();  
  51.                  secDev.SetCooperativeLevel(this, CooperativeLevel.Normal);//设置设备协作级别  
  52.                  BufferDescription buffDes = new BufferDescription();  
  53.                  buffDes.GlobalFocus = true;//设置缓冲区全局获取焦点  
  54.                  buffDes.ControlVolume = true;//指明缓冲区可以控制声音  
  55.                  buffDes.ControlPan = true;//指明缓冲区可以控制声道平衡  
  56.                  secBuffer = new SecondaryBuffer(textBox1.Text, buffDes, secDev);//创建辅助缓冲区  
  57.                  secBuffer.Play(0, BufferPlayFlags.Looping);//设置缓冲区为循环播放  
  58.              }  
  59.          }  
  60.   
  61.         private void button4_Click(object sender, EventArgs e)  
  62.          {  
  63.             if (secBuffer != null)  
  64.              {  
  65.                  secBuffer.Stop();  
  66.              }  
  67.          }  
  68.   
  69.         private void trackBar1_Scroll(object sender, EventArgs e)  
  70.          {  
  71.             if (secBuffer != null)  
  72.              {  
  73.                  secBuffer.Volume = -trackBar1.Value * 400;//音量为0表示最大的音量,因此设置时必须为负。  
  74.              }  
  75.          }  
  76.   
  77.         private void trackBar2_Scroll(object sender, EventArgs e)  
  78.          {  
  79.             if (secBuffer != null)  
  80.              {  
  81.                 if (trackBar2.Value == 0)  
  82.                  {  
  83.                      secBuffer.Pan = Convert.ToInt32(Pan.Left);//左声道  
  84.                  }  
  85.                 else if (trackBar2.Value == 2)  
  86.                  {  
  87.                      secBuffer.Pan = Convert.ToInt32(Pan.Right);//右声道  
  88.                  }  
  89.                 else  
  90.                  {  
  91.                      secBuffer.Pan = Convert.ToInt32(Pan.Center);  
  92.                  }  
  93.              }  
  94.          }  
  95.   
  96.      }  
  97. }</span>  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值