C#-WinForm-简单的音频播放器(基于WindowsMediaPlayer控件)(二)

C#-WinForm-简单的音频播放器(基于WindowsMediaPlayer控件)(二)【上一篇】简单的音频播放器(一)这次为播放器填加了很多更好用的功能,把第一篇文章中的很多坑给填上了,比较大的提升在于播放列表的功能更充足(查看歌曲详情、歌曲搜索、歌曲删除等),同时也加上了Windows7任务栏的控制按钮,加入了播放模式的选择,专辑封面的显示等,主界面如下图: 一、代码结...
摘要由CSDN通过智能技术生成

C#-WinForm-简单的音频播放器(基于WindowsMediaPlayer控件)(二)

【上一篇】简单的音频播放器(一)

这次为播放器填加了很多更好用的功能,把第一篇文章中的很多坑给填上了,比较大的提升在于播放列表的功能更充足(查看歌曲详情、歌曲搜索、歌曲删除等),同时也加上了Windows7任务栏的控制按钮,加入了播放模式的选择,专辑封面的显示等,主界面如下图:

 

一、代码结构

引用】:Microsoft.VisualBasicMicrosoft.WindowsAPICodePack、Microsoft.WindowsAPICodePack.Shell、

PresentationCore、taglib-sharp(蓝色的引用需要自行下载进行添加,vs内不包含)

窗体①主界面:

 

 

①歌曲详情窗体

 

②删除歌曲窗体

 

歌曲信息类用于存储歌曲信息和封装与歌曲信息有关的方法,我一直比较喜欢这样的写法,能使得代码结

构更清晰。

using Shell32;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SimpleMediaPlayer
{
    public class SongsInfo
    {
        private string fileName;    //1
        private string filePath;
        private string filesize;    //2
        private string artist;      //13
        private string album;       //14
        private Image albumImage;
        private string year;        //15
        private string originName;  //21
        private string duration;     //27
        private string byteRate;    //28

        public string FileName { get => fileName; set => fileName = value; }
        public string FilePath { get => filePath; set => filePath = value; }
        public string Filesize { get => filesize; set => filesize = value; }
        public string Artist { get => artist; set => artist = value; }
        public string Album { get => album; set => album = value; }

        public Image AlbumImage { get => albumImage; set => albumImage = value; }

        public string Year { get => year; set => year = value; }
        public string OriginName { get => originName; set => originName = value; }
        public string Duration { get => duration; set => duration = value; }
        public string ByteRate { get => byteRate; set => byteRate = value; }
        

        public SongsInfo(string fPath)
        {
            SetSongInfo(fPath);
            SetAlbumArt(fPath);
        }

        private void SetSongInfo(string strPath)
        {
            try
            {
                ShellClass sh = new ShellClass();
                Folder dir = sh.NameSpace(Path.GetDirectoryName(strPath));
                FolderItem item = dir.ParseName(Path.GetFileName(strPath));

                fileName = dir.GetDetailsOf(item, 0);
                if (fileName == string.Empty)
                    fileName = "未知";

                FilePath = strPath;

                filesize = dir.GetDetailsOf(item, 1);
                if (filesize == string.Empty)
                    filesize = "未知";

                artist = dir.GetDetailsOf(item, 13);
                if (artist == string.Empty)
                    artist = "未知";

                album = dir.GetDetailsOf(item, 14);
                if (album == string.Empty)
                    album = "未知";

                year = dir.GetDetailsOf(item, 15);
                if (year == string.Empty)
                    year = "未知";

                OriginName = dir.GetDetailsOf(item, 21);
                if (OriginName == string.Empty)
                    OriginName = "未知";

                duration = dir.GetDetailsOf(item, 27);
                if (duration == string.Empty)
                    duration = "未知";

                byteRate = dir.GetDetailsOf(item, 28);
                if (byteRate == string.Empty)
                    byteRate = "未知";
                
                //输出0-50位信息
                //for (int i = -1; i < 50; i++)
                //{
                //    string str = dir.GetDetailsOf(item, i);
                //    Console.WriteLine(i + " && " + str);
                //}
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex);
            }
        }

        //获取歌曲封面
        private void SetAlbumArt(string strPath)
        {
            if(strPath != "" && strPath != null)
            {
                TagLib.File file = TagLib.File.Create(strPath);
                if (file.Tag.Pictures.Length > 0)
                {
                    var bin = (byte[])(file.Tag.Pictures[0].Data.Data);
                    albumImage = Image.FromStream(new MemoryStream(bin)).GetThumbnailImage(100, 100, null, IntPtr.Zero);
                }
                else
                {
                    albumImage = Properties.Resources.DefaultAlbum;
                }
            }
            else
            {
                albumImage = Properties.Resources.DefaultAlbum;
            } 
        }
    }
}

 

TagLib库用于处理媒体文件,例如视频、音频和照片等,例如解析照片、从文件中加载图片、加载音频文件等。

在这里我们就是使用了它从文件中加载图片以获得音频文件的封面图片,如果没有封面图片,则设置为默认封面。

二、窗体的Load、Shown、Closed事件

Load事件:窗体加载时主要是设置一些程序状态(播放列表数据显示绑定,播放列表的歌单历史记录读取)

 

private void Form1_Load(object sender, EventArgs e)
{
    this.odlgFile.Multiselect = true;
    lstSongList.DisplayMember = "fileName";
    lstSongList.ValueMember = "filePath";
    ReloadStatus();
    ReadHistory();
    //设置开机自启
    //StarUp("1");
}

 

Shown事件:设置windows7任务栏略缩图与按钮功能(详见另外一篇博客

 

private ThumbnailToolbarButton ttbbtnPlayPause;
private ThumbnailToolbarButton ttbbtnPre;
private ThumbnailToolbarButton ttbbtnNext;

private void Form1_Shown(object sender, EventArg
  • 10
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值