c# 播放mp3

原文地址:http://www.cnblogs.com/igrl/archive/2010/03/29/1699975.html

使用方式: 

            clsMCI cm  =   new  clsMCI();
            cm.FileName 
=   " 别看我只是一只羊.mp3 " ;
            cm.play();

 

 

 类代码

复制代码




using  System;
using  System.Runtime.InteropServices; 
using  System.Text; 
using  System.IO ;
using  System.Windows.Forms; 
namespace  WindowsApplication7
{
///   <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
{
}
}
}
// 播放
   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  cchBuffer
);

[DllImport(
" winmm.dll " , EntryPoint = " mciSendString " , CharSet  =  CharSet.Auto)]
public   static   extern   int  mciSendString (
string  lpstrCommand,
string  lpstrReturnString,
int  uReturnLength,
int  hwndCallback
);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值