第一篇:音乐播放器报告
一、综述本课题国内外研究动态,说明选题的依据和意义
1.1课题的背景和意义
随着科技的进步,手机的功能也不断的得到丰富,从最早的“大哥大”到现在的商务PDA手机,智能手机,音乐手机等等,功能也从单纯的打电话发展到了发短信,听歌,上网....手机和我们生活的联系越来越紧密,手机的功能也是很多人们关注的焦点。
目前手机的音乐播放功能已经是大家比较关注的一个部分了,不少在人在购买手机的时候都会关心手机的音乐播放的能力,这也足以看出目前大家对音乐播放功能的重视,所以一款性能良好的手机音乐播放器软件一定会受到欢迎。和传统的音乐播放器相比,手机播放音乐更加的容易携带,其他方面也都不输于传统音乐播放器,而且还具有网上听音乐功能,所以开发一款受欢迎的手机音乐播放软件是具有良好的市场和应用前景的。
一款专业的音乐播放软件是手机中必不可少的要素,几乎市场上所有的手机都拥有一个自带的音乐播放软件,通过软件可以对音乐欣赏中一些必要的元素进行人性化的设置,同时在操作的时候也能得到一定的便利,但是不能满足用户的所有要求,所以网上就出现了各种各样的手机音乐播放软件,来满足不同用户的不同要求。不同手机平台的手机,所支持的音乐播放软件也是各不相同,而现在最流行的手机平台就是google的android手机平台,所以本课题就致力于开发出一款基于android手机平台的音乐播放器,来满足用户的使用需求。
1.2课题的研究历史和发展现状
首先简单的介绍一下google的android。Android原本是一家独立的手机操作系统公司,2005年被Googel收购。2007年11月,Googel宣布推出基于Linux的Android开放式手机操作系统,沿袭至今,已发展到2.2版本(3.0尚在研)。此系统的“开放”尤其体现在任何手机制造商均可无需支付专利费即可将此系统运用在自己的手机
Google的以Linux为内核的Android移动手机平台从诞生之日起短时间内便在世界范围里获得了广泛的关注。最近的报告显示在中国,一个拥有最大的人口,拥有最多的手机用户,拥有巨大的增长潜力的国家,这个系统的占有率沿着一个倒抛物线的增长曲率成为手机操作系统中的霸主 同时国外的Android市场也正在如日中天的扩展,据市场调研机构NPDGroup最近发布的一份报告称,今年第一季度基于Android操作系统的智能手机在美国智能手机总销量中所占比例达到28%,首度超过苹果iPhone,苹果iPhone约为21%,相信在不久的将来会有更多的用户选择Android系统的手机或是无线终端设备。
根据美国移动广告商AdMob的统计,iPhoneOS在美国本土的网络流量占了美国本土全部移动互联网流量的39%,而Android系统首次超越了它,达到了46%。不过要放在世界范围内来看,iPhone OS仍占了46%,而Android只占了25%,还是排第二。不过仍能说明 Android的来势汹汹,能对苹果造成威胁的果然只有Google。
国内目前中国移动、Moto、LG、三星、华为、MTK等正在积极筹备Android产品和相关的电子市场,中国移动率先推出了基于Android深度定制的Ophone系统和Mobile Marke,联想基于Android的乐phone手机也于5月17日正式上市,国内其他电子厂商也纷纷表示到下半年会推出大量的基于Android的手机和MID产品,Moto更是放弃了原有的所有手机操作系统,孤注一掷,计划今年国内市场有近20款Android产品面世。3G时代的到来,给中国企业追赶国际厂商带来了腾飞的机会,据预测亚太区域将来会占据全球Android市场中最大的收入份额。
Android的代号序列会按甜点名字中首个英文字母(C、D、E、F)的排列顺序,到目前为止android系统已经有多个帮本: Android1.1发布于2009年2月主要特性:
闹钟,API示例,浏览器,摄像头,计算器,联系人,开发工具包,拨号应用,电子邮件,地图,信息服务,音乐,图片,设置。2009年4月30日,官方1.5版本(Cupcake)的Android发布。主要的更新如下: 拍摄/回放视频,并支持上传到youtube,支持立体声蓝牙耳机,同时改善自动配对性能,最新的采用WebKit技术的浏览器,支持拷贝/粘帖和页面中搜索,gPS性能大大提高, 屏幕虚拟键盘,主屏幕增加音乐播放器和相框widgets,应用程序自动随着手机旋转 短信,Gmail,日历,浏览器的用户界面大幅改善,比如说Gmail现在可以批量删除邮件了 ,相机启动速度加快,拍摄图片可以直接上传到picasa, 来电照片显示。2009年9月15日, 1.6(Donut)版本SDK发布。主要的更新如下:完全重新设计的Android Market,手势支持,支持CDMA网络,文字转语音系统(TXT-2-speech),快速搜索框,全新的拍照界面,应用程序耗电查看,支持VPN,支持更多的屏幕分辨率,支持OpenCore2媒体引擎,新增面向视觉或听觉困难人群的易用性插件
2009年10月26日, 2.0(Eclair)版本SDK发布。主要的更新如下:优化硬件速度,“Car Home”程序,支持更多的屏幕分辨率,重整界面,新的浏览器的用户界面和支持HTML5,新的联系人名单,更好的白色/黑色背景比率,改进Google Maps 3.1.2,支持Microsoft Exchange,支持内置相机闪光灯,数字变焦,改进的虚拟键盘,蓝牙2.1 Android的代号序列会按甜点名字中首个英文字母(C、D、E、F)的排列顺序。下一个版本的Android将会命名为Froyo(冻酸奶,基于Linux Kernel 2.6.32)。Froyo 之后的版本的Android将会命名为Gingerbread(姜饼,基于Linux Kernel 2.6.33/34)。
二、研究的基本内容,拟解决的主要问题:
2.1课题研究的主要内容
本文的主要研究内容包括以下几个方面: 查找相关书籍与文献,了解Android的构架并搭建Android平台。 查找相关资料,现阶段基于Android平台手机音乐播放器发展现状以及相关功能。
在上述基础上,提出所要做的手机播放器的相关功能如:播放本地歌曲,设置,播放列表,播放记录等。
在Android平台上完成该课题的软件并进行相应的软件测试。
2.2课题研究的拓展
传统的音乐播放器受限于手机存储和计算处理能力,在音乐收集、存储和管理方面一直存在瓶颈,新一代音乐播放器应该进一步拓展了应用空间,更迎合用户的使用习惯,将音乐搜索、收藏、管理等全部交由网络来完成,为用户提供的音乐资源更为庞大,搜索更为精准,管理和收藏更为简便的服务。
1.智能化超级搜索 网络音乐播放器的特点就是集成了音乐搜索服务,将用户从繁杂的网页搜索解脱出来,提供更为专业和准确的音乐搜索服务。新一代音乐播放器提供的搜索结果不是直接抓取的网页搜索链接,而是先由服务器进行实时采集和筛选,然后保存在数据库由用户进行调用,以此来保证搜索结果的准确性、唯一性和有效性,将搜索结果的验证和判断交由服务器来未完成,避免出现盲搜会出现的搜索结果重复和无效的情况发生,从而大大提高用户的搜索效率。
2.智能化口味分析 在网络音乐时代海量的音乐信息已经改变了大众的听歌习惯,一天听个几十上百首新歌都不是问题。无论是音乐排行榜、媒体推荐还是口碑宣传,都属于小范围的传播途径,这些传统的歌曲信息获取方式已经无法满足大众大量获取新鲜歌曲的需要。新一代音乐播放器应该实时采集用户的听歌习惯,实时分析出用户的喜好,在短时间内即可将大量满足用户喜好的歌曲推荐出来,用户无须人工操作即可不断听到新鲜的好歌,常听常新 3.虽然网络音乐播放已经成为主流,但很多用户仍习惯于在本地收藏和管理音乐文件。本地音乐管理所遇到的主要难题就是音乐信息混乱,绝大多数从网上下载的音乐文件名都是简化的英文或数字,让人无法辨识出正确的歌曲名。日积月累这些音乐文件就会给日常管理带来极大麻烦。识别服务则可以完美解决这一问题,它可以自动采集音乐旋律上传至服务器,凭借服务器系统强大的识别能力,通过音乐旋律即可准确误别出正确的音乐信息,然后再自动对本地音乐文件进行信息更正,将音乐文件重命为正确的中文或英文歌曲名等。歌曲数量再多都能在极短的时间内批量完成误别操作,识别服务可以说是现在本地音乐管理的不可或缺的帮手
上面所说的几种功能都是下一代音乐播放器应该具有的功能,只有音乐播放器客户端软件的不断创新发展,未来人们欣赏音乐的体验才会更加精彩。
三、研究步骤、方法及措施:
3.1研究步骤 研究步骤主要分为6个步骤,包括理论准备、材料分析、需求分析、、编码实现、系统测试、完善软件系统。每个步骤的大致工作如下: 3.1.1理论准备
此步骤是整个研究过程的基础,也是今后研究展开的基石,主要是翻阅相关资料,查询Android平台的历史和发展现状,在理论的基础上为接下来的步骤做准备。3.1.2材料分析
对现行的Android平台手机播放器进行分析并提出相应功能。
3.1.3需求分析
在步骤1和2的基础上对该课题进行需求分析。
3.1.4编码实现
此过程主要是针对步骤2和3的编码实现,完成上文描述的功能需求进行必要的编码。当然这里是在Android平台上实现的。3.1.5系统测试
对基于Android平台手机播放器进行基本的软件测试,查找并修改常见的BUG。3.1.6后期完善
此步骤主要是对上述软件的界面等外设进行修改,以达到操作方便,友好美观的效果。3.2研究方法和措施
根据现有的音乐播放器,分析用户喜好,优化功能,邀请不同的用户提出建议,不断的进行完善。
四、研究工作进度:
序号 1 2 3 4 5 6 7 8 时间
2010.5.11-2010.6.11 2010.6.12-2010.6.30 2010.7.1-2010.7.31 2010.8.1-2010.8.31 2010.9.1-2010.9.30 2010.10.1-2010.10.9 2010.10.9-2010.10.28
内容
熟悉课题要求与任务 查阅相关文献资料 熟悉Android系统
构建Android平台以及熟悉相关操作
需求分析 完成开题报告 软件编程 测试软件
完善软件,准备论文写作
修改论文,定稿,准备答辩,材料归档 2010.10.28-2010.11.9 2010.11.16-2010.11.10 2010.11.29-2010.12.1
五、主要参考文献:
[1] ophone应用开发权威指南 胡幸征著;—北京:电子工业出版社,2010.1 [2] 深入浅出Google Android/E2Ecloud 工作室编著。—北京:人民邮电出版社,2009.8 [3] Google Android开发入门与实战/靳岩,姚尚朗编著。—北京:人民邮电出版社,2009.7 [4] Google Android SDK开发范例大全/余志龙等编著;王世江改编。—北京:人民邮电出版社,2009.7(2009.8重印)[5] Android应用框架原理与程序设计36技/高焕堂著;
六、指导教师审核意见:
指导教师签字:
年 月 日
七、系、室、部(研究所)评议意见:
1.适合本专业的毕业设计课题;
2.不适合本专业的毕业设计课题;
3.其他
系、室、部(研究所)主任签字:
八、开题小组评审意见:
开题小组组长签字:
2009 年 9 月 27 日
九、系领导(答辩委员会)审核意见:
1.通过; 2.完善后通过;
3.未通过
系领导(答辩委员会)签字:
2009 年 9 月 28 日
第二篇:音乐播放器项目报告
华东交通大学课程项目
学 院:软件学院 ______ 课程名称: Android应用开发___________ 项目名称: ___ _音乐播放器________ 学生名字: ____ ________ 学生班级: ____ ______ 授课教师: __________ 授课学期:2015___至2016______学年第2学期
2016年 6月 1 日
目录
目录...................................................................................................................................2
1、需求分析.............................................................................................................................3
1.1编写目的.....................................................................................................................3 1.2项目背景.....................................................................................................................3 1.3目标.............................................................................................................................4 1.4用户特点.....................................................................................................................4
2、程序设计.............................................................................................................................5
2.1欢迎界面....................................................................................................................5 2.2主页面........................................................................................................................6 2.3播放音轨SeekBar......................................................................................................6 2.4播放调节功能实现.....................................................................................................7 2.5歌曲列表显示界面.....................................................................................................8 2.6专辑列表显示界面.....................................................................................................8
3、功能设计.............................................................................................................................9
4、个人总结...........................................................................................................................10
1、需求分析 1.1编写目的
现今社会生活紧张,而欣赏音乐史其中最好的舒缓压力的方式之一,音乐播放类的软件数不胜数,为什么我还要再写一个播放器出来呢?因为现有的音乐播放器功能实在是有些多了,多未必不好,但是我总想要一个干净纯粹的音乐播放器,只为听歌的播放器,一个有着一些自己想要的功能的播放器,比如“切歌”,一个自己熟悉代码的播放器,甚至,一个可以自定义功能结构的音乐播放器。本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计的实现的这主要功能是播放MP3等音乐文件,并且能够控制播放器播放,暂停,停止,上一曲,下一曲。界面简单,操作简单。
本软件具备音乐播放器的播放歌曲、歌曲列表、拖动进度等基本功能,同时本播放器界面简洁美观,操作简单便捷。
1.2项目背景
随着智能手机的普及,用户需要各种各样的应用软件,音乐播放器肯定是必不可少的。随着计算机的广泛运用,手机市场的迅速发展,各种音频资源也在网上广为流传,这些资源卡是平常,但已经渐渐成为人们生活中必不可少的一部分了。于是各种手机播放器也紧跟着发展起来,但是很多播放器一味最求外观花俏,功能庞大,对用户的手机造成很多资源浪费,比如CPU,内存等的占用率过高,在用户需要多任务操作时,受到不小的影响,带来了许多不便,而对于大多数普通用户,许多功能用不上,形同虚设。针对以上各种弊端,选择了开发多语种的音频播放器,将各种性能优化,继承播放器的常用功能,满足一般用户听歌的需求。1.3目标
学习完本周的应用开发课程之后,需要实现以下目标: 可以获取本地音乐 可以显示歌曲的进度
可以用拖动条来控制歌曲的进度 音乐播放器可以循环播放音乐; 可以播放下一首歌曲; 有一个精美的界面; 可以通过手势调节音量;
1.4用户特点
本系统的最终用户是面向广大的拥有手机的用户。广大用户有各个阶级的,学生,上班族,家长。
主要群体是学生,学生的特点是要求播放的音频潮流,音质高,功能多种多样。学生基本上会随身携带手机。
上班族工作压力比较大,可以适当的播放音乐缓解压力。
2、程序设计
2.1欢迎界面
欢迎界面模块主要是用于给用户一种友好的体验,让用户较容易接受本软件。进入系统后进入欢迎界面如图2.1,运用计时器两秒钟后自动跳转到选择进入界面4.2。并且运用了组合动画实现了渐隐的效果。
2.1欢迎界面 2.2主页面
主页面是本运用的核心界面,本界面拥有三个Fragment,可以运用Activity底部的选项卡进行切换,三个Fragment分别为歌曲列表,正在播放以及专辑列表。如图4.2所示,此时Activity上显示的Fragment为正在播放,此页面运用一张炫酷的网络图片。中间一块专辑及歌曲显示的模块是属于一个自定义模块。底部为音轨模块。
2.2主页面
2.3播放音轨SeekBar 播放器最重要的一部分就是音轨与歌曲进度同步的实现。音轨设置了两个TextView用来显示当前歌曲播放的进度时间和歌曲的长度。音轨对象SeekBar在歌曲刚开始播放的时候调用方法SeekBar.setMax(),参数传入歌曲的长度。SeekBar.setProgress(1)设置游标的起始进度为1。Android的线程的开始是通过Handler类来进行的,Handler类是线程与线程之间通信的桥梁,实现Runnable接口会实现里面的run方法,当线程开始的时候,Runnable中的run方法会向Handler发一个Message消息,这样,Handler类就可以接收到run方法发送过来的不同的消息进行不同的代码处理。这样就达到了各线程之间的通信。要启动一个线程调用Handler的方法postDelayed(Runnable,1000)表示线程睡眠时间是1000ms。
让播放歌曲的线程每隔1000ms,即每1秒对音轨的TextView重新设置时间且让进度条 前进1秒的进度。对音轨进行刷新。这样就实现了歌词同步功能SeekBar有一个监听器,该监听器的作用是一直保持着对进度条的监听,当我们用鼠标向SeekBar的各位置进行点击时,它会自动监听其位置,进行相应的位置显示。这也是进度条上的游标会不停的移动和歌词时间会不停的变动的原因。
2.3播放音轨
2.4播放调节功能实现
各按钮水平放置,从左到右依次是上一首、播放、下一首功能按钮。用的是布局中的线性布局LinearLayout,;将其设置为水平,如图所示。LinearLayout中依次放置播放/暂停,上一首、下一首按钮属性。
歌曲专辑图片显示,如果有歌曲图片,才会返回,否则为null,2.4控制按钮
Android的媒体播放原理:Android源程序已经为我们封装好了一个接口类,叫MediaPlayer。该接口在执行行需要一个数据源,通过如下步骤:
第一步:MediaPlayer.reset();复位操作,为以后的媒体准备播放作准备。第二步:传入歌曲数据源,这里也是一个数据MediaPlayer.setDataSource(String path);参数需要传一个路径,该接口类在收到路径后将其转化为数据源。
第三步:准备播放数据源,调用方法MediaPlayer.Prepare()。
第四步:MediaPlayer.Start();播放数据源,该数据源播放后,不再与程序有关,需要用MediaPlayer.Stop()方法让其停止或MediaPlayer.Start();让其启动。2.5歌曲列表显示界面
歌曲列表整体采用了相对布局(RelativeLayout),中间歌曲列表部分采用的是ListView视图,以确保有大量歌曲时能滚动式容纳所有歌曲,如图2.5所示,背景采用一张炫酷的图片,自定义LIstView,左侧为歌曲图片,中间为歌曲名歌手,最右边为歌曲时长。
歌曲的名称:MediaStore.Audio.Media.TITL 歌曲的歌手名:MediaStore.Audio.Media.ARTIST 歌曲的总播放时长:MediaStore.Audio.Media.DURATION
2.5歌曲列表
2.6专辑列表显示界面
专辑列表采用了网格视图(GridView)用它能实现视图的网格排列,九宫格视图就是GridVew最典型的使用,GridView是一个AdapterView,所以需要通过适配器来绑定数据,这里使用BaseAdapter。如图所示用一张网络图片作为背景,GRidView布局自定义,每个item分为两部分,上面为图片,下边为歌曲专辑名。
歌曲的专辑名:MediaStore.Audio.Media.ALBUM
2.6专辑列表
3、功能设计
该系统具有以下主要功能: 1)播放歌曲,显示歌曲名字 2)播放上一首歌和下一首歌
3)播放模式可以是循环的,也以是单曲循环 4)可以通过手势调节歌曲进度 5)可以选取歌曲进行播放
4、个人总结
通过对Android手机平台的音乐播放器的开发,使我对Android系统有了更高层次的了解,Android功能是非常强大的,在这段时间的学习与实践中遇到了很多难题,不过通过网上专门的Android 社区有些开源的代码供参考研究,同时还得到了Android高手的指点,总算给完成了,觉得蛮有意义的。
开发Android音乐播放器,要抓住开发的核心部分,音乐播放器大体由播放主界面、播放列表组成。这两个个模块完成,音乐播放器就能初具规模。而其它的功能都是在这两个模块的基础上去补充添加的,这是功能的确是必不可少的功能,否则就不具备音乐播放器的基本功能了。
在开发过程中我学到了一些经验:系统分析的好坏将决定着的系统开发成功与否,一份好分析设计将是成功开发主要因素。总之,经过这次的Android系统技术知识的学习和对音乐播放器的构思与设计,使我对Android系统有了一定的了解,让我对Android系统上的开发流程和开发模式有了深入的了解,同时也对整个软件产品的实现流程有了一个深入的了解,这对我以后从事软件开发有很大的帮助。
第三篇:电信-音乐播放器
音乐播放器设计文档
在 android平台上开发音乐播放器是一个全新的挑战。这次通过 android QQ music 项目实战,总结出一些方法和经验,希望能够对移动平台的设计尤其是多媒体这块提供一些有价值的参考和帮助。1.1 项目背景
当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Windows mobile,symbian,以及谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌Android系统就能做到。本文的音乐播放器就是基于谷歌Android手机平台的播放器。
Android:是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于Android平台的。
随着计算机的广泛运用,手机市场的迅速发展,各种音频视频资源也在网上广为流传,这些资源看似平常,但已经渐渐成为人们生活中必不可少的一部分了。于是各种手机播放器也紧跟着发展起来,但是很多播放器一味追求外观花哨,功能庞大,对用户的手机造成了很多资源浪费,比如CPU,内存等的占用率过高,在用户需要多任务操作时,受到了不小的影响,带来了许多不便,而对于大多数普通用户,许多功能用不上,形同虚设。针对以上各种弊端,选择了开发多语种的音频视频播放器,将各种性能优化,继承播放器的常用功能,满足一般用户(如听歌,看电影)的需求,除了能播放常见格式的语音视频文件,高级功能:还能播放RMVB格式的视频文件。此外,还能支持中文、英文等语言界面。要研究了各种市场上流行的手机播放器,了解它们各自的插件及编码方式,还有各种播放器播放的特别格式文件,分析各种编码的优缺点以及各种播放器本身存在的缺陷和特点,编写出功能实用,使用方便快捷的播放器。目前已经实现的功能有能播放常见音频文件的功能,如MP3,WAV,等,拥有播放菜单,能选择播放清单,具备一般播放器的功能,如快进,快退,音量调节等。播放模式也比较完善,有单曲,顺序,循环,随机播放等模式。
一、引入产品定义描述(Application
Definition Statement)
相信大多数设计师都有过这样的经历:在产品设计过程中,设计师和产品经理不断 pk,各抒己见,甚至闹得脸红
耳赤、拍桌翻脸,最后项目总结时又因达不到“理想目标“双方深深自责,纷纷表示”缺少交流“。彼此不断 pk,交流
绝对足够,只是我们缺少有效沟通的工具。如果能在早期建立共识,口水仗爆发的频率就会越少,真正花在产品上 的时间也就越多。这一次,我们决定更早地切入,在最开始的产品规划层面,引入“产品定义描述”(关于
ap-plicationdefinition statement,请参考《iPhone Human Interface Guidelines》)。
注意:
ADS 的定义也是一个迭代的过程,外部环境的变化、后续过程产生的问题,都可能对原 ADS 产生影响,需
要重新评估、修正,甚至否定再来,但无论如何,必须确保整个团队对 ADS 有一个共同的认识。
二、细分场景,从场景推导需求,从需求推导设计
从源头的战略层面上建立了统一的认知,我们接下来开展的工作就有根据了。既然核心是解决“移动场景听歌“的问
题,我们必须首先弄清楚什么是”移动场景“?移动环境和 PC 环境差异甚大,碎片时间的使用更为突出。用户一天
是怎么活动的呢?每次拿起手机听音乐都是什么时间?上班的公车上、走路、晚上睡觉前?在这些点上用户都会做
些什么?简单的脑暴可以罗列各个可能的使用场景,但还比较粗糙。场景的构想需要建立在高度的认知上,这时候
用研的切入显得相当关键,用户特征、喜好、使用习惯…对用户越了解,场景就越能贴近真实、越能发现更多的细
节。这些都为后续的设计决策提供了有力的依据
客观构建的场景有很多有意思的发现,比如用户在播放本地歌曲时,挑选第一首歌往往比较犹豫,但对后续播放的
歌曲却不太在意。从场景仔细分析和推敲,很容易就可以明确产品的需求,对应上述的发现,推导如下需求:为用
户提供“马上听歌”按钮引导用户直接听歌。需求的推导因为有用研的切入,避免了太多的个人情感因素。
三、敏捷原型设计,适应与借鉴并行
用研的输出以及前面的 ADS 定义为功能筛选和设计取舍提供了强有力的决策依据。在需求框架大致决定的时候,我们接下来就进行方案设计了。正所谓“一图胜千言”,原型有时候会比面面俱到的文档更直观。不同的阶段,我们
会进行不同精度的原型设计:
在原型迭代的过程中,需要注意 android平台的 UI 尴尬。与其他平台(iPhone、symbian、windows mobile)不同,an-droid 更加开放,不同的厂商不同的 ROM 版本界面规范并不统一。如果简单地将其他平台的设计规范移植过来,产品体验可能会和整个系统“格格不入”。借鉴了 android平台的一些优秀 app(比如 twitter 和 new york times)的
设计策略,我们决定“适应与借鉴并行“:在大的基础体验上,保证与系统体验一致,尊重平台使用习惯;在细节体
验上,尽量克服系统的操作困难,保证局部体验的流畅。
四、视觉方案
在整个设计过程中,我们尝试了多套风格方案,比如“梦幻光影”、“清爽夏日”、“木质桌面”“蓝色海洋”等等,由于
beta1 开发时间有限,最后选择了偏深绿色主色调的“梦幻光影”作为默认皮肤,这里奉上其他未曾谋面的方案,供 参考。
4.1 主要界面模块划分
视觉方案的第一步是对界面各模块和控件进行作出符合审美原理和需要的的合理划分和尺寸设定,这里重点会落在
正在播放界面和歌曲列表界面两块,虽然两个界面功能和承载的信息都不相同,但是在造作上两个界面跳转和切换
是紧密关联的,在各模块划分和空间比例上两个需要统筹安排,一方面考虑上下同样尺寸的“标题行”和底部“控制行
/ tab 行”一方面要考虑歌曲列表界面的列表选择合适的行高和行数。在保证每一行歌曲信息能够有足够的空间显示
整个界
从上图区域划分和比例可以看出,播放器界面,封面/歌手图片的中心点在整个界面的高度是 296,相对于面的高 480,这一比例基本是处在 0.618:1 的黄金分隔点上。4.2 正在播放界面
用户使用音乐播放器,最大的关注点一般会落在正在播放/播放器界面上,这块在视觉上是整个产品的核心区域,在很大程度上代表了整款软件的品质、品位和风格信息表达。而专辑封面/歌手头像又是正在播放界面的视觉中心,因此这块在设计上花了比较重的笔墨,用细腻的光照效果与晶莹剔透的质感精心营造了一种符合我们 QQ 音乐在手
机移动操作平台上的气质的效果。
4.3 系统菜单 icon
菜单选项 icon 是另外一个视觉信息传达比较重要的地方,对整体风格的形成起着重要作用,这里做了两种效果的
尝试,一种 A 方案:是空心边框形式,看起来弹出菜单很轻盈,一屏 6 个选项带文字不会觉得拥挤,缺点是单个
图标的轮廓有的地方不连贯,有可能会造成辨识度降低。另外最后选用的方案 B 是实心剪影的形式,这种表现方式
整个 icon 看起来很整体,比较饱满,识别度较高,不过如果一屏图标过多的话可能会稍有拥挤的感觉,但如果以
缩小的方式处理,对于手指触摸操作来说是不合理的,这里 icon 作了圆角处理和镂空实心均衡化处理,能在视觉
感受上弱化一下可能会产生的拥挤感。
4.4 出现“水波纹”的问题
色彩显示效果上 Android 系统的手机由于硬件和技术上的限制和问题,会在某些情况下产生令人抓狂的水波纹问题,在尝试的过程中大致总结了容易造成水波纹的渐变使用,如上图左边两个图块:如果使用规则的径向渐变,程序贴
图后极容易出现水波纹,另一种情况是如右边的两图块:渐变色差值过小,就是说渐变特别的细腻不显著的话也很
容易在切图程序贴图后出现明显的水波纹。所以后面在配色和设计过程中可以据此避免尽量这样的情况出现。
4.5 最终选用方案:
五、后记
(1)通过对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识。开发Android音乐播放器,要抓住开发的核心部分,音乐播放器大体由播放主界面、播放列表、菜单、播放设置、文件浏览、歌曲搜索六大核心组成,只要掌握了这六部分的开发,音乐播放器就能初具规模。而其它的功能都是在这六个功能的基础上去补充添加的,但是这是功能的确是必不可少的功能,否则就不能算是音乐播放器了。
(2)音乐播放器系统实现了播放器的基本功能:播放,暂停、停止、上/下一首、音量调节、歌词显示、播放模式、歌曲搜索、文件浏览器、播放列表查询等功能。运用的系统平台是现今最热门的Android系统,是一个开源的基于Linux系统的手机平台。是以Java语言编写+SQLite数据库支持+SharePreference配置文件的组合方式进行数据管理。实现了音乐播放器的系统编程。
(3)本次程序设计,对播放器的系统结构框架做了精心的构思与设计,采用主要开发工具是Eclipse3.5+Java语言的支持,Android Development Tool的插件,和Android SDK2.1版本的全面结合,才使整个音乐播放器系统得以实现。
(4)总之,经过几个月的Android系统技术知识的学习和对音乐播放器的构思与设计,使我对Android系统有了一定的了解,让我对Android系统上的开发流程和开发模式有了深入的了解,这对我以后的Android项目开发有很大的帮助。参 考 书 籍
《Java API文档》
《Android 系统原理及开发要点详解》 作者:韩超,梁泉 著 《Android SDK开发范例大全》
作者:郭宏志 著 《Android Google API开发文档》 作者:Google官方 《Android Application Development》 出版社: O’Reilly 《Java编程思想think of java》 作者:Bruce Eckel 《手机软件研发培训教材》
出版社:极地星空3G通信学院 参 考 文 献
[1] 张孝祥著. java就业培训教程[M].北京:清华大学出版社,2007.[2] 余志龙编著.Google Android SDK开发范例大全[M].北京:人民邮电出版社,2009-7-1.[3] E2ECloud工作室著.深入浅出Google Android[M].北京:人民邮电出版社,2009-08-1.[4] 靳岩 姚尚朗著.Google Android开发入门与实战[M].北京:清华大学出版社,2009-07-01.[5] 高昂著.支持动态语言的Android平台[M].北京:人民邮电出版社,2009-05-07.[6] eoe.Android开发社区.http://. 2010-04-10.[9] 高焕堂编.Android 应用框架原理与程式设计(第三版)[M].北京:清华大学出版社,2008-10-03 [10] 杨丰盛主编.Android 应用开发揭秘[M].西安:机械工业出版社,2010-01-25 [11] XML解析方式DOM、SAX之比较.http://wghjay.javaeye.com/blog/519955.2009-11-18.名词术语:
JDK
Java Development Kit
Android 基于Linux操作系统的手机平台 SDK
Android Software Development Kit ADT Android Development Tool Anroid开发工具
IDE Intergrate Design Environment
集成开发环境 ADB
Android Debug Bridge 调试桥
AVD
Android Virtual Devices
Android虚拟设备
DDMS Dalvik Debug Monitor Service 调试监视服务 AIDL Android Interface Description Language Android接口描述语言 xmlns XML NamePace XML命名空间
第四篇:各种音乐播放器的比较
音乐播放器的评测
现在播放器实在是多了点,有的新手觉得眼花缭乱,不知道选什么,今天就来个点评,给大家些参考。
一、普通播放器
1:Windows Media Player(系统自带版本)
这个是非常常用的播放器,一般网吧、课室都用这个
优点:系统自带,无需安装。新版本是某些随身听播放器传输视频或者音频必须的软件。新版本在声音上有一定改善。
缺点:声音不好听!含糊不清。对各种格式支持非常不好!ape和flac这类牛B哄哄的格式别指望能播放的了。打开速度慢,系统资源占用多,缺点太多,就不一一赘述了。
音质指数:C实用指数:C
2:搜狗音乐盒、酷我音乐盒、QQ音乐、青苹果音乐播放器、酷狗音乐
这些都是网络播放器,主要功能是让大家能在播放器内直接选择最新最流行的音乐试听
优点:内置音乐排行榜,点选热门歌曲直接播放。
缺点:声音质量差,不支持无损格式,转换,修改文件信息等功能缺乏,只适合做试听之用。
音质指数:D实用指数:D
3:千千静听
非常大众化的一个播放软件
优点:使用方便,修改和编辑文件信息效率高,对各种格式的支持和转换都很好,界面也丰富多彩。官方版本自带歌词速配,非常适合想偷懒又想看歌词的人。声音还算过得去。软件还算小巧,占用小。
缺点:千千的声音对追求音质的人来说太过马虎,特别突出的问题是对DTS文件的播放,出来的效果可以用非常差来形容。默认的配置使用了均衡器(两边高中间低),可以说是扭曲了声音。
音质指数:B+实用指数:A
4:暴风Winamp
曾经风靡一时的播放器
优点:界面华丽(默认皮肤来算,如果会弄的话,很多播放器的皮肤都可以很炫),播放mp3声音还不错。功能随着版本更新越来越多。
缺点:新版本不支持ape,flac的播放,需要找插件(麻烦)。随着版本不断更新,软件越来越臃肿,无用功能太多。
音质指数:B+实用指数:B
5:jetaudio
能歌善舞的播放器
优点:这个是iAUDIO开发出来的播放器,可以播放视频,有录音功能,是个功能比较多的播放器,并且界面华丽。声音方面,和iAUDIO随身听采用同一风格的调音,中频稍微凹一下去一点。但是整体声音还是很不错的。
缺点:支持ape,但是不支持CUE(囧rz)。界面为英文,软件比较臃肿。
音质指数:A实用指数:B-
6:airplay
小巧玲珑的播放器
优点:绿色,小巧(只有200多K),打开速度快,有专辑封面自动下载功能!
缺点:播放质量差,播放无损音乐时爆音很多,一般只是用来下载专辑封面用!封面也不是每张都能找到,外国的很多都找不到。(本软件为国产软件)
音质指数:E-实用指数:E
7:foobar2000
强大且实用的播放器
优点:基本上支持所有的音频格式。适合追求音质的人使用。功能强大,可以轻松进行各种格式转换,并且支持转换格式时添加DSP。支持asio输出,声音干净。有的版本自带歌词速配。由于foobar插件无数,潜力巨大,重采样到192K,再开asio输出,声音会有明显提升!(适合高手)
缺点:对新手来说默认界面太过简陋,参数设置项看着就头疼。
音质指数:A实用指数:A+
8:beoplayer
这是个高贵的播放器
优点:乃是丹麦著名音响品牌B&O出品的播放器。界面风格非常适合高级白领。这个播放器的调音很有意思,模仿高级音响晶莹剔透的感觉,播放mp3时让人眼前一亮。
缺点:使用不方便,不支持ape和flac,无损里面只支持WAV。英文界面(当然也有汉化版),功能不多。可以换的皮肤也不多。
音质指数:A实用指数:B-
9:iTunes
平淡而不平凡的播放器
优点:这个是苹果公司开发的播放器,专门给使用ipod和iphone的人士使用。(当然普通人也可以用)使用惯了的话还算方便。平滑的声音,虽然缺少了激情,但是给人一种歌声娓娓道来的感觉(调音和苹果随身听的风格一致),属于mp3播放器中的精品之作。还可以花钱买到正版音乐,有钱人必备。
缺点:不能播放ape,flac等无损格式音频。初次使用比较麻烦。弹出窗口太多,占用应该也比较厉害,软件也很臃肿。
音质指数:A实用指数:B-
10:J River Media Center
优点:
①、声场比foobar大一圈,声音收的快,foobar相比之下有点乱,低音很结实,很强大。同样可以使用asio输出
②、好看!
③、资源占用少!看起来很夸张的界面,只占用20M的内存,CPU基本是0 ④、功能多多,跟iTunes很像,是个音乐管理软件,第一次使用需要导入媒体库,需要花一点时间(我用了10分钟)可以用来刻录音乐,也可以用来播放视频。
缺点:如果音乐较多,第一次导入时间可能会很长,最好分开来导入;操作没有foobar这么简单明了,需要一段时间习惯。不能显示歌词!
格式的支持不算很多,但是ape,FLAC,WV,wav这些基本的无损都支持,大部分的有损压缩也支持。
想要像我的一样好看的话,需要下载很多的CD封面,花点时间还是值得的!
音质指数:A+实用指数:A+
二、专业播放器
11:Cplay
这个是专业用户使用的播放器
优点:很高质量的声音,给人的感觉很大气,有人比较说:重采样开到192K的foobar才能和他一比高下。
缺点:必须要有支持asio输出的声卡才能使用该软件,支持格式有限,界面为英文,而且非常简陋,操作复杂。只适合音质狂热爱好者。
音质指数:A++实用指数:C
12:SawStudio
播放器里的神器
优点:层次分明,清晰自然地声音,胜过foobar可以说是没有什么悬念。(但个人还是认为foobar的调音听着舒服)
这个是用汇编语言写的播放器,好处自然是受到windows影响极小。
缺点:界面复杂(灰常复杂),只能播放WAV,操作麻烦,不能批量选择歌曲播放(囧rz)
没有播放列表等基本播放器的功能。因为这个本来就是专业的混音软件,不是用
来当播放器用的。
音质指数:A++实用指数:D
最后,顺便说说各个播放器为啥声音有区别。
一个原因,是解码精度的问题。
例如:
SawStudio是 64Bit定点+64bit浮点内部处理精度
foobar2000是64Bit浮点内部处理精度(其他播放器基本都低于这个精度)
解码精度越高,出来声音质量也会越高。
另一个原因,是调音的问题。
比如说前面提到的beoplayer,能用调音模仿出晶莹剔透的感觉,这个可不简单,所以出来的效果会比普通的播放器好。当然,每个人都有自己喜欢的风格,并没有规定哪个调音是最好的。
第五篇:音乐播放器课设报告要点
音乐播放器
音乐播放器 问题定义和可行性研究................................................................2
(1)问题定义.......................................................................................................................2(2)可行性研究.....................................................................................................................3 需求分析........................................................................................3 功能需求...............................................................................................................................3
1.1 功能描述....................................................................................................................3 2 性能需求...............................................................................................................................4 3 将来可能提出的要求...........................................................................................................4 4项目描述................................................................................................................................5
4.1编写目的.....................................................................................................................5 4.2项目背景.....................................................................................................................5 4.3开发工具及环境简介.................................................................................................6 3 概要设计和详细设计....................................................................6
3.1概要设计.............................................................................................................................6 3.2 详细设计............................................................................................................................7 3.3音乐编码设计.....................................................................................................................7
5主界面界面介绍.............................................................................8 6 系统的实现..................................................................................11
一、主要的对话框.................................................................................................................11
二、全局变量.........................................................................................................................12
三、初始化函数.....................................................................................................................12
三、播放、暂停功能.............................................................................................................15
四、添加文件到播放列表.....................................................................................................18
五、下一首上一首................................................................................................................20
六、停止播放.........................................................................................................................21
七、播放模式.........................................................................................................................21
八、显示时间和播放进度.....................................................................................................22
九、删除歌曲.........................................................................................................................23 5.2 单元测试..........................................................................................................................25 6.总结...............................................................................................26 问题定义和可行性研究
本章分为两部分,问题定义和可行性研究。问题定义阶段主要研究我们所学的知识能做什么项目,而可行性研究给出了制作音乐播放器的可行性。
(1)问题定义
通过开发音乐播放器,来练习本学期软件工程课程所学知识。熟悉软件开发的各个阶段,将书本上的知识与实践性的开发活动联系起来。实现音乐播放器基本的功能。(2)可行性研究
大一的时候已经学过了基本的C++编程的知识,在这个基础上,有三个星期的时间来学习MFC编程,学习文件的读写操作,以及系统API函数调用等知识。边学边用,具备开发软件的能力。需求分析
本章给出了音乐播放器应该具备的功能,并给出了功能示意图,最后提出了实现该播放器应该具备的条件。功能需求 1.1 功能描述
本播放器主要有如下功能:1.对文件进行操作。2.对按钮的处理
1.对文件的操作
通过文件的读写知识,实现浏览目录以选择文件,添加歌曲到播放列表,删除播放列表中的歌曲,对已经选中的文件进行播放、暂停,以及通过双击播放列表中的歌曲来播放文件。
2.对控件的处理
对各种按钮添加了事件响应函数,可以处理基本的播放,暂停,上一首/下一首,删除,选择播放模式等操作。功能如下图: 性能需求
本项目是一个普通的音乐播放器,运行环境为VS2010,项目运行速率正常,可以满足用户需求。1.时间性能要求:越低越好。
2.便捷性:运用了可视化编程,更有助于人机交互,更人性化。程序的运行,符合正常的操作习惯,程序功能明了简洁!将来可能提出的要求
(1)歌曲列表的保存(2)菜单操作(3)更换背景图片
(4)提供网络下载功能:支持通过歌名和歌手名进行歌曲检索和下载功能;(5)支持歌词显示和同步播放;(6)支持歌曲在线播放;
(7)支持更友好的歌曲检索和下载功能;(8)提供更良好的操作界面。
4项目描述 4.1编写目的
设计一个基于windows平台的音乐点播系统,实现音乐库的管理以及播放功能。
音乐播放器能够满足音乐的播放功能,实现一款播放器的基本功能。
4.2项目背景
本项目作为《软件课程设计》课程的训练项目提出,在基本的设计实现基础上,将不断对已有的设计进行进一步的修改和完善,最终完成整个软件开发过程。本次项目的旨在通过不同软件工程设计方法与技术的实践,了解和掌握各种技术、工具平台的特点与局限性,体会协同开发方式。
第1阶段:主要目的是通过对项目需求的分析和理解,通过面向对象的设计方式完成项目前期的准备工作。
第2阶段:我们会根据既定需求,完善设计模式。第3阶段:在设计文档和需求分析的文档下,完成音乐点播系统原型的开发,并完成整个开发流程的测试报告
第4阶段:通过音乐点播系统软件的设计开发,了解软件文档的编写原则,训练掌握软件各类文档写作的技巧,同时在文档的编写过程中提高和增加C++开发的能力和经验。
4.3开发工具及环境简介
操作系统:windows xp或以上版本
C++ 6.0: Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。
Microsoft Office Word 2003:经典办公软件,本项目中用于编写文档。概要设计和详细设计
3.1概要设计
通过这个阶段的工作将划分出组成系统的物理元素——程序,文件和文档等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。总体设计的另一项重要任务是设计软件的结构,也就是要确定该软件由哪些模块组成的,以及这些模块之间的关系。
运用传统软件工程方法学的知识将音乐播放器软件的开发分成:
一、MFC的使用以及实现方法
二、文件的读写操作
三、系统API函数的调用
3.2 详细设计
根据概要设计所划分的四个模块,该阶段应详细地完成这四个模块的任务:
一、MFC的实现
通过MFC窗口以及函数的使用,创建出播放器的主界面,主界面应包括文件的打开、添加、播放以及线程按键。另外,还要各种函数应该实现相应组件上的各种事件。
二、文件读写操作的实现
通过以前的学过的文件读写操作知识,实现对音乐文件的读以及写操作。
三、系统API函数的调用
通过调用系统媒体控制接口函数实现对mp3,wav,wma等格式的音乐的播放的功能。
3.3音乐编码设计
一、编码原理
1.音乐的十二平均率规定(1)每两个八度音之间的频率相差一倍。
(2)两个八度音之间又可以分为十二个伴音,每两个伴音的频率比为1.059463。
(3)低音6(音名A)的频率是440Hz,音名B到C之间、E到F之间为伴音,其余为全音。2.乐谱编码
选取65536Hz为基准频率,以此频率分频得到简谱高音各音调的分频比。计算公式为N=65536/f。
二、编码参照
为了让ROM能够识别各音频的分频系数,需将个音频分频系数按照一定格式转换成十六进制格式。我们采用8位的ROM,D6D5位表示高中低音,如表1-2所示,11为高音,10为中音,01为低音;用D4D3D2D1D0位表示分频系数,将表1-1的分频系数转换成二进制格式表示;ROM的高位全部补0。然后转换成十六进制如表1-2所示。之所以采用高音分频比的二分之一为基准分频系数,是因为ROM的位宽限制,而每两个八度音频率相差一倍,所以我们后面用译码器译成各音频的分频系数输出给分频器,这样由分频器输出到扬声器,扬声器就可发声了。
5主界面界面介绍
1、界面图:
2添加歌曲按钮
3、删除歌曲按钮
4、音量的变大变小按钮
5、歌曲时间和进度的显示图像
6、下一首歌按钮
7、上一首歌按钮
8、停止播放按钮
9、播放按钮
10、单曲播放/随机播放/顺序播放按钮
11、空白部分为歌曲的菜单列表 6 系统的实现
一、主要的对话框
class CMCIPlayerDlg : public CDialogEx { // 构造 public: CMCIPlayerDlg(CWnd* pParent = NULL);// 标准构造函数 // 对话框数据
enum { IDD = IDD_MCIPLAYER_DIALOG };
protected: virtual void DoDataExchange(CDataExchange* pDX);//
DDX/DDV 支持
// 实现 protected: HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public: // 列表
CListBox m_list;afx_msg void OnBnClickedOnstart();afx_msg void OnBnClickedOnloadmusic();void load(music a);int isplay;int index;CSliderCtrl volume;afx_msg void OnNMCustomdrawVolun(NMHDR *pNMHDR, LRESULT
*pResult);afx_msg void OnBnClickedOnnext();afx_msg void OnBnClickedOnper();afx_msg void OnBnClickedOnstop();LRESULT OnMciNotify(WPARAM wParam, LPARAM lParam);//设置播放
模式
afx_msg void OnBnClickedOrder();afx_msg void OnLbnDblClk();void OnTimer(UINT nIDEvent);// 进度条
CSliderCtrl m_progress;afx_msg DWORD getinfo(DWORD item);afx_msg void OnBnClickedDeletemusic();};
二、全局变量
struct music { string name;string mPath;};int m_max;//进度条的最大位置变量
int hour,minute,second;//时间变量:小时、分钟、秒钟 DWORD cdlen;//某个音频文件的总时间长度 DWORD m_count;//设备型号
DWORD cdfrom,cdto;//歌曲的起点和终点 DWORD DeviceID;
list
vector
三、初始化函数
BOOL CMCIPlayerDlg::OnInitDialog(){ CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
//volume.SetBkColor(RGB(37,38,37));
HBITMAP
hBitmap;
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4));
((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap);
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
((CButton *)GetDlgItem(IDC_ONPER))->SetBitmap(hBitmap);
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP2));
((CButton *)GetDlgItem(IDC_ONNEXT))->SetBitmap(hBitmap);
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP5));
((CButton *)GetDlgItem(IDC_ONSTOP))->SetBitmap(hBitmap);
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP7));
((CButton *)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap);
SetBackgroundImage(IDB_BITMAP6,BACKGR_TILE,NULL);
isplay=0;
//未播放状态
index=-1;
m_list.SetCurSel(0);//设置初始选择位置
volume.SetRange(0,1000);//滑块的移动范围0~1000
volume.SetPos(500);//滑块指针的初始位置设为500代表初始音
量为50
ifstream rin;
//导入原先数据
rin.open(“Mylist.txt”);
//int rere;
string str[2];
if(rin>>setw(50)>>str[0]>>setw(150)>>str[1])
while(!rin.eof())
{
music mu;
mu.name=str[0];
mu.mPath=str[1];
CString name;
for(int i=0;i { if(mu.name[i]=='/') mu.name[i]=' '; } name=mu.name.c_str(); CString mPath; for(int i=0;i { if(mu.mPath[i]=='/') mu.mPath[i]=' '; } mPath=mu.mPath.c_str(); int j=m_list.GetCount();// 把名字和地址插 入到list控件 m_list.InsertString(j,name); //CString *p=&mPath; allpath.push_back(mPath); rin>>str[0]>>str[1]; } rin.close(); // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0)== IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);if(pSysMenu!= NULL){ BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将 自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE);// 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE;// 除非将焦点设置到控件,否则返回 TRUE } 三、播放、暂停功能 void CMCIPlayerDlg::OnBnClickedOnstart()//开始播放 { // TODO: 在此添加控件通知处理程序代码 if(isplay==0){ // TODO: 在此添加控件通知处理程序代码 if(m_list.GetCurSel()==-1)//判断有没有歌曲被选中,若 没有,则从第一首开始播放-1代表没有被选中 m_list.SetCurSel(0); if(m_list.GetCurSel()==index){ SetTimer(0,1000,NULL); mciSendCommand(DeviceID,MCI_RESUME,0,0); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3)); ((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,“暂停”); isplay=1;} else { index = m_list.GetCurSel();CString data;//m_list.GetDlgItemTextA(index,data);//CString c=dat MCI_OPEN_PARMS mciopenparms;//打开 MCI_PLAY_PARMS mciplayparms;//播放 second=0;minute=0;hour=0;mciopenparms.lpstrElementName=allpath[index];//将音乐文件路 径传给设备 DWORD dwReturn;if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT| MCI_WAIT,(DWORD)(LPVOID)&mciopenparms)){ //如果打开文件失败,则将出错信息储存在buffer,并显示 出错警告 char buffer[256]; mciGetErrorString(dwReturn,buffer,256); MessageBox(buffer,“出错警告!”,MB_ICONHAND| MB_ICONERROR|MB_ICONSTOP); } DeviceID=mciopenparms.wDeviceID; mciopenparms.lpstrDeviceType=NULL;//文件类型 m_count=mciopenparms.wDeviceID;//多媒体设备类型编号 mciplayparms.dwFrom=0;//每次播放都是从0开始播放 HWND hwnd = GetSafeHwnd(); mciplayparms.dwCallback =(DWORD)hwnd;cdlen=getinfo(MCI_STATUS_LENGTH); CString stime;CClientDC dc(this);dc.SetBkColor(RGB(255,255,255));//设置放置计数器区域的外观 dc.SetTextColor(RGB(95,180,66));stime.Format(“%02d:%02d:%02d”,cdlen/3600000,(cdlen %3600000)/60000,((cdlen%3600000)%60000)/1000);//显示时间进度 dc.TextOut(328,13,stime); mciSendCommand(DeviceID,MCI_PLAY,/*MCI_FROM|*/MCI_NOTIFY,(DWORD)(LPVOID)&mciplayparms); SetTimer(0,1000,NULL);//设置系统计数器,显示歌曲播放的进度 HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3)); ((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,“暂停”);isplay=1;} } else { KillTimer(0); mciSendCommand(DeviceID,MCI_PAUSE,0,0); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)); ((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,“播放”); isplay=0;} } 四、添加文件到播放列表 void CMCIPlayerDlg::OnBnClickedOnloadmusic()//导入歌曲 { // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE, _T(“*.*”), NULL,OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,_T(“mp3文件(*.mp3)|*.mp3|” “wma文件(*.wma)|*.wma|” “wav文件(*.wav)|*.wav|” “所有文件(*.*)|*.*|”), NULL); // 选项图片的约定 dlg.m_ofn.lpstrTitle = _T(“打开音乐文件”); // 打开文件对话框 的标题名 if(dlg.DoModal()!= IDOK) // 判断是否获得图 片 return; CString mPath = dlg.GetPathName();// 获取音乐路径 CString mmpath=mPath; allpath.push_back(mPath); int i = mPath.ReverseFind('');//从磁盘地址中获取歌曲名字 CString name; name = mPath.Right(mPath.GetLength()-1-mPath.ReverseFind('')); int j=m_list.GetCount();// 把名字和地址插入到list控件 m_list.InsertString(j,name);//m_shelllist.SetItemText(j,0,name);music mu;mu.name=name.GetBuffer();mu.mPath=mPath.GetBuffer();load(mu);} void CMCIPlayerDlg::load(music a){ list ifstream rin; rin.open(“Mylist.txt”); //int rere; string str[2]; if(rin>>str[0]>>str[1]) while(!rin.eof()) { music mu; mu.name=str[0]; mu.mPath=str[1]; if(mu.name!=a.name) mus.push_back(mu); else { MessageBox(“已经有该歌曲”); return; } rin>>str[0]>>str[1]; } rin.close(); for(int i=0;i //把名 字里面的空格变为'_' { if(a.name[i]==' ') a.name[i]='/'; } for(int i=0;i //把地 址里面的空格变为'*' { if(a.mPath[i]==' ') a.mPath[i]='/'; } mus.push_back(a); ofstream out(“Mylist.txt”);list out< (*it).mPath < it++;} out.close();} 五、下一首上一首 void CMCIPlayerDlg::OnBnClickedOnnext()//下一首 { // TODO: 在此添加控件通知处理程序代码 KillTimer(0); second=0;minute=0;hour=0;mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加载文件前先清空 上一次播放的设备 isplay=0;index = m_list.GetCurSel();if(index+1==m_list.GetCount()){ m_list.SetCurSel(0);} else { m_list.SetCurSel(index+1);} OnBnClickedOnstart(); isplay=1;} void CMCIPlayerDlg::OnBnClickedOnper()//上一首 { // TODO: 在此添加控件通知处理程序代码 KillTimer(0); second=0;minute=0;hour=0;mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加载文件前先清空 上一次播放的设备 isplay=0; } index = m_list.GetCurSel();if(index==0){ m_list.SetCurSel(m_list.GetCount()-1);} else { m_list.SetCurSel(index-1);} OnBnClickedOnstart();isplay=1; 六、停止播放 void CMCIPlayerDlg::OnBnClickedOnstop()//停止 { // TODO: 在此添加控件通知处理程序代码 KillTimer(0); second=0;minute=0;hour=0;mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加载文件前先清空 上一次播放的设备 isplay=0;SetDlgItemText(IDC_ONSTART,“播放”);HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)); ((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); index=-1;UpdateData(false);} 七、播放模式 void CMCIPlayerDlg::OnBnClickedOrder()//设置播放模式 { // TODO: 在此添加控件通知处理程序代码 CString pattern;GetDlgItemText(IDC_ORDER,pattern);if(pattern==“顺序”){ SetDlgItemText(IDC_ORDER,“随机”); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP8)); ((CButton *)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); } if(pattern==“随机”){ SetDlgItemText(IDC_ORDER,“单曲”); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP9)); ((CButton *)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); } if(pattern==“单曲”){ SetDlgItemText(IDC_ORDER,“顺序”); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP7)); ((CButton *)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); } } 八、显示时间和播放进度 void CMCIPlayerDlg::OnTimer(UINT nIDEvent){ CString stime;second++;CClientDC dc(this);dc.SetBkColor(RGB(255,255,255));//设置放置计数器区域的外观 dc.SetTextColor(RGB(95,180,66)); if(second==60)//设置钟表的显示 {minute++;second=0;} if(minute==60){hour++;minute=0;} if(hour==24){hour=0;} stime.Format(“%02d:%02d:%02d”,hour,minute,second);//显示时间 进度 dc.TextOut(68,13,stime);m_progress.SetRange(0,cdlen);//使进度条的范围与歌曲时间一致 UpdateData(false);m_max=cdfrom;//保存歌曲的当前位置信息 if(m_max!=cdlen)//如果歌曲结束,则进度条重新置0 {m_progress.SetPos(cdfrom);} else {m_progress.SetPos(0);m_max=0;OnBnClickedOnstop();} DWORD cdf=getinfo(MCI_STATUS_POSITION); cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRAME(cdf));//获取当前播放文件的信息 UpdateData(false);CDialog::OnTimer(nIDEvent); 九、删除歌曲 void CMCIPlayerDlg::OnBnClickedDeletemusic()//删除歌曲 { // TODO: 在此添加控件通知处理程序代码 if(m_list.GetCurSel()==-1) MessageBox(“请选中要删除的歌曲”);else { CString na; int i=m_list.GetCurSel(); na=allpath[i]; allpath.erase(allpath.begin()+i); m_list.DeleteString(i); UpdateData(false); string pa=na.GetBuffer(); for(int i=0;i //把地址里面的空格 变为'*' { if(pa[i]==' ') pa[i]='/'; } list ifstream rin; rin.open(“Mylist.txt”); //int rere; string str[2]; if(rin>>str[0]>>str[1]) while(!rin.eof()) { music mu; mu.name=str[0]; mu.mPath=str[1]; if(mu.mPath!=pa) mus.push_back(mu); rin>>str[0]>>str[1]; } rin.close(); ofstream out(“Mylist.txt”);list out< (*it).mPath < it++;} out.close(); } } 5.2 单元测试 初始界面: 初始界面由一个七个按钮控件,一个列表控件,一个进度条控件组成。 当点击添加歌曲按钮时,弹出文件对话框 弹出的文件对话框 6.总结 自制音乐播放器是运行于VS2010的一款MFC应用程序,该软件通过运用平时所学的知识,把文件的创建、读写操作,MFC控件的使用,系统的MCI函数的知识系统地联系在了一起。 播放器通过文件的读写知识,实现了对音乐文件的添加、删除等操作;通过系统MCI函数,支持MP3,WAV,WMA等格式的音乐文件的播放,而在主界面程序中只是调用这些功能函数,有助于对软件进行更新操作;另外,该软件运用了MFC的知识,实现了按钮,列表框等控件的使用,通过使用事件处理机制,实现了各种按键上的动作事件。 因此,该播放器能够更好地练习本学期所学的各种知识,通过该播放器的开发,回顾了文件的各种操作,加深了对MFC的认识,尤其是对软件开发的各个过程有了较详细的了解。