public class WinmmApi
{
[ 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) ;
[ DllImport ( "winmm.dll" , EntryPoint = "waveOutGetNumDevs" ) ]
public static extern int waveOutGetNumDevs ( ) ;
}
public class WavPlayer : IDisposable
{
[ 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
{
try
{
TemStr = "" ;
TemStr = TemStr. PadLeft ( 127 , Convert. ToChar ( " " ) ) ;
Name = Name. PadLeft ( 260 , Convert. ToChar ( " " ) ) ;
mc. iName = value ;
ilong = WinmmApi. GetShortPathName ( mc. iName, Name, Name. Length) ;
Name = GetCurrPath ( Name) ;
Name = "open " + Convert. ToChar ( 34 ) + Name + Convert. ToChar ( 34 ) + " alias media" ;
ilong = WinmmApi. mciSendString ( "close all" , TemStr, TemStr. Length, 0 ) ;
ilong = WinmmApi. mciSendString ( Name, TemStr, TemStr. Length, 0 ) ;
ilong = WinmmApi. 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 ( " " ) ) ;
WinmmApi. mciSendString ( "play media" , TemStr, TemStr. Length, 0 ) ;
mc. state = State. mPlaying;
}
public void mciPlay ( string strFileName)
{
WinmmApi. mciSendString ( "close MyWav" , null , 0 , 0 ) ;
string playCommand = "open " + strFileName + " type WAVEAudio alias MyWav" ;
WinmmApi. mciSendString ( playCommand, null , 0 , 0 ) ;
WinmmApi. mciSendString ( "play MyWav" , null , 0 , 0 ) ;
}
public void StopT ( )
{
TemStr = "" ;
TemStr = TemStr. PadLeft ( 128 , Convert. ToChar ( " " ) ) ;
ilong = WinmmApi. mciSendString ( "close media" , TemStr, 128 , 0 ) ;
ilong = WinmmApi. mciSendString ( "close all" , TemStr, 128 , 0 ) ;
mc. state = State. mStop;
}
public void Puase ( )
{
TemStr = "" ;
TemStr = TemStr. PadLeft ( 128 , Convert. ToChar ( " " ) ) ;
ilong = WinmmApi. 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 ( " " ) ) ;
WinmmApi. 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 ( " " ) ) ;
WinmmApi. mciSendString ( "status media position" , durLength, durLength. Length, 0 ) ;
mc. iPos = ( int ) ( Convert. ToDouble ( durLength) / 1000f ) ;
return mc. iPos;
}
}
public bool IsExistWaveOut ( )
{
if ( WinmmApi. waveOutGetNumDevs ( ) != 0 )
{
return true ;
}
return false ;
}
public void Dispose ( )
{
Dispose ( true ) ;
GC. SuppressFinalize ( this ) ;
}
private bool disposed = false ;
private void Dispose ( bool disposing)
{
if ( ! disposed)
{
if ( disposing)
{
disposed = true ;
}
}
}
~ WavPlayer ( )
{
Dispose ( false ) ;
}
}