第一篇随笔,写的不好的地方,各位不要见笑。其他的也不多说了,下面是我在工作中用的一个基于JQuery开源的插件,官方地址:http://www.jplayer.org/。先看下要实现的效果图:

首先引用需要的css和js文件:

 <link href="Styles/jplayer.blue.monday.css" rel="stylesheet" type="text/css" />
<script src="Scripts/jquery-1.8.2.js" type="text/javascript"></script>
<script src="Scripts/jquery.jplayer.min.js" type="text/javascript"></script>
<script src="Scripts/jplayer.playlist.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.blockUI.js" type="text/javascript"></script><!--只是模拟加载等待的一个插件-->

接下来就是播放器的布局了,原本是英文的,在这里我只翻译了常用的:

     <!--播放器设计开始-->
<div style="width: 482px; margin: 0px auto 0px auto;">
<div id="jp_container_N" class="jp-video jp-video-270p">
<div class="jp-type-playlist">
<div id="jquery_jplayer_N" class="jp-jplayer">
</div>
<div class="jp-gui">
<div class="jp-interface">
<div class="jp-progress">
<div class="jp-seek-bar">
<div class="jp-play-bar">
</div>
</div>
</div>
<div class="jp-current-time">
</div>
<div class="jp-duration">
</div>
<div class="jp-controls-holder">
<ul class="jp-controls">
<li><a href="javascript:;" class="jp-previous" tabindex="1" title="上一首">上一首</a></li>
<li><a href="javascript:;" class="jp-play" tabindex="1" title="播放">播放</a></li>
<li><a href="javascript:;" class="jp-pause" tabindex="1" title="暂停">暂停</a></li>
<li><a href="javascript:;" class="jp-next" tabindex="1" title="下一首">下一首</a></li>
<li><a href="javascript:;" class="jp-stop" tabindex="1" title="停止">停止</a></li>
<li><a href="javascript:;" class="jp-mute" tabindex="1" title="静音">静音</a></li>
<li><a href="javascript:;" class="jp-unmute" tabindex="1" title="调节音量">调节音量</a></li>
<li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="最大声音">最大声音</a></li>
</ul>
<div class="jp-volume-bar">
<div class="jp-volume-bar-value">
</div>
</div>
<ul class="jp-toggles">
<li><a href="javascript:;" class="jp-shuffle" tabindex="1" title="shuffle">shuffle</a></li>
<li><a href="javascript:;" class="jp-shuffle-off" tabindex="1" title="shuffle off">shuffle
off</a></li>
<li><a href="javascript:;" class="jp-repeat" tabindex="1" title="单曲循环">单曲循环</a></li>
<li><a href="javascript:;" class="jp-repeat-off" tabindex="1" title="关闭单曲循环">关闭单曲循环</a></li>
</ul>
</div>
<div class="jp-title">
<ul>
<li></li>
</ul>
</div>
</div>
</div>
<div class="jp-playlist" style="height: 500px; overflow-y: auto;">
<ul>
<!-- The method Playlist.displayPlaylist() uses this unordered list -->
<li></li>
</ul>
<div id='divButton' style='width: 103px; height: 30px; margin: 230px auto 200px auto;
display: none;'>
</div>
</div>
<div class="jp-no-solution">
<span>Update Required</span> To play the media you will need to either update your
browser to a recent version or update your <a href="http://get.adobe.com/flashplayer/"
target="_blank">Flash plugin</a>.
</div>
</div>
</div>
</div>
<!--播放器设计结束-->

再来看一下运行的效果图:

然后就是将磁盘的歌曲添加到列表中,我是通过ajax请求将本地歌曲库的所有歌曲重新复制一遍到项目的一个存取歌曲的文件夹中。那先看下js代码:

     <script type="text/javascript">
