调用API函数播放嵌入的MP3文件

来源:互联网 发布:ubuntu安装flash插件 编辑:程序博客网 时间:2024/05/12 16:26

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;

namespace Tool
{
    public class Mp3Player
    {
        #region - 属性 -
        [DllImport("winmm.dll")]
        static extern Int32 mciSendString(String command,
          StringBuilder buffer, Int32 bufferSize, IntPtr hwndCallback);

        /// <summary>
        /// 临时音乐文件存放处
        /// </summary>
        private string m_musicPath = "";

        /// <summary>
        /// 父窗体句柄
        /// </summary>
        private IntPtr m_Handle;
        #endregion

        #region - 构造函数 -
        /// <summary>
        /// 创建Mp3播放类
        /// </summary>
        /// <param name="music">嵌入的音乐文件</param>
        /// <param name="path">临时音乐文件保存路径</param>
        /// <param name="Handle">父窗体句柄</param>
        public Mp3Player(Byte[] music, string path, IntPtr Handle)
        {
            try
            {
                m_Handle = Handle;
                m_musicPath = Path.Combine(path, "temp.mp3");
                FileStream fs = new FileStream(m_musicPath, FileMode.Create);
                fs.Write(music, 0, music.Length);
                fs.Close();
            }
            catch (Exception)
            {

            }
        }

        /// <summary>
        /// 创建Mp3播放类
        /// </summary>
        /// <param name="musicPath">要播放的mp3文件路径</param>
        /// <param name="Handle">父窗体句柄</param>
        public Mp3Player(string musicPath, IntPtr Handle)
        {
            m_musicPath = musicPath;
            m_Handle = Handle;
        }

        public Mp3Player(Byte[] music, IntPtr Handle):
            this(music, @"C:/Windows/", Handle)
        {

        }

        #endregion

        #region - 播放音乐 -
        public void Open(string path)
        {
            if (path != "")
            {
                try
                {
                    mciSendString("open " + path + " alias media", null, 0, m_Handle);
                    mciSendString("play media", null, 0, m_Handle);
                }
                catch (Exception)
                {

                }
            }
        }

        public void Open()
        {
            Open(m_musicPath);
        }
        #endregion

        #region - 停止音乐播放 -
        void CloseMedia()
        {
            try
            {
                mciSendString("close all", null, 0, m_Handle);
            }
            catch (Exception)
            {
            }
        }
        #endregion
    }
}


 

1.将MP3文件导入到VS中,并且设置为嵌入的资源:
 

MP3文件

2.导入到资源中,C#中视MP3为文件类型,以Byte[]形式存储:

 

 

3.将该MP3文件设置为嵌入的资源:


 

4.最后创建一个新的窗体工程,在Load事件中调用Mp3类的方法即可播放音乐:

private void FormMain_Load(object sender, EventArgs e){   //加载音乐   Mp3Player mp3 = new Mp3Player(Properties.Resources.music, Handle);  //音乐开始播放   mp3.Open();}