天天看點

DirectX程式設計:[初級]C#中利用DirectSound播放WAV格式聲音[最少隻要4句話]

  網上已經有很多朋友介紹過如何在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"按鈕通過 設定緩沖區資訊來對緩沖區做調整,讓播放可以在失去焦點的時候繼續播放。除了播放功能外,還可以控制音量和聲道。

  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)

                BufferDescription buffDes = new BufferDescription();

                buffDes.GlobalFocus = true;//設定緩沖區全局擷取焦點

                buffDes.ControlVolume = true;//指明緩沖區可以控制聲音

                buffDes.ControlPan = true;//指明緩沖區可以控制聲道平衡

                secBuffer = new SecondaryBuffer(textBox1.Text, buffDes, secDev);//建立輔助緩沖區

        private void button4_Click(object sender, EventArgs e)

            if (secBuffer != null)

                secBuffer.Stop();

        private void trackBar1_Scroll(object sender, EventArgs e)

                secBuffer.Volume = -trackBar1.Value * 400;//音量為0表示最大的音量,是以設定時必須為負。

        private void trackBar2_Scroll(object sender, EventArgs e)

                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);

    }

}

轉自 http://www.cnblogs.com/stg609/archive/2008/10/27/1320375.html

繼續閱讀