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

來源:互聯網
上載者:User

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

PlayWav
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;//音量為0表示最大的音量,因此設定時必須為負。
            }
        }

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

    }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.