本文利用C# 调用Windows自带的Windows Media Player 打造一款属于自己的音乐播放器,以供学习分享使用,如有不足之处,还请指正。

概述

Windows Media Player是微软公司出品的一款免费的播放器,属于Microsoft Windows的一个组件,通常简称"WMP",支持通过插件增强功能。版本Windows Media Player 12 随 Windows 7及以上提供。可以播放MP3,WMA,WAV等音频文件。本文音乐播放器,主要是MP3文件。

涉及知识点

  1. 加载COM组件Windows Media Player控件到Winform窗体中。
  2. AxWindowsMediaPlayer控件的常见用法
  3. BackgroundWorker 在单独的线程上执行操作。异步操作界面上的内容。
  4. IrisSkin 皮肤控件,主要利用SkinEngine来美化界面,达到风格统一的效果。

设计思路

  1. 通过AxWindowsMediaPlayer实现音乐的播放。
  2. 通过PictureBox实现歌曲背景图的显示。
  3. 通过BackgroundWorker 实现背景图的切换更新,以及歌词的实时显示。
  4. 通过Label显示歌词,以及播放时间。
  5. 通过DataGridView实现歌曲列表。
  6. 通过IrisSkin来美化界面。

添加Windows Media Player组件

工具--》选择工具箱项--》COM组件--》Windows Media Player,如下图所示:

音乐播放器效果图

音乐播放器效果图如下图所示

核心代码

加载皮肤

   /// <summary>
/// 初始化皮肤
/// </summary>
private void InitInfo()
{
this.skinEngine = new SkinEngine();
this.skinEngine.SkinFile = AppDomain.CurrentDomain.BaseDirectory + @"Skins\mp10.ssk";
this.skinEngine.DisableTag = ;
ReadSkinFile();
}

切换背景图

  /// <summary>
/// 背景图切换
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BgWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (isRunning) {
if (bgUrls != null && bgUrls.Length > ) {
this.curIndex = (this.curIndex % bgUrls.Length);
this.pbImage.Image = Image.FromStream(HttpWebRequest.Create(bgUrls[this.curIndex]).GetResponse().GetResponseStream());
this.pbImage.SizeMode = PictureBoxSizeMode.StretchImage;
this.curIndex++;
//
this.lblTime.Invoke(new Action(() =>
{
this.lblTime.Text = string.Format("{0}/{1}", this.axWindowsMediaPlayer1.Ctlcontrols.currentPositionString, this.axWindowsMediaPlayer1.currentMedia.durationString);
//this.lblTime.ForeColor = Color.White;
})); }
Thread.Sleep();
}
}

AxWindowsMediaPlayer相关属性方法

 [基本属性]  