var mTitle, mArtist, path = "";
var myPlaylist = new jPlayerPlaylist();
$(function () {
myPlaylist = new jPlayerPlaylist({
jPlayer: "#jquery_jplayer_N",
cssSelectorAncestor: "#jp_container_N"
}, [
], {
playlistOptions: {
enableRemoveControls: true
},
swfPath: "Scripts",
supplied: "mp3",
wmode: "window"
});
$("#divButton").html("<input type='button' id='btnSearchMusic' value='单击获取歌曲' style='border:1px solid #48C9EF; background:#48C9EF; cursor:pointer; color:#fff; height:30px;' />").show();
$("#btnSearchMusic").click(function () {
$.blockUI({ message: '<h2>正在加载歌曲,请稍候。。。</h2>' });
$("#divButton").hide();
myPlaylist.remove();
$.ajax({
url: "play.ashx?action=GetResourceLists",
cache: false,
success: function (data) {
var json = eval("(" + data + ")");
if (json.length > 0) {
for (var i = 0; i < json.length; i++) {
var fileName = json[i].OriginalPath;
path = json[i].FullPath;
var singer = fileName.substring(9, fileName.length);
mArtist = singer.substring(0, singer.indexOf("-"));
var song = singer.substring(0, singer.lastIndexOf("."));
mTitle = song.substring(song.lastIndexOf("-") + 1);
//console.log(mArtist);
myPlaylist.add({
title: mTitle,
artist: mArtist,
free: true,
mp3: "http://localhost:3881/MiniPlay/Resources/" + encodeURI(singer)
});
}
}
}
});
$.unblockUI();
});
});
</script>

下面是ashx(一般处理程序)的关键代码:

     //转换json格式
public string FormatJson(int count, List<FileInfo> list)
{
string str = "";
DataContractJsonSerializer json = new DataContractJsonSerializer(list.GetType());
using (MemoryStream ms = new MemoryStream())
{
json.WriteObject(ms, list);
str = Encoding.UTF8.GetString(ms.ToArray());
}
return str;
} //获取所有文件
public void GetResourceLists(HttpContext context)
{
List<FileInfo> files = new List<FileInfo>();
if (File.Exists(context.Server.MapPath(@"~/config.ini")))
{
StreamReader strReader = new StreamReader(context.Server.MapPath(@"~/config.ini"));
var path = strReader.ReadToEnd().Substring();
strReader.Close();
var localFileLists = Directory.GetFiles(path);
var targetPath = context.Server.MapPath(@"~/Resources");
if (!Directory.Exists(targetPath))
{
Directory.CreateDirectory(targetPath);
}
if (localFileLists.Count() > )
{
foreach (var counts in localFileLists)
{
if (counts.Substring(counts.LastIndexOf(".")) == ".mp3")
{
if (!File.Exists(Path.Combine(targetPath, Path.GetFileName(counts)))) //如果目标存在该文件,不复制
{
File.Copy(counts, Path.Combine(targetPath, Path.GetFileName(counts)));
}
files.Add(new FileInfo(counts));
}
}
context.Response.Write(FormatJson(files.Count(), files));
}
}
else
{
context.Response.Write("no exist");
}
}

到这里,要实现上面的功能基本已经完成了!

原文地址:http://www.cnblogs.com/JasonLong/p/jplayer-mp3.html

