• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C#中用API實現MP3等音頻文件的播放類

    發表于:2007-05-25來源:作者:點擊數: 標簽:api播放中用MP3音頻
    C#沒有提供播放MP3等音頻文件的類,要編寫播放MP3等音頻文件程序,必須使用第三方控件或類。本文使用API函數mciSendString,編寫一個播放MP3等音頻文件的類。 具體源碼如下: 一、使用API函數mciSendString構成的媒體播放類。 using System; using System.Ru
    C#沒有提供播放MP3等音頻文件的類,要編寫播放MP3等音頻文件程序,必須使用第三方控件或類。本文使用API函數mciSendString,編寫一個播放MP3等音頻文件的類。

      具體源碼如下:

      一、使用API函數mciSendString構成的媒體播放類。

    using System;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.IO ;
    namespace clsMCIPlay
    {
     /// <summary>
     /// clsMci 的摘要說明。
     /// </summary>
     public class clsMCI
     {
      public clsMCI()
      {
       //
       // TODO: 在此處添加構造函數邏輯
       //
      }

      //定義API函數使用的字符串變量
      [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260)]
      private string Name = "" ;
      [MarshalAs(UnmanagedType.ByValTStr,SizeConst=128)]
      private string durLength = "" ;
      [MarshalAs(UnmanagedType.LPTStr,SizeConst=128)]
      private string TemStr ="";
      int ilong;
      //定義播放狀態枚舉變量
      public enum State
      {
       mPlaying = 1,
       mPuase = 2,
       mStop = 3
      };
      //結構變量
      public struct structMCI
      {
       public bool bMut;
       public int iDur;
       public int iPos;
       public int iVol;
       public int iBal;
       public string iName;
       public State state;
      };

      public structMCI mc =new structMCI() ;

      //取得播放文件屬性
      public string FileName
      {
       get
       {
        return mc.iName;
       }
       set
       {
        //ASCIIEncoding asc = new ASCIIEncoding();
        try
        {
         TemStr ="";
         TemStr = TemStr.PadLeft(127,Convert.ToChar(" "));
         Name = Name.PadLeft(260,Convert.ToChar(" ")) ;
         mc.iName = value;
         ilong = APIClass.GetShortPathName(mc.iName,Name, Name.Length);
         Name = GetCurrPath(Name);
         //Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";
         Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";
         ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length , 0);
         ilong = APIClass.mciSendString( Name, TemStr, TemStr.Length, 0);
         ilong = APIClass.mciSendString("set media time format milliseconds", TemStr, TemStr.Length , 0);
         mc.state = State.mStop;
        }
        catch
        {
         MessageBox.Show("出錯錯誤!");
        }
       }
      }
      //播放
      public void play()
      {
       TemStr = "";
       TemStr = TemStr.PadLeft(127,Convert.ToChar(" "));
       APIClass.mciSendString("play media", TemStr, TemStr.Length , 0);
       mc.state = State.mPlaying ;
      }
      //停止
      public void StopT()
      {
       TemStr = "";
       TemStr = TemStr.PadLeft(128,Convert.ToChar(" "));
       ilong = APIClass.mciSendString("close media", TemStr, 128, 0);
       ilong = APIClass.mciSendString("close all", TemStr, 128, 0);
       mc.state = State.mStop ;
      }

      public void Puase()
      {
       TemStr = "";
       TemStr = TemStr.PadLeft(128,Convert.ToChar(" "));
       ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0);
       mc.state = State.mPuase ;
      }
      private string GetCurrPath(string name)
      {
       if(name.Length <1) return "";
       name = name.Trim();
       name = name.Substring(0,name.Length-1);
       return name;
      }
      //總時間
      public int Duration
      {
       get
       {
        durLength = "";
        durLength = durLength.PadLeft(128,Convert.ToChar(" ")) ;
        APIClass.mciSendString("status media length", durLength, durLength.Length, 0);
        durLength = durLength.Trim();
        if(durLength == "") return 0;
        return (int)(Convert.ToDouble(durLength) / 1000f);
       }
      }

      //當前時間
      public int CurrentPosition
      {
       get
       {
        durLength = "";
        durLength = durLength.PadLeft(128,Convert.ToChar(" ")) ;
        APIClass.mciSendString("status media position", durLength, durLength.Length, 0);
        mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f);
        return mc.iPos;
       }
      }
     }

     public class APIClass
     {
      [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
      public static extern int GetShortPathName (
       string lpszLongPath,
       string shortFile,
       int clearcase/" target="_blank" >cchBuffer
      );

      [DllImport("winmm.dll", EntryPoint="mciSendString", CharSet = CharSet.Auto)]
      public static extern int mciSendString (
       string lpstrCommand,
       string lpstrReturnString,
       int uReturnLength,
       int hwndCallback
      );
     }
    }



      二、用于測試媒體播放類的簡單代碼:

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.IO ;
    using clsMCIPlay;

    namespace MCIPlay
    {
     /// <summary>
     /// Form1 的摘要說明。
     /// </summary>
     public class Form1 : System.Windows.Forms.Form
     {
      private System.ComponentModel.IContainer components;
      private System.Windows.Forms.Timer timer1;
      private System.Windows.Forms.Button Play;
      private System.Windows.Forms.Button Stop;
      private System.Windows.Forms.Button Puase;
      private System.Windows.Forms.Label PlayFileName;
      private System.Windows.Forms.Label Duration;
      private System.Windows.Forms.Label CurrentPosition;
      private System.Windows.Forms.OpenFileDialog openFileDialog1;
      private System.Windows.Forms.Button BrowserFile;
      clsMCI mp = new clsMCI();

      public Form1()
      {
       //
       // Windows 窗體設計器支持所必需的
       //
       InitializeComponent();

       //
       // TODO: 在 InitializeComponent 調用后添加任何構造函數代碼
       //
      }

      /// <summary>
      /// 清理所有正在使用的資源。
      /// </summary>
      protected override void Dispose( bool disposing )
      {
       if( disposing )
       {
        if (components != null)
        {
         components.Dispose();
        }
       }
       base.Dispose( disposing );
      }

      #region Windows 窗體設計器生成的代碼
      /// <summary>
      /// 設計器支持所需的方法 - 不要使用代碼編輯器修改
      /// 此方法的內容。
      /// </summary>
      private void InitializeComponent()
      {
       this.components = new System.ComponentModel.Container();
       this.Play = new System.Windows.Forms.Button();
       this.PlayFileName = new System.Windows.Forms.Label();
       this.Duration = new System.Windows.Forms.Label();
       this.Stop = new System.Windows.Forms.Button();
       this.Puase = new System.Windows.Forms.Button();
       this.CurrentPosition = new System.Windows.Forms.Label();
       this.timer1 = new System.Windows.Forms.Timer(this.components);
       this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
       this.BrowserFile = new System.Windows.Forms.Button();
       this.SuspendLayout();
       //
       // Play
       //
       this.Play.Location = new System.Drawing.Point(102, 243);
       this.Play.Name = "Play";
       this.Play.Size = new System.Drawing.Size(78, 24);
       this.Play.TabIndex = 0;
       this.Play.Text = "Play";
       this.Play.Click += new System.EventHandler(this.Play_Click);
       //
       // PlayFileName
       //
       this.PlayFileName.AutoSize = true;
       this.PlayFileName.Location = new System.Drawing.Point(12, 15);
       this.PlayFileName.Name = "PlayFileName";
       this.PlayFileName.Size = new System.Drawing.Size(0, 17);
       this.PlayFileName.TabIndex = 1;
       //
       // Duration
       //
       this.Duration.AutoSize = true;
       this.Duration.Location = new System.Drawing.Point(15, 51);
       this.Duration.Name = "Duration";
       this.Duration.Size = new System.Drawing.Size(0, 17);
       this.Duration.TabIndex = 2;
       //
       // Stop
       //
       this.Stop.Location = new System.Drawing.Point(282, 243);
       this.Stop.Name = "Stop";
       this.Stop.Size = new System.Drawing.Size(81, 24);
       this.Stop.TabIndex = 3;
       this.Stop.Text = "Stop";
       this.Stop.Click += new System.EventHandler(this.Stop_Click);
       //
       // Puase
       //
       this.Puase.Location = new System.Drawing.Point(198, 243);
       this.Puase.Name = "Puase";
       this.Puase.Size = new System.Drawing.Size(72, 24);
       this.Puase.TabIndex = 4;
       this.Puase.Text = "Puase";
       this.Puase.Click += new System.EventHandler(this.Puase_Click);
       //
       // CurrentPosition
       //
       this.CurrentPosition.AutoSize = true;
       this.CurrentPosition.Location = new System.Drawing.Point(15, 87);
       this.CurrentPosition.Name = "CurrentPosition";
       this.CurrentPosition.Size = new System.Drawing.Size(0, 17);
       this.CurrentPosition.TabIndex = 5;
       //
       // timer1
       //
       this.timer1.Enabled = true;
       this.timer1.Interval = 1000;
       this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
       //
       // BrowserFile
       //
       this.BrowserFile.Location = new System.Drawing.Point(312, 165);
       this.BrowserFile.Name = "BrowserFile";
       this.BrowserFile.Size = new System.Drawing.Size(87, 24);
       this.BrowserFile.TabIndex = 6;
       this.BrowserFile.Text = "SelectFile";
       this.BrowserFile.Click += new System.EventHandler(this.BrowserFile_Click);
       //
       // Form1
       //
       this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
       this.ClientSize = new System.Drawing.Size(433, 287);
       this.Controls.Add(this.BrowserFile);
       this.Controls.Add(this.CurrentPosition);
       this.Controls.Add(this.Puase);
       this.Controls.Add(this.Stop);
       this.Controls.Add(this.Duration);
       this.Controls.Add(this.PlayFileName);
       this.Controls.Add(this.Play);
       this.Name = "Form1";
       this.Text = "Form1";
       this.ResumeLayout(false);

      }
      #endregion

      /// <summary>
      /// 應用程序的主入口點。
      /// </summary>
      [STAThread]
      static void Main()
      {
       Application.Run(new Form1());
      }

      //選擇MP3文件播放
      private void Play_Click(object sender, System.EventArgs e)
      {
       try
       {
        mp.play();
       }
       catch
       {
        MessageBox.Show("出錯錯誤!");
       }
      }

      //暫停播放
      private void Puase_Click(object sender, System.EventArgs e)
      {
       try
       {
        mp.Puase();
       }
       catch
       {
        MessageBox.Show("出錯錯誤!");
       }

      }

      //停止播放
      private void Stop_Click(object sender, System.EventArgs e)
      {
       try
       {
        mp.StopT();
       }
       catch
       {
        MessageBox.Show("出錯錯誤!");
       }
      }

      //每秒顯示一次播放進度
      private void timer1_Tick(object sender, System.EventArgs e)
      {
       CurrentPosition.Text = mp.CurrentPosition.ToString();
      }

      //瀏覽文件
      private void BrowserFile_Click(object sender, System.EventArgs e)
      {
       try
       {
        openFileDialog1.Filter = "*.mp3|*.mp3";
        openFileDialog1.FileName = "";
        if(openFileDialog1.ShowDialog() == DialogResult.OK)
        {
         mp.FileName = openFileDialog1.FileName ;
         PlayFileName.Text = openFileDialog1.FileName ;
         Duration.Text = mp.Duration.ToString() ;
        }
       }
       catch
       {
        MessageBox.Show("出錯錯誤!");
       }
      }
     }
    }

      本程序在.net 2003 、win XP SP1下編譯通過。

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>