当前位置:编程学习 > C#/ASP.NET >>

C# windows应用程序SoundPlayer问题

我已经实现了音乐的播放和停止,但是我现在想实现暂停,就不知道怎么搞了。就是我点击一个按钮,音乐暂停了,再点一下,它就从之前暂停的地方接着播放。我试着用SoundPlayer.stop,可是每次音乐都是从头开始播的。麻烦各位大大们了.. --------------------编程问答-------------------- --------------------编程问答-------------------- 能否给个例子啊?这位大大 --------------------编程问答-------------------- 用windowsmediaplayer控件吧,我也刚用这个做了一个播放器,控件在工具箱com组件里面有。
axWindowsMediaPlayer1.Ctlcontrols.pause();暂停的函数
建一个变量state来记录播放状态,实现一个按钮同时控制播放和暂停。 --------------------编程问答-------------------- 以下是我到网上找的一个同仁写的类,我的一个小工具是用了。

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

      [DllImport("winmm.dll", EntryPoint = "mciGetDeviceID", CharSet = CharSet.Auto)]   
      private static extern int mciGetDeviceID(string lpstrName);   
      [DllImport("kernel32.dll", CharSet = CharSet.Auto)]   
      public static extern int GetShortPathName(   
       string lpszLongPath,   
       string shortFile,   
       int cchBuffer   
      );   

      public enum PlayTypeName : byte  
      {   
          File = 1,   
          CDAudio = 2,   
          VCD = 3,   
          RealPlay = 4   
      }   

      public enum AudioSource : byte  
      {   
          H = 0,   
          L = 1,   
          R = 2   
      }   

      public enum Playstate : byte  
      {   
          Stopped = 1,   
          Playing = 2,   
          Pause = 3   
      }   

      public enum PlayStyle : byte  
      {   
          顺序 = 1,   
          随机 = 2,   
          循环 = 3   
      }

      public PlayTypeName PlayType;

      public int Temp; //零时变量 工程中将使用   

      public String SongName;  //储存当前真正播放的歌曲名称   

      public string PreSongName;

      public string NextSongName;

      public int SongIndex; //储存当前播放的歌曲列表的位置   

      public int totalSong;

      public PlayStyle PlayerStyle;//播放模式   

      public int Valume;//音量大小   

      public AudioSource audiosource;

      public bool IsSlowly;//播放速度          

       /// <summary>   
      /// 获取DeviceID   
      /// </summary>   
      /// <returns>返回设备类型</returns>   

      public int GetDeviceID()   
      {   
          return mciGetDeviceID("NOWMUSIC");   
      }   

      /// <summary>   
      /// 根据文件名,确定设备   
       /// </summary>   
      /// <param name="ff">文件名</param>   
      /// <returns></returns>   

      public string GetDriverID(string ff)   
      {   
          string result = "";   
          ff = ff.ToUpper().Trim();   
          switch (ff.Substring(ff.Length - 3))   
          {   
               case "MID":   
                   result = "Sequencer";   
                   break;   
 
               case "RMI":   
                   result = "Sequencer";   
                   break;   
 
               case "IDI":   
                   result = "Sequencer";   
                   break;   
 
               case "WAV":   
                   result = "Waveaudio";   
                   break;   
 
               case "ASX":   
                   result = "MPEGVideo2";   
                   break;   
 
               case "IVF":   
                   result = "MPEGVideo2";   
                   break;   
 
               case "LSF":   
                   result = "MPEGVideo2";   
                   break;   
 
               case "LSX":   
                   result = "MPEGVideo2";   
                   break;   
 
               case "P2V":   
                   result = "MPEGVideo2";   
                   break;   
 
               case "WAX":   
                   result = "MPEGVideo2";   
                   break;   
 
               case "WVX":   
                   result = "MPEGVideo2";   
                   break;   
 
               case ".WM":   
                   result = "MPEGVideo2";   
                   break;   
 
               case "WMX":   
                   result = "MPEGVideo2";   
                   break;   
 
               case "WMP":   
                   result = "MPEGVideo2";   
                   break;   
 
               case ".RM":   
                   result = "RealPlay";   
                   break;   
 
               case "RAM":   
                   result = "RealPlay";   
                   break;   
 
               case ".RA":   
                   result = "RealPlay";   
                   break;   
 
               case "MVB":   
                   result = "RealPlay";   
                   break;   
 
               default:   
                   result = "MPEGVideo";   
                   break;   
           }   
           return result;   
       }   
 
       /// <summary>   
       /// 打开MCI设备,   
        /// </summary>   
       /// <param name="FileName">要打开的文件名</param>   
       /// <param name="Handle">mci设备的窗口句柄</param>   
       /// <returns>传值代表成功与否</returns>   
 
       public bool OpenMusic(string FileName, IntPtr Handle)   
       {   
           bool result = false;               
           string MciCommand;               
           int RefInt;   
 
           CloseMusic();   
 
           ShortPathName = "";   
           ShortPathName = ShortPathName.PadLeft(260, Convert.ToChar(" "));   
           RefInt=GetShortPathName(FileName, ShortPathName, ShortPathName .Length );   
           ShortPathName = GetCurrPath(ShortPathName);   
           string DriverID = GetDriverID(ShortPathName);   
           if (DriverID == "RealPlay")   
               return false;               
 
           MciCommand = string.Format("open {0} type {1} alias NOWMUSIC ", ShortPathName, DriverID);//"open " & RefShortName & " type " & DriverID & " alias NOWMUSIC"   
 
           if (DriverID == "AVIVideo" || DriverID == "MPEGVideo" || DriverID == "MPEGVideo2")   
           {   
               if (Handle != IntPtr.Zero)   
               {   
                   MciCommand = MciCommand + string.Format(" parent {0} style child ", Handle);// " parent " & Hwnd & " style child"   
               }   
               else  
               {   
                   MciCommand = MciCommand + " style overlapped ";   
               }   
           }   
 
           TemStr  = "";   
           TemStr  = TemStr.PadLeft(128, Convert.ToChar(" "));   
           RefInt = mciSendString(MciCommand, null, 0, 0);   
           mciSendString("set NOWMUSIC time format milliseconds", null, 0, 0);   
 
           if (RefInt == 0)   
           {   
               result = true;   
               SongName = Path.GetFileNameWithoutExtension(FileName);   
           }   
           return result;   
       }   
 
       /// <summary>   
       /// 播放音乐   
        /// </summary>   
       /// <returns></returns>   
       public bool PlayMusic()   
       {   
           bool result = false;   
           int RefInt = mciSendString("play NOWMUSIC", null, 0, 0);   
           if (RefInt == 0)   
           {   
               result = true;   
               SetValume(Valume);//当前音量大小   
                  //检测播放速度   
                  if (IsSlowly)   
                   SetSpeed(800);   
               else  
                   SetSpeed(1200);   
               //检测声道   
                  switch ((int)audiosource)   
               {   
                   case 0:   
                       SetAudioSource(AudioSource.H);   
                       break;   
 
                   case 1:   
                       SetAudioSource(AudioSource.L);   
                       break;   
 
                   case 2:   
                       SetAudioSource(AudioSource.R);   
                       break;   
               }   
           }   
           return result;   
       }    --------------------编程问答--------------------  
       /// <summary>   
       /// 设置声音大小   
        /// </summary>   
       /// <param name="Valume">音量大小</param>   
       /// <returns></returns>   
       public bool SetValume(int Valume)   
       {   
           bool result = false;   
           string MciCommand = string.Format("setaudio NOWMUSIC volume to {0}", Valume);   
           int RefInt = mciSendString(MciCommand, null, 0, 0);   
           if (RefInt == 0)   
           {   
               result = true;   
           }   
 
           return result;   
       }   
 
       /// <summary>   
       /// 设置播放速度   
        /// </summary>   
       /// <param name="Speed"></param>   
       /// <returns></returns>   
       public bool SetSpeed(int Speed)   
       {   
 
           bool result = false;   
           string MciCommand = string.Format("set NOWMUSIC speed to {0}", Speed);   
           int RefInt = mciSendString(MciCommand, null, 0, 0);   
           if (RefInt == 0)   
               result = true;   
           return result;   
       }   
 
       /// <summary>   
       /// 设置声道   
        /// </summary>   
       /// <param name="audioSource"></param>   
       /// <returns></returns>   
 
       public bool SetAudioSource(AudioSource audioSource)   
       {   
           bool result = false;   
           string strSource = "";   
           switch ((int)audioSource)   
           {   
               case 1: strSource = "left"; break;   
 
               case 2: strSource = "right"; break;   
 
               case 0: strSource = "stereo"; break;   
           }   
 
           int RefInt = mciSendString("setaudio  NOWMUSIC source to " + strSource, null, 0, 0);   
           if (RefInt == 0)   
               result = true;   
           return result;   
       }   
 
       /// <summary>   
       /// 设置静音 True为静音,FALSE为取消静音   
        /// </summary>   
       /// <param name="AudioOff"></param>   
       /// <returns></returns>   
       public bool SetAudioOnOff(bool AudioOff)   
       {   
 
           bool resut = false;   
 
           string OnOff;   
 
           if (AudioOff)   
 
               OnOff = "off";   
 
           else  
 
               OnOff = "on";   
 
           int RefInt = mciSendString("setaudio NOWMUSIC " + OnOff, null, 0, 0);   
 
           if (RefInt == 0)   
 
               resut = true;   
 
           return resut;   
 
       }   
 
       /// <summary>   
 
       /// 关闭媒体   
 
       /// </summary>   
 
       /// <returns></returns>   
 
       public bool CloseMusic()   
 
       {   
 
           int RefInt = mciSendString("close NOWMUSIC", null, 0, 0);   
 
           if (RefInt == 0)   
 
               return true;   
 
           return false;   
 
       }   
 
       /// <summary>   
 
       /// 暂停播放   
 
       /// </summary>   
 
       /// <returns></returns>   
 
       public bool PauseMusic()   
 
       {   
 
           int RefInt = mciSendString("pause NOWMUSIC", null, 0, 0);   
 
           if (RefInt == 0)   
 
               return true;   
 
           return false;   
 
       }   
 
       /// <summary>   
 
       /// 获得当前媒体的状态是不是在播放   
 
       /// </summary>   
 
       /// <returns></returns>   
 
       public Playstate IsPlaying()   
 
       {   
 
           Playstate isPlaying=Playstate .Stopped ;   
 
           durLength = "";   
 
           durLength = durLength.PadLeft(128, Convert.ToChar(" "));   
 
          int RefInt=  mciSendString("status NOWMUSIC mode", durLength, durLength.Length, 0);   
 
           durLength = durLength.Trim();   
 
           if (durLength.Substring(0, 7) == "playing" || durLength.Substring(0, 2) == "播放")   
 
               isPlaying = Playstate.Playing;   
 
           else if (durLength.Substring(0, 7) == "stopped" || durLength.Substring(0, 2) == "停止")   
 
               isPlaying = Playstate.Stopped;   
 
           else isPlaying = Playstate.Pause;   
 
 
 
           return isPlaying;   
 
       }   
 
       /// <summary>   
 
       /// 获取当前播放进度 毫秒   
 
       /// </summary>   
 
       /// <returns></returns>   
 
       public int GetMusicPos()   
 
       {   
 
           durLength = "";   
 
           durLength = durLength.PadLeft(128, Convert.ToChar(" "));   
 
           mciSendString("status NOWMUSIC position", durLength ,durLength .Length , 0);   
 
           durLength = durLength.Trim();   
 
           if (string.IsNullOrEmpty(durLength))   
 
               return 0;   
 
           else  
 
               return (int)(Convert.ToDouble(durLength) );   
 
       }  --------------------编程问答--------------------
       /// <summary>   
 
       /// 获取当前播放进度 格式 00:00:00   
 
       /// </summary>   
 
       /// <returns></returns>   
 
       public string GetMusicPosString()   
 
       {   
 
           durLength = "";   
 
           durLength = durLength.PadLeft(128, Convert.ToChar(" "));   
 
           mciSendString("status NOWMUSIC position", durLength, durLength.Length, 0);   
 
           durLength = durLength.Trim();   
 
           if (string.IsNullOrEmpty(durLength))   
 
               return "00:00:00";   
 
           else  
 
           {   
 
               int s = Convert.ToInt32(durLength)/1000;   
 
               int h = s /3600;   
 
               int m = (s - (h * 3600)) / 60;   
 
               s = s - (h * 3600 + m * 60);   
 
               return string.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);   
 
           }   
 
       }   
 
       /// <summary>   
 
       /// 获取媒体的长度   
 
       /// </summary>   
 
       /// <returns></returns>   
 
       public int GetMusicLength()   
 
       {   
 
           durLength = "";   
 
           durLength = durLength.PadLeft(128, Convert.ToChar(" "));   
 
           mciSendString("status NOWMUSIC length", durLength, durLength.Length, 0);   
 
           durLength = durLength.Trim();   
 
           if (string.IsNullOrEmpty(durLength))   
 
               return 0;   
 
           else  
 
               return Convert.ToInt32(durLength);   
 
       }   
 
       /// <summary>   
 
       /// 获取媒体的长度 00:00:00   
 
       /// </summary>   
 
       /// <returns></returns>   
 
       public string GetMusicLengthString()   
 
       {   
 
           durLength = "";   
 
           durLength = durLength.PadLeft(128, Convert.ToChar(" "));   
 
           mciSendString("status NOWMUSIC length", durLength, durLength.Length, 0);   
 
           durLength = durLength.Trim();   
 
           if (string.IsNullOrEmpty(durLength))   
 
               return "00:00:00";   
 
           else  
 
           {   
 
               int s = Convert.ToInt32(durLength) / 1000;   
 
               int h = s / 3600;   
 
               int m = (s - (h * 3600)) / 60;   
 
               s = s - (h * 3600 + m * 60);   
 
               return string.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);   
 
           }   
 
 
 
       }   
 
 
 
       public bool SetMusicPos(int Position)   
 
       {   
 
           string MciCommand = string.Format("seek NOWMUSIC to {0}", Position );   
 
           int RefInt = mciSendString( MciCommand , null, 0, 0);   
 
           if (RefInt == 0)   
 
               return true;   
 
           else  
 
               return false;   
 
       }   
 
       private string GetCurrPath(string name)   
 
       {   
 
           if (name.Length < 1) return "";   
 
           name = name.Trim();   
 
           name = name.Substring(0, name.Length - 1);   
 
           return name;   
 
       }   
 
 
 
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]   
 
       private string ShortPathName = "";   
 
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]   
 
       private string durLength = "";   
 
       [MarshalAs(UnmanagedType.LPTStr, SizeConst = 128)]   
 
       private string TemStr = "";   

    } --------------------编程问答-------------------- 我也遇到这样的问题,不好弄啊
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,