熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#中利用mediaplayer打造mp3播放器

2022-06-13   來源: .NET編程 

  利用Window Media Player 控件自己做一款小巧的mp播放器來聽音樂 是不是很享受呢?今天剛寫出來的聽聽mp感覺還不錯哦 閒話少說進入正題

  Mp播放器主要完成下列功能:

   添加歌曲可以添加單個樂曲或者指定文件夾內包括其子文件夾內的所有mp樂曲到播放列表

   刪除指定歌曲或所有歌曲

   播放的控制包括選擇上一首下一首播放順序播放循環播放和隨機播放循環播放又分單個歌曲的循環播放和所有歌曲的循環播放

  首先建立類player

  public class Player

  {

  private WMPLibWindowsMediaPlayer myPlayer;

  private string[] playList;

  private int numOfMusic;

  private int currentPlay;

   public int NumOfMusic

   {

   get

    {

    return numOfMusic;

    }

   }

   public WMPLibWMPPlayState playstate

  {

   get

  {

  return myPlayerplayState;

    }

   }

   public string PlayList(int num)

   {

    return playList[num];

   }

  public Player(AxWMPLibAxWindowsMediaPlayer mediaPlayer)

  {

  myPlayer = mediaPlayer;

  playList = new string[];

  numOfMusic = ;

  }

  public void AddFile(string path)

  {

  if(numOfMusic < )

   {

   numOfMusic ++;

   playList[numOfMusic] = path;

    }

   }

  public void DelFile(int selectNum)

  {

   for(int i = selectNum; i <= numOfMusic ; i++)

   {

    playList[i] = playList[i + ];

    }

   numOfMusic ;

   }

  public void play(int selectNum)

  {

   myPlayerURL = playList[selectNum];

   currentPlay = selectNum;

  }

  public int NextPlay(int type)

  {

   /* type = 順序

  type = 重復播放全部

  type = 重復播放一首

  type = 隨機播放

  */

   switch (type)

  {

   case :

  currentPlay ++;

  if(currentPlay > numOfMusic)return ;

  else return currentPlay;

  case :

   currentPlay ++;

  if(currentPlay > numOfMusic) return ;

  else return currentPlay;

  case :

  return currentPlay;

  case :

  Random rdm = new Random(unchecked((int)DateTimeNowTicks));

  currentPlay = rdmNext() % numOfMusic;

    if(currentPlay == ) return numOfMusic;

    else return currentPlay;

    default:

   return ;

    }

   }

}

 

Player類中包括一個windowsMediaPlayer對象myPlayer一個存儲播放列表的數組playlist記錄歌曲總數的 numOfMusic以及當前播放的歌曲對應列表中的序號currentplay;另外有四個方法分別是PlayAddFileDelFile以及獲得下次播放序號的NextPlay

 

分功能列出其他主要代碼

 

添加單個歌曲

 

  if(thisopenFileDialogShowDialog() == DialogResultOK)

  {

   string path = thisopenFileDialogFileName;

   FileInfo f = new FileInfo(path);

   MyPlayerAddFile(fFullName);

   string STRFILE = ConvertToString(MyPlayerNumOfMusic);

   for(int i = ;i<=STRFILELength;i++)STRFILE+= ;

   STRFILE += fName;

   thislistBoxItemsAdd(STRFILE);

}

 

添加一個文件夾及其所有子文件夾的歌曲

 

利用遞歸函數showfiles實現所有層歌曲都添加到歌曲列表中

 

  private void showfiles(string pathListBox listBox)

  {

   DirectoryInfo dir = new DirectoryInfo(path);

   foreach(FileInfo f in dirGetFiles(*mp))

   {

    MyPlayerAddFile(fFullName);

   }

  foreach(DirectoryInfo f in dirGetDirectories())

   {

   showfiles(fFullNamelistBox);

}

 

刪除和清空直接調用類Player中的AddFileDelFile函數

 

實現播放上一首

 

  if(listBoxSelectedIndex >= )

  {

  listBoxSelectedIndex ;

  if(listBoxSelectedIndex <)listBoxSelectedIndex = MyPlayerNumOfMusic ;

  MyPlayerplay(listBoxSelectedIndex + );

}

 

下一首

 

  if(listBoxSelectedIndex >= )

  {

  listBoxSelectedIndex = (listBoxSelectedIndex + ) % MyPlayerNumOfMusic;

  MyPlayerplay(listBoxSelectedIndex + );

}

 

播放的控制

 

利用PlayerNextPlay方法返回的值來選擇下一次播放的內容

 

同時利用PlayStateChange事件來實現由一曲到下一曲的替換但是在響應PlayStateChange事件的時候直接改變Playerurl無法讓它直接播放下一曲解決方法如下:

 

  private void axWindowsMediaPlayer_PlayStateChange(object sender AxWMPLib_WMPOCXEvents_PlayStateChangeEvent e)

  {

   if(MyPlayerplaystate == WMPLibWMPPlayStatewmppsMediaEnded)

   {

    timerStart();

   }

  }

  private void timer_Tick(object sender SystemEventArgs e)

  {

   timerStop();

   int selectnum = ;

   if(menuItemChecked)selectnum = MyPlayerNextPlay();

   else if (menuItemChecked)selectnum = MyPlayerNextPlay();

   else if (menuItemChecked)selectnum = MyPlayerNextPlay();

   else if (menuItemChecked)selectnum = MyPlayerNextPlay();

   if(selectnum != )

   {

    listBoxSelectedIndex = selectnum ;

    MyPlayerplay(selectnum);

   }

  }

  滿足一首歌曲結束的條件的時候喚醒計時器計時器ms內就響應函數timer_Tick在這個函數裡實現下一首歌曲的選擇播放便可以順利進行


From:http://tw.wingwit.com/Article/program/net/201311/15463.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.