URL:String; 指定媒体位置,本机或网络地址
uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible
playState:integer; 播放状态,=停止,=暂停,=播放,=正在缓冲,=正在连接,=准备就绪
enableContextMenu:Boolean; 启用/禁用右键菜单
fullScreen:boolean; 是否全屏显示
//播放器基本控制
Ctlcontrols.play; 播放
Ctlcontrols.pause; 暂停
Ctlcontrols.stop; 停止
Ctlcontrols.currentPosition:double; 当前进度
Ctlcontrols.currentPositionString:string; 当前进度,字符串格式。如“:”
Ctlcontrols.fastForward; 快进
Ctlcontrols.fastReverse; 快退
Ctlcontrols.next; 下一曲
Ctlcontrols.previous; 上一曲
[settings] wmp.settings //播放器基本设置
settings.volume:integer; 音量,-
settings.autoStart:Boolean; 是否自动播放
settings.mute:Boolean; 是否静音
settings.playCount:integer; 播放次数
[currentMedia] wmp.currentMedia //当前媒体属性
currentMedia.duration:double; 媒体总长度
currentMedia.durationString:string; 媒体总长度,字符串格式。如“:”
currentMedia.getItemInfo(const string); 获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Description"=媒体内容描述, "Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址
currentMedia.setItemInfo(const string); 通过属性名设置媒体信息
currentMedia.name:string; 同 currentMedia.getItemInfo("Title")
[currentPlaylist] wmp.currentPlaylist //当前播放列表属性
currentPlaylist.count:integer; 当前播放列表所包含媒体数
currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia
axWindowsMediaPlayer1.currentMedia.sourceURL; //获取正在播放的媒体文件的路径
axWindowsMediaPlayer1.currentMedia.name; //获取正在播放的媒体文件的名称
axWindowsMediaPlayer1.Ctlcontrols.Play          播放
axWindowsMediaPlayer1.Ctlcontrols.Stop          停止
axWindowsMediaPlayer1.Ctlcontrols.Pause          暂停
axWindowsMediaPlayer1.Ctlcontrols.PlayCount        文件播放次数
axWindowsMediaPlayer1.Ctlcontrols.AutoRewind       是否循环播放
axWindowsMediaPlayer1.Ctlcontrols.Balance         声道
axWindowsMediaPlayer1.Ctlcontrols.Volume         音量
axWindowsMediaPlayer1.Ctlcontrols.Mute          静音
axWindowsMediaPlayer1.Ctlcontrols.EnableContextMenu    是否允许在控件上点击鼠标右键时弹出快捷菜单
axWindowsMediaPlayer1.Ctlcontrols.AnimationAtStart    是否在播放前先播放动画
axWindowsMediaPlayer1.Ctlcontrols.ShowControls      是否显示控件工具栏
axWindowsMediaPlayer1.Ctlcontrols.ShowAudioControls    是否显示声音控制按钮
axWindowsMediaPlayer1.Ctlcontrols.ShowDisplay       是否显示数据文件的相关信息
axWindowsMediaPlayer1.Ctlcontrols.ShowGotoBar       是否显示Goto栏
axWindowsMediaPlayer1.Ctlcontrols.ShowPositionControls  是否显示位置调节按钮
axWindowsMediaPlayer1.Ctlcontrols.ShowStatusBar      是否显示状态栏
axWindowsMediaPlayer1.Ctlcontrols.ShowTracker       是否显示进度条
axWindowsMediaPlayer1.Ctlcontrols.FastForward       快进
axWindowsMediaPlayer1.Ctlcontrols.FastReverse       快退
axWindowsMediaPlayer1.Ctlcontrols.Rate          快进/快退速率
axWindowsMediaPlayer1.AllowChangeDisplaySize 是否允许自由设置播放图象大小
axWindowsMediaPlayer1.DisplaySize       设置播放图象大小
    -MpDefaultSize         原始大小
    -MpHalfSize           原始大小的一半
    -MpDoubleSize          原始大小的两倍
    -MpFullScreen          全屏
    -MpOneSixteenthScreen      屏幕大小的1/
    -MpOneFourthScreen       屏幕大小的1/
    -MpOneHalfScreen        屏幕大小的1/
axWindowsMediaPlayer1.ClickToPlay       是否允许单击播放窗口启动Media Player

备注

关于AxWindowsMediaPlayer的属性方法,也可以参考豆丁文档。

源码下载链接

