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"按钮通过设置缓冲区信息来对缓冲区做调整,让播放可以在失去焦点的时候继续播放。除了播放功能外,还可以控制音量和声道。
代码如下:
- <span style="font-size:14px;">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.DirectSound;
-
- namespace MyVoice
- {
- public partial class Form4 : Form
- {
- public Form4()
- {
- InitializeComponent();
- }
-
- private SecondaryBuffer secBuffer;
- private Device secDev;
-
- private void button1_Click(object sender, EventArgs e)
- {
- openFileDialog1.Filter = "(*.*)|*.*|(.wav)|*.wav";
- DialogResult dlgResult = openFileDialog1.ShowDialog();
- if (dlgResult == DialogResult.OK)
- {
- textBox1.Text = openFileDialog1.FileName;
- }
-
- }
-
- private void button2_Click(object sender, EventArgs e)
- {
- if (textBox1.Text.Length > 0)
- {
- secDev = new Device();
- secDev.SetCooperativeLevel(this, CooperativeLevel.Normal);
- secBuffer = new SecondaryBuffer(textBox1.Text, secDev);
- secBuffer.Play(0, BufferPlayFlags.Looping);
- }
- }
-
- private void button3_Click(object sender, EventArgs e)
- {
- if (textBox1.Text.Length>0)
- {
- secDev = new Device();
- secDev.SetCooperativeLevel(this, CooperativeLevel.Normal);
- BufferDescription buffDes = new BufferDescription();
- buffDes.GlobalFocus = true;
- buffDes.ControlVolume = true;
- buffDes.ControlPan = true;
- secBuffer = new SecondaryBuffer(textBox1.Text, buffDes, secDev);
- secBuffer.Play(0, BufferPlayFlags.Looping);
- }
- }
-
- private void button4_Click(object sender, EventArgs e)
- {
- if (secBuffer != null)
- {
- secBuffer.Stop();
- }
- }
-
- private void trackBar1_Scroll(object sender, EventArgs e)
- {
- if (secBuffer != null)
- {
- secBuffer.Volume = -trackBar1.Value * 400;
- }
- }
-
- private void trackBar2_Scroll(object sender, EventArgs e)
- {
- if (secBuffer != null)
- {
- if (trackBar2.Value == 0)
- {
- secBuffer.Pan = Convert.ToInt32(Pan.Left);
- }
- else if (trackBar2.Value == 2)
- {
- secBuffer.Pan = Convert.ToInt32(Pan.Right);
- }
- else
- {
- secBuffer.Pan = Convert.ToInt32(Pan.Center);
- }
- }
- }
-
- }
- }</span>