时间: 2021-07-31 作者:daque
运用window media player 控件本人做一款玲珑的mp3播放器来听音乐 ,是否很享用呢?即日刚写出来的,听听mp3发觉还不错哦。 谈天少说,加入正题。 mp3播放器重要实行下列功效: 1. 增添歌曲,不妨增添单个乐曲大概指定文献夹内囊括其子文献夹内的一切mp3乐曲到播放列表。 2. 简略指定歌曲或一切歌曲。 3. 播放的遏制。囊括采用上一首,下一首播放,程序播放,轮回播放和随机播放。轮回播放又分单个歌曲的轮回播放和一切歌曲的轮回播放。 开始创造类player。 public class player { private axwmplib.axwindowsmediaplayer myplayer; private string[] playlist; private int numofmusic; private int currentplay; public int numofmusic { get { return numofmusic; } } public wmplib.wmpplaystate playstate { get { return myplayer.playstate; } } public string playlist(int num) { return playlist[num]; } public player(axwmplib.axwindowsmediaplayer mediaplayer) { myplayer = mediaplayer; playlist = new string[1000]; numofmusic = 0; } public void addfile(string path) { if(numofmusic < 1000) { numofmusic ++; playlist[numofmusic] = path; } } public void delfile(int selectnum) { for(int i = selectnum; i <= numofmusic - 1; i++) { playlist[i] = playlist[i + 1]; } numofmusic --; } public void play(int selectnum) { myplayer.url = playlist[selectnum]; currentplay = selectnum; } public int nextplay(int type) { /* type = 0 程序 type = 1 反复播放十足 type = 2 反复播放一首 type = 3 随机播放 */ switch (type) { case 0: currentplay ++; if(currentplay > numofmusic)return 0; else return currentplay; case 1: currentplay ++; if(currentplay > numofmusic) return 1; else return currentplay; case 2: return currentplay; case 3: random rdm = new random(unchecked((int)datetime.now.ticks)); currentplay = rdm.next() % numofmusic; if(currentplay == 0) return numofmusic; else return currentplay; default: return 0; } } } player类中囊括一个windowsmediaplayer东西myplayer,一个保存播放列表的数组playlist,记载歌曲总额的numofmusic,以及暂时播放的歌曲对应列表中的序号currentplay; 其余有四个本领辨别是play,addfile,delfile,以及赢得下次播放序号的nextplay 分功效列出其余重要代码 增添单个歌曲 if(this.openfiledialog1.showdialog() == dialogresult.ok) { string path = this.openfiledialog1.filename; fileinfo f = new fileinfo(path); myplayer.addfile(f.fullname); string strfile = convert.tostring(myplayer.numofmusic); for(int i = 1;i<=5-strfile.length;i++)strfile+=’ ’; strfile += f.name; this.listbox1.items.add(strfile); } 增添一个文献夹及其一切子文献夹的歌曲 运用递归因变量showfiles实行一切层歌曲都增添到歌曲列表中。 private void showfiles(string path,listbox listbox1) { directoryinfo dir = new directoryinfo(path); foreach(fileinfo f in dir.getfiles("*.mp3")) { myplayer.addfile(f.fullname); } foreach(directoryinfo f in dir.getdirectories()) { showfiles(f.fullname,listbox1); } 简略和清空径直挪用类player中的addfile和delfile因变量 实行播放上一首 if(listbox1.selectedindex >= 0) { listbox1.selectedindex --; if(listbox1.selectedindex <0)listbox1.selectedindex = myplayer.numofmusic - 1; myplayer.play(listbox1.selectedindex + 1); } 下一首 if(listbox1.selectedindex >= 0) { listbox1.selectedindex = (listbox1.selectedindex + 1) % myplayer.numofmusic; myplayer.play(listbox1.selectedindex + 1); } 播放的遏制 运用player的nextplay本领归来的值来采用下一次播放的实质。 同声运用playstatechange事变来实行由一曲到下一曲的替代,然而在相应playstatechange事变的功夫径直变换player的url没辙让它径直播放下一曲,处置本领如次: private void axwindowsmediaplayer1_playstatechange(object sender, axwmplib._wmpocxevents_playstatechangeevent e) { if(myplayer.playstate == wmplib.wmpplaystate.wmppsmediaended) { timer1.start(); } } private void timer1_tick(object sender, system.eventargs e) { timer1.stop(); int selectnum = 0; if(menuitem13.checked)selectnum = myplayer.nextplay(0); else if (menuitem15.checked)selectnum = myplayer.nextplay(1); else if (menuitem16.checked)selectnum = myplayer.nextplay(2); else if (menuitem17.checked)selectnum = myplayer.nextplay(3); if(selectnum != 0) { listbox1.selectedindex = selectnum - 1; myplayer.play(selectnum); } } 满意一首歌曲中断的前提的功夫叫醒计时器,计时器100ms内就相应因变量timer1_tick,在这个因变量里实行下一首歌曲的采用播放便不妨成功举行.