JPlayer-MP3播放器(带播放列表)的更多相关文章

  1. 嵌入式mp3播放器

    分四部分:按键驱动,声卡驱动,Madplay播放器移植,MP3主播放器处理 按键1:播放,按键2:停止,按键3:上一曲,按键4:下一曲 UA1341内核自带声卡驱动 .解压内核: tar zxvf l ...

  2. 你用java的swing可以做出这么炫的mp3播放器吗?

    这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 j ...

  3. 安卓MP3播放器开发实例(1)之音乐列表界面

    学习安卓开发有一年了,想想这一年的努力,确实也收获了不少.也找到了比較如意的工作. 今天准备分享一个以前在初学阶段练习的一个项目.通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正 ...

  4. x宝23大洋包邮的老式大朝华MP3播放器简单评测

    (纯兴趣测评,非广告) 最近逛X宝,看到了这个古董级MP3播放器居然还在售,于是脑抽+情怀泛滥买了一个. 然后呢,从遥远的深圳跨越好几千公里邮过来了这个玩意: 那节南孚5号电池是我自己的,是为了对比一 ...

  5. C# wave mp3 播放器探寻

    C# wave mp3 播放器探寻   最近无聊,想听听歌曲.可怜新电脑上歌曲就两三首,要听其它的就得在旧电脑上播放.可是,那台古董但不失健壮的本本被老婆无情的霸占了.无奈. 思来想去,得,写个程序播 ...

  6. 团队编程--MP3播放器

    设计思路: 这次的作业是一个MP3播放器,它是一个团队项目.由于我们都没接触过这类的编程.刚开始的时候我们是不知道从什么地方着手的.经过我们的商量我们决定从现在市场主流的音乐播放器上找到几个主要的功能 ...

  7. MP3播放器团队项目

    一.设计思路 程序要求能播放MP3文件,因此需调用库中的播放方法:右键工具箱选择项,添加com组件,选择window media player后工具箱就会多一个控件,然后拖到窗体中就OK了.另在窗体中 ...

  8. 你也可以用java的swing可以做出这么炫的mp3播放器_源码下载

    I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this M ...

  9. MP3播放器的实现

    今天,基本上实现了MP3播放器的基本功能,现在总结一下. 首先,下载服务器端的MP3列表,这里用到了下载技术和解析XML文件技术. 下载参考(http://blog.csdn.net/huim_lin ...

  10. 开源mp3播放器--madplay 编译和移植 简记

    madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...

随机推荐

  1. 【b602】金明的预算方案

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈 ...

  2. spring boot中servlet启动原理

    启动过程及原理 1 spring boot 应用启动运行run方法 StopWatch stopWatch = new StopWatch(); stopWatch.start(); Configur ...

  3. Flink执行时之流处理程序生成流图

    流处理程序生成流图 DataStream API所编写的流处理应用程序在生成作业图(JobGraph)并提交给JobManager之前,会预先生成流图(StreamGraph). 什么是流图 流图(S ...

  4. C++常用数据结构的实现

    常用数据结构与算法的实现.整理与总结 我将我所有数据结构的实现放在了github中:Data-Structures-Implemented-By-Me 常用数据结构与算法的实现.整理与总结 KMP字符 ...

  5. produces在@requestMapping中的使用方式和作用

    produces可能不算一个注解,因为什么呢,它是注解@requestMapping注解里面的属性项, 它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码: 还有一个属性与其对 ...

  6. 一入Python深似海--print

    先给大家来个干货^~^,学习Python的一个好站点,http://learnpythonthehardway.org/book/ 经典样例 以下是几个老经典的样例喽,刚接触Python的能够敲一敲, ...

  7. System.nanoTime()和System.currentTimeMillis()性能问题

    ​ 之前给模块做性能优化的时候,需要将性能调到毫秒级,使用了System.nanoTime()和System.currentTimeMillis()对代码分片计时分析耗时操作,后发现在串行情况下性能达 ...

  8. KVM,QEMU核心分析

    现在的问题是学习虚拟化软件KVM相关实施原则.处理,的源代码的分析总结,,若有不对的地方,希望大家提出. 因为有一些代码结构图或者是架构图上传比較麻烦.所以博文都放在了自己的个人博客上.麻烦大家移步查 ...

  9. Unity UGUI——Rect Transform包(Anchors)

    Anchors(锚)操作演示 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fontsize/400/ ...

  10. java-线程-基础

    线程状态及转化 借用网上的一幅图: 说明: 线程一共分为5种状态 新建状态(new) 线程对象被创建后,就进入了新建状态,例如:Thread t = new Thread(); 就绪状态(Runnab ...