C# 一款属于自己的音乐播放器的更多相关文章

  1. 基于Qt的开源音乐播放器(CZPlayer)

    CZPlayer CZPlayer是基于Qt开发的一款功能强大的音乐播放器,该播放器的论坛地址请点击here,目前CZPlayer已经是第四个版本了,历史版本也分别在我的github上, github ...

  2. 酷狗、QQ、天天动听——手机音乐播放器竞品对比

    如果说什么艺术与人们生活最贴近,那应该属音乐了,因此当代人不离身的手机里必然会有自己喜欢的音乐播放器APP存在. 在当今无论PC端还是手机端音乐播放器都越来越同质化,我们应该选择哪款手机音乐播放器?它 ...

  3. 基于jQuery虾米音乐播放器样式代码

    分享一款基于jQuery虾米音乐播放器样式代码.这是一款基于jquery+html5实现的虾米音乐播放器源码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div c ...

  4. Linux终端音乐播放器cmus攻略: 操作歌单

    目录 1. 安装 2. 操作说明 2.1. *PlayList歌单 2.2. 其他 3. 视图切换 4. 使响应Media/play按键 4.1. 编译安装 cmus是一款开源的终端音乐播放器.它小巧 ...

  5. 一款非常简单的android音乐播放器源码分享给大家

    一款非常简单的android音乐播放器源码分享给大家,该应用虽然很小,大家常用的播放器功能基本实现了,可能有点还不够完善,大家也可以自己完善一下,源码在源码天堂那里已经有了,大家可以到那里下载学习吧. ...

  6. 使用react native制作的一款网络音乐播放器

    使用react native制作的一款网络音乐播放器 基于第三方库 react-native-video设计"react-native-video": "^1.0.0&q ...

  7. ubuntu下一款有点感觉的 linux音乐播放器 clementine(小橘子))

    https://www.clementine-player.org/ 在linux听音乐的感觉确实不是很好,音乐播放器很多.但是仅仅只是数量上的优势,在确实不是很好用.自带的rhythmbox确实很占 ...

  8. 使用python打造一款音乐播放器

    作者qq:64761294 编程/考试交流群:834531270 欢迎交流 核心播放模块(pygame内核) import time import pygame import easygui as g ...

  9. SE Springer小组之《Spring音乐播放器》可行性研究报告三、四

    3 对现有系统的分析 由于本次可行性分析主要是建立在团队自行实现一个音乐软件的目标上,并不是在一个现有系统的基础上开发改进的新系统.因此这里将分析一款市面上已经存在的音乐软件(以下称为W音乐),并为之 ...

随机推荐

  1. 【RL-TCPnet网络教程】第34章 RL-TCPnet之SMTP客户端

    第34章      RL-TCPnet之SMTP客户端 本章节为大家讲解RL-TCPnet的SMTP应用,学习本章节前,务必要优先学习第33章的SMTP基础知识.有了这些基础知识之后,再搞本章节会有事 ...

  2. SQL Server索引碎片整理实际操作记录

    SQL Server 版本是 2008 R2. 查询数据库索引碎片情况的 SQL 语句(来源): SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, ind ...

  3. apache(OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试 ...

    今天启动Apache时, 报了“(OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试. : make_sock: could not bind to address 0.0.0.0: ...

  4. Python内置函数(41)——max

    英文文档: max(iterable, *[, key, default]) max(arg1, arg2, *args[, key]) Return the largest item in an i ...

  5. 并发编程(十四)—— ScheduledThreadPoolExecutor 实现原理与源码深度解析 之 DelayedWorkQueue

    我们知道线程池运行时,会不断从任务队列中获取任务,然后执行任务.如果我们想实现延时或者定时执行任务,重要一点就是任务队列会根据任务延时时间的不同进行排序,延时时间越短地就排在队列的前面,先被获取执行. ...

  6. 初学Java Web(6)——JSP学习总结

    为什么要学习 JSP Servlet 的短板: Servlet 的出现,是为了解决动态输出网页的问题. 虽然这样做目的能达到,但是存在一些缺陷: 在 Servlet 输出网页片段非常恶心 (可读性差, ...

  7. 【ASP.NET Core快速入门】(九) RoutingMiddleware介绍以及MVC引入

    前言 前面我们介绍了使用app.Map来配置路由,但是对于一般不是特别大的项目来说,我们不使用Map来进行路由配置. 配置路由 我们首先需要在Startup.cs文件中的ConfigureServic ...

  8. 你真的会PHP吗?

    Note: 1) PHP中的数据类型 PHP一共支持八种数据类型, 4种标量类型,boolean(布尔型),integer(整形),float/double(浮点型)和string(字符串类型), 2 ...

  9. leetcode — single-number

    /** * Source : https://oj.leetcode.com/problems/single-number/ * * * Given an array of integers, eve ...

  10. leetcode — same-tree

    import java.util.Stack; /** * Source : https://oj.leetcode.com/problems/same-tree/ * * * Given two b ...