C#AxWindowsMediaPlayer 控件的应用

今天来学习C#中媒体播放控件AxWindowsMediaPlayer 的一些属性和方法

1。先要引用AxWindowsMediaPlayer 控件
在工具栏组件栏右键选择“选择项”
C#AxWindowsMediaPlayer 控件的应用_第1张图片
在工具箱项选择COM组件->Windows Media Player

C#AxWindowsMediaPlayer 控件的应用_第2张图片
这样就在工具栏组件中能找到Windows Media Player控件了
C#AxWindowsMediaPlayer 控件的应用_第3张图片
把它拖到窗口上
C#AxWindowsMediaPlayer 控件的应用_第4张图片
2。创建播放列表
Windows Media Player控件本身没有播放列表,只有一个表示当前播放列表的属性currentPlaylist

它要一个类型为WMPLib.IWMPPlaylist的列表,所以我们要自己创建一个这样的列表

在这里插入代码片
WMPLib.IWMPPlaylist videoList;
 videoList = axWindowsMediaPlayer1.playlistCollection.newPlaylist("one");
 //创建一个新的基于axWindowsMediaPlayer1.新播放列表,名称为"one"
 //当然可以创建多个列表,用名称来区分

加歌曲文件到列表中

//path为要加载歌曲的文件夹路径
private void LoadFile(string path)
        {
            DirectoryInfo theDir = new DirectoryInfo(path);
            //获得theDir文件夹下是ma3的音乐文件
            FileInfo[] files = theDir.GetFiles("*.mp3");
            foreach (FileInfo f in files)
            {
            	//文件名添加到listbox控件中,同时也要添加到播放列表中(要全路径名称)
                listBox1.Items.Add(f.Name);
                videoList.appendItem(axWindowsMediaPlayer1.newMedia(f.FullName));
            }
            listBox1.SelectedIndex = 0;
            //设置当前播放列表为videlist
            axWindowsMediaPlayer1.currentPlaylist = videoList;
            //开始播放
            axWindowsMediaPlayer1.Ctlcontrols.play();
        }

在加载窗口时调用

 WMPLib.IWMPPlaylist videoList;
private void Form1_Load(object sender, EventArgs e)
        {
            videoList = axWindowsMediaPlayer1.playlistCollection.newPlaylist("one");
            LoadFile(@"H:\我的音乐\u盘歌曲\001 [音乐] 2022热歌榜");
        }

3.控件上各个按钮都可以用了
在这里插入图片描述
可以操作,暂停,停止,上一曲,下一曲,音量大小,静音,进度条

4.在列表控件双击选中要播放的歌曲播放,在列表控件的鼠标双击事件中
4.1.这是我第一次的方法
获得控件选中项的索引,再通过索引找到当前播放列表对应索引的歌曲路径
当然这样也能播放,但是控件上的上一曲和下一曲按钮就不能用了,如下图
而且播放完后也不自动下一首了,让人郁闷

 private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            int nSel = listBox1.SelectedIndex;
            if(nSel!=-1)
            {
            	
                axWindowsMediaPlayer1.URL = videoList.Item[nSel].sourceURL;
                axWindowsMediaPlayer1.Ctlcontrols.play();
            }
        }

在这里插入图片描述
4.2.这是第二种方法

 private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            int nSel = listBox1.SelectedIndex;
            if(nSel!=-1)
            {
                
                axWindowsMediaPlayer1.currentMedia = videoList.Item[nSel];
                axWindowsMediaPlayer1.Ctlcontrols.play();
               
            }
        }

和上面一样的效果

4.3.最后要用axWindowsMediaPlayer1.Ctlcontrols.playItem()方法才是播放指定播放列表中指定的项

private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            int nSel = listBox1.SelectedIndex;
            if(nSel!=-1)
            {
                //axWindowsMediaPlayer1.URL = videoList.Item[nSel].sourceURL;
                //axWindowsMediaPlayer1.currentMedia = videoList.Item[nSel];
                //axWindowsMediaPlayer1.Ctlcontrols.play();
                axWindowsMediaPlayer1.Ctlcontrols.playItem(videoList.Item[nSel]);
            }
        }

这样就能用上一曲和下一曲了,播放完后自动下一曲

5.让播放列表的当前播放的歌曲和列表控件选中项同步

这就难了,关键是当前播放列表获取不到当前播放歌曲的索引,这就难办了,
我在网上找了好久都没有能获取当前播放歌曲在播放列表中的索引
能获得当前歌曲的名称,标题,作者,大小,时间等等,
最后只能用获取当前歌曲的名称在列表控件中查找来获得当前的索引

方法:CurrentItemChange 在当前播放列表项发生改变事件中

private void axWindowsMediaPlayer1_CurrentItemChange(object sender, AxWMPLib._WMPOCXEvents_CurrentItemChangeEvent e)
        {
        	//要获取全路径名称,因当前歌曲名称有可能截了的
            string path=axWindowsMediaPlayer1.currentMedia.sourceURL;
            //获取最后文件夹路径标记"\"在字符串中的位置
            int ns= path.LastIndexOf('\\')+1;
            //截取歌曲名称
            string name = path.Substring(ns);
            //查找歌曲名称在列表控件中的索引
            int n=listBox1.FindStringExact(name, -1);
            if(n>=0)
            {
                listBox1.SelectedIndex = n;//重新设置选中项
            }
        }

就这样当点击下一曲时,列表控件也会自动选中下一个,
点击上一曲是,列表控件会选中上一个
C#AxWindowsMediaPlayer 控件的应用_第5张图片
6.歌词显示
这后面再弄,就这都弄得头晕

7.播放视频
如图:
C#AxWindowsMediaPlayer 控件的应用_第6张图片
设置:
axWindowsMediaPlayer1.URL = @“E:\薛之谦_追梦人.wmv”;
axWindowsMediaPlayer1.Ctlcontrols.play();

你可能感兴趣的:(C#,c#,windows,开发语言)