第一篇:电信-音乐播放器
音乐播放器设计文档
在 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命名空间
第二篇:音乐播放器作文
音乐播放器作文
我有一台音乐播放器,我非常喜欢它,给它取名为小白。这是我的一位好朋友送给我的。小白穿着一身漂亮的“白衬衫”还配着一条黑色的漂亮“短裙子”,再配上优美的音乐,简直就是个小姑娘在翩翩起舞。小白是一个不太规则的长方体,其中,它长7厘米,宽4厘米,厚一厘米左右。小白身上有六个按钮,它们分别是:开关按钮、确定按钮、待机按钮、上翻按钮、播放按钮以及下翻按钮,在播放按钮正上方有一个小正方形,上面还有许多小洞洞,我想那应该是发音的吧!小白和一枚鸡蛋比起来,可轻多了,它可以带在身上,不像那些录音机这么大,这么重。
小白不但外形漂亮,而且我和它在生活中还是一对儿形影不离的好朋友呢!每当我孤独、寂寞的时候,小白总是陪伴我;每当我高兴时,我不仅和家人分享快乐,我还和小白一起分享快乐。小白也需要我,有的时候,小白没电了,它都会响起“嘟嘟”的警告声,似乎在说“小主人,我的肚子饿了,快给我吃饭。”有的时候,小白的“裙子”脏了,我都会去拿点儿纸巾,擦去“裙子”的脏痕,它变得非常漂亮,我真是越来越喜欢它了。
小白还有许多的功能呢!里面有一个音乐播放器,我偶尔会下载一些歌曲,仿佛给小白增添了几件新衣裳。考试之前,我总要听上一两首优美的歌曲,放松一下紧张的心情。小白里面还有电影播放,我无聊时,我都看一些有趣的电影,这样就可以解闷了。里面还有录音,我每天都会录音,长大后,我就可以细细的回味小时候的趣事了。小白里面还有一个电子书,有许多书籍我都可以在电子书里找呢!小白真是无所不能呀!我爱你,小白!
第三篇:简易音乐播放器小结
简易音乐播放器小结 06A13142 李长波
其实我们一开始是想做一个简易视频播放器的,但后来限于目前能力有限,不得不放弃原有计划,将设计改为简易音乐播放器。一开始的视频播放器确实遇到了好多困难,比如说那个视频播放只能全屏播放,我们小组弄了弄了好几天都没弄出来,而且我们还想插一个透明背景的,这个想法是来自于目前许多流行音乐播放器的背景都是透明的,所以我们就想应该把这个特点加到我们的视频播放器中,但这也没做出来,所以后来经过我们内部商量,就将这个计划搁置,而采用了新的计划项目。
从一开始学习c++,我就一直有疑问,黑乎乎的屏幕编程和我们现在所看到的软件到底有什么关系呢?说实话,通过这次编译软件的实战,我才明白了这其中的缘由与机理。Windows 操作系统采用了图形用户界面,借助于它提供的API函数,可以编写出具有漂亮图形用户界面的程序。Windows 本身是面向对象的,因此采用面向对象的程序设计更为自然。Visual C++的微软基础类(MFC)库封装了大部分API函数,并提供了一个应用程序框架,简化和标准化了Windows程序设计,因此MFC编程被称为标准Windows程序设计,也正是利用了MFC才使得程序员能够得心应手的开发基于Windows操作的程序。
回顾这次的编程实践,我的主要分工为几个按钮的设计实现,分别是上一首、开始、下一首、音量控制、播放模式控制、进度控制。
首先,我想先谈一下编程中所遇到的种种困难。第一个比较大的困难是在进行编程之前的应用程序框架向导中是采用哪种结构,在小组内有两种意见,一种是认为应该用对话框,另外一种是认为应该用单文档模板类。这个问题主要是限于当时每个人看的资料不一样,所以要实现功能的方法有所差异,也就是知识的局限性使得我们产生了分歧,在经过组内商议及网上查阅资料并仔细研究了当前比较流行的音乐播放器界面之后,我们一致决定采用单文档模板类。这个问题虽然现在看起来比较简单,但对当时的我们来讲还是比较苦难的。
其次,我想要谈一下在实现功能中所遇到的困难。因为一开始,我受到了关于对话框一类的知识的影响,就误以为只有通过在对话框上才可以加上各种按钮,写到这里,我想先说明关于在按钮上覆盖上各种图标的方法,一开始我错误地认为编译器中会有各种图标供程序员选择,图标的设计与覆盖要在程序编号之后在实现,就像Word中粘贴复制就可以了,可这是大错特错的。实际上,图标的一系列功能是通过位图实现的,方法是现在文件中加入你所需要的资源,即各种图片,也可以自己在编辑器中画图,注意加入的图片必须是bmp格式的,加入图片之后,此图片就会有一个ID,这时就利用已定义好的CBitmapButton类类对象调用其成员函数LoadBitmaps(),参数为ID,这时就可以实现在之前建立的CBitmapButton类类对象上加上一个位图。回到之前的话题,不仅仅只有对话框才可以出现按钮,单文档模板中也可以出现按钮,实际上就是像建立一个主窗口一样建立一个按钮对象,实际上这个按钮对象也属于一个窗口,具体方法如下,前提这几个按钮是在MyplayerView.h和MyplayerView.cpp中定义的,写完前提,现在是方法,MyplayerView这个文件中包含的是CMplayerView类,这个类又继承于CView类,在CView类中有int
CView::OnCreate(LPCREATESTRUCT lpCreateStruct)函数,在这个函数中定义一个CRect类类对象比如RR,紧接着初始化它可以利用它调用 成员函数SetRect(),参数为四个,分别是左上角x坐标、左上角y坐标、右下角x坐标和右下角y坐标。创建好按钮之后,利用CbitmapButton类对象创建一个你所想要的按钮对象,例如m_ButtonLast(上一个按钮),其他的按钮也是利用相同的方法建立的,这样便完成了建立按钮功能的第一步,按钮对象的建立。接下来就是建立与按钮相互响应的消息响应函数。
关于按钮消息响应函数的建立,这个是利用类向导,只要在类向导中按步骤编辑,就可以建立每个按钮所对应的消息响应函数的框架。但要注意,对于命令消息,MFC应用程序框架会通过消息映射机制,按一定的搜索顺序在各个CcmdTarget类(命令处理类)的派生类中查找对应消息处理函数。所有响应消息或事件的类都是由CcmdTarget类派生。在编写程序时应该让命令消息尽可能由与其关系密切的类来处理。尽管消息处理函数可以 安放在某一个类中,但如此一来会使可读性降低,同时执行时也可能发生问题。例如,把与文档有关的消息处理函数放在视图类(CView)中并非不可运行,但可能不会发挥你所希望的功能,而放在文档类(CDocument)中一切都会很顺利。所以,隐藏显示工具栏有框架窗口类处理,新建或打开文件由应用程序类处理,数据存取操作由文档类处理,关于这些按钮的消息处理函数应由视图类来处理。关于这部分遇到的困难主要是不知道这些功能该如何实现,解决的主要是通过上网查资料和图书馆借书。下面分别介绍这些功能实现的简要方法。首先介绍上一个按钮的消息响应函数void CMyPlayerView::OnLast(),该函数的内部第一步是获取当前位置的字符串的下标,然后调用int SetCurSel(m_list1.m_nowpos)获取当前选项,调用成功时返回选中项的下标,如果形参所得值大于列表中项的个数,则返回CB-ERR。如果形参为-1,则清除当前的选择并返回CB-ERR。然后就选中上一个就好了,之后再调用BOOL SetWindowText(),给按钮赋文字,还有图标HBITMAP LoadBitmaps(),最后更新窗口BOOL UpdateWindow((),完成了。下一个按钮与之类似,开始按钮也很像,只是要注意要现获取按钮上的文字,注意开始和暂停的变换,用到的函数只是多了一个int GetWindowText()。播放模式的设计与开始按钮的设计就一样了,也是注意文字的变换。音量控制就是上网搜了一个函数按照网上的些就可以了,调用void OnHScroll(),内部填一些函数就好了。最后一个进度条功能,是建立一个新类class MyProgress :它派生于CprogressCtrl,积累中就有很多成员函数可以很方便的实现进度控制。
通过这次编程,我不仅锻炼了编程能力,而且深深地意识到团队合作的重要性,一个优秀程序的完成,需要每个人的努力。我十分感谢我的队友们,再编程期间,有很多次遇到困难,是他们给了我勇气与毅力让我坚持了下来,完成任务。感谢队友的支持,感谢老师的谆谆教诲,感谢在编程期间对我寄予帮助与支持的每一个人。
第四篇:音乐播放器项目报告
华东交通大学课程项目
学 院:软件学院 ______ 课程名称: 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系统上的开发流程和开发模式有了深入的了解,同时也对整个软件产品的实现流程有了一个深入的了解,这对我以后从事软件开发有很大的帮助。
第五篇:MFC音乐播放器(实验报告)
音乐播放器大型实验报告
一、实验目的
通过动手制作基于VC++的音乐播放器,了解播放器的原理。并通过自己动手,在windows播放器组件的基础上,用自己的算法,去实现自己的界面和自己的播放模式。
二、总体设计
(1)在visual c++环境下设计出一个音乐播放器的界面:具有打开音乐文件、播放歌曲,、暂停或恢复、停止、调节音量大小的功能;
音乐播放器
打开文件播放歌曲暂停播放停止播放音量控制(2)修改各个控件的属性,并为其添加消息函数;(3)用媒体控制接口MCI编程为各个消息函数添加代码;(4)对该音乐播放器编译--运行。
三、实验步骤
(一):创建MFC应用程序框架:
打开visual c++软件,选择“文件”—“新建”新建一个应用程序文档MFC AppWizard[exe],将工程命名为MFC音乐播放器,选择合适的保存位置,然后“确定”选择基本对话框,完成设置。
(二)编辑对话框:
在工作区内,设计出一个音乐播放器的界面,添加按钮控件:浏览、播放、暂停、停止,添加一个滑动条控件,一个静态文本,两个编辑框。
然后,依次修改各控件的属性:
1)右击静态文本,选择属性,将标题改为音乐名称:
2)右击编辑框,选择属性,将ID改为IDC_filename 3)右击Button1,选择属性,将ID改为IDC_filechoice,将标题改为浏览
3)右击Button2,选择属性,将ID改为IDC_play,将标题改为播放
4)右击Button3,选择属性,将ID改为IDC_pause,将标题改为暂停
5)右击Button4,选择属性,将ID改为IDC_stop,将标题改为停止
6)右击滑块,ID改为IDC_SLIDER
单击样式,点[P]:选择顶端/左侧,选择打勾标记。
7)右击编辑框,将ID改为IDC_vol
音乐播放器的界面已经设计完毕,为:
(三)添加代码 1)在头文件处添加 #include “Mmsystem.h” #include “Digitalv.h”
#pragma comment(lib,“Winmm.lib”)
2)定义全局变量及成员函数。
//定义三个全局变量 HWND m_hWnd;DWORD DeviceID;MCI_OPEN_PARMS mciopenparms;
void Load(HWND hWnd,CString strFilepath){ m_hWnd=hWnd;mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加载文件前先清空上一次播放的设备
mciopenparms.lpstrElementName=strFilepath;//将音乐文件路径传给设备
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(hWnd,buffer,“出错警告!”,MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);
} DeviceID=mciopenparms.wDeviceID;//打开文件成功就关联文件到设备 }
void play(){ MCI_PLAY_PARMS mciplayparms;mciplayparms.dwCallback=(DWORD)m_hWnd;mciplayparms.dwFrom=0;//每次播放都是从0开始播放
mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciplayparms);}
void pause(){ mciSendCommand(DeviceID,MCI_PAUSE,0,0);} void resume(){ mciSendCommand(DeviceID,MCI_RESUME,0,0);} void stop(){ mciSendCommand(DeviceID,MCI_STOP,0,0);mciSendCommand(DeviceID,MCI_CLOSE,0,0);//当点击停止按钮时,将所有的信息都清除掉 } DWORD setvolume(DWORD vol){ MCI_DGV_SETAUDIO_PARMS setvolume;//这是设置音量的参数数据结构
setvolume.dwCallback=NULL;setvolume.dwItem=MCI_DGV_SETAUDIO_VOLUME;//动作是设置音量
setvolume.dwValue=vol;//音量值是vol mciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_ITEM|MCI_DGV_SETAUDIO_VALUE,(DWORD)(LPVOID)&setvolume);return 0;} 3)编辑各个控件的代码
A)双击“浏览”按钮,弹出一个对话框,选择OK,出现代码,添加:
char szFileFilter[]=“mp3文件(*.mp3)|*.mp3|”
“wma文件(*.wma)|*.wma|”
“wav文件(*.wav)|*.wav|”
“所有文件(*.*)|*.*|”;
CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){ CString strFilepath=dlg.GetPathName();CString strFilename=dlg.GetFileName();SetDlgItemText(IDC_filename,strFilename);Load(this->m_hWnd,strFilepath);GetDlgItem(IDC_play)->EnableWindow(true);//文件读取成功时所有按钮变可选的 GetDlgItem(IDC_pause)->EnableWindow(true);
GetDlgItem(IDC_stop)->EnableWindow(true);} B)双击“播放”按钮,弹出一个对话框,选择OK,出现代码,添加:
play();SetDlgItemText(IDC_pause,“暂停”);
C)双击“暂停”按钮,弹出一个对话框,选择OK,出现代码,添加:
CString strtemp;GetDlgItemText(IDC_pause,strtemp);//获取按钮状态 if(strtemp.Compare(“暂停”)==0){ pause();SetDlgItemText(IDC_pause,“恢复”);}
if(strtemp.Compare(“恢复”)==0){ resume();SetDlgItemText(IDC_pause,“暂停”);}
D)双击“停止”按钮,弹出一个对话框,选择OK,出现代码,添加:
stop();
SetDlgItemText(IDC_pause,“暂停”);GetDlgItem(IDC_play)->EnableWindow(false);//当stop按钮按下时,播放和暂停应该均不可用 GetDlgItem(IDC_pause)->EnableWindow(false);
E)编辑滑块及编辑框按钮。
右击滑块,选择建立类向导,选择Member Variables,选择Add Varriable„,在Member variable name:处改为m_slider.Category:处改为Control
右击编辑框,操作同滑块,Member variable name:处改为m_int.。Variable type:处改为int
右击滑块,选择建立类向导,在Message Maps页面,Object IDs:选择IDC_SLIDER,在Messages:处选择NM_CUSTOMDRAW。
添加滑块及编辑框的代码在图示位置处添加
m_slider.SetRange(0,1000);//滑块的移动范围0~1000 m_slider.SetPos(500);//滑块指针的初始位置设为500代表初始音量为50 GetDlgItem(IDC_play)->EnableWindow(false);//文件没有读取时所有按钮应该是不可选的GetDlgItem(IDC_pause)->EnableWindow(false);GetDlgItem(IDC_stop)->EnableWindow(false);
双击滑块按钮,弹出一个对话框,选择OK,添加代码
UpdateData(true);m_int=m_slider.GetPos()/10;setvolume(m_slider.GetPos());UpdateData(false);
四、调试运行
调试时无错误,运行时出来一个MFC界面,就可以添加歌曲,播放音乐了。至此一个简单的音乐播放器就完成了。
五、总结分析
通过此次实验,我不仅再次熟悉了visual C++环境,还学会了如何使用MCI在visual C++环境下制作一个音乐播放器,而且也牢固的掌握了媒体控制接口MCI的编程接口知识,当真的做出一个简单的音乐播放器时,非常的开心。以后要多多学习这方面的知识,争取了解更多的软件基本原理。