1、Delete filesSwitch background iconMinimize to tray function and so on. The testing results show that the player can run smoothly and realize all of functions mentioned before. The player is provided with fault tolerance as well. To sum up, the player achieves the designs expected result. At the same
2、 time, the music player has a well performance in operational stability and economic cost.Key words: Music player; Linux; Qt; Phonon绪 论随着经济的发展,人类社会发生了翻天覆地的变化,人民生活水平得到了提高,生活节奏变得更快,人们在精神上的需求甚至超过了物质上的需求,而音乐便是他们精神生活中不可缺少的一部分。现代科学技术不断发展,人们开始使用网络媒介和各种数据存储设备,使得各种音频和视频资源的传播更为便捷、迅速、广泛,于是各种音乐播放器也紧跟着发展了起来。音乐播放
3、器作为一种用于播放各种音乐文件的多媒体播放软件,已经成为了大家电脑里面不可或缺的一项应用。因此设计一款优良的音乐播放器软件成了许多公司和个人的目标。网络上已经存在着成各式各样的音乐播放器。但是,它们之中有许多都是根据特定的操作系统来开发的,其中很大一部分都没有实现跨平台的应用,为了应对不同的系操作统,它们只能重新开发新的版本。本文主要研究的就是基于Linux的音乐播放器。它基于Qt开发框架,可以实现跨平台应用,能够在任何它所支持的平台上编译、执行相同的程序代码,而不需要修改源代码。另外,它还能依照不同的平台而表现出该平台特有的图形界面风格。研究基于Linux的音乐播放器具有一定的意义。虽然Li
4、nux和Qt已经发展了很长的一段时间,但是对于很多国内计算机专业的大学生来说,它们还是比较陌生的事物。计算机行业是一个飞速发展的行业,我们必须跟上它的步伐,才不会被社会淘汰。本文的目的是通过对流行音乐播放器的研究,设计并实现一款音乐播放器。本音乐播放器在播放音频文件方面主要选择播放本地文件,在功能方面主要具备一些基本的音乐操作功能,如:暂停、播放、音量调节、拖动、停止等。它在稳定性、视觉效果、歌曲库的大小等方面可能远不如当今的许多播放软件,但是它小巧并且易移植,能够实现跨平台运行。1 系统开发平台介绍1.1 Linux简介Linux是一种自由和开放源码的计算机操作系统。目前存在着许多不同的Li
5、nux,但它们全都使用了Linux内核。Linux可安装在各种各样的电脑硬件设备,从手机、平板电脑、路由器和影音游戏控制台,到桌上型电脑,大型电脑和超级电脑。Linux是一个领先的操作系统,在2011年11月发布的TOP500中有91.4%的超级计算机使用的是Linux操作系统1。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。只要遵循GNU通用公共许可证,任何人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工
6、具和数据库的操作系统(也被称为GNU/ Linux)。通常情况下,Linux被打包成供桌上型电脑和服务器使用的Linux发行版本。一些流行的主流Linux发行版本,包括Debian(及其衍生版本Ubuntu),Fedora和openSUSE等2,3。Linux的发展现状目前流行的桌面操作系统主要包括两大类:一类是主流商业桌面系统,包括微软的Windows系列、Apple的Macintosh等;第二类基于自由软件的桌面操作系统,特别是Linux桌面操作系统。近年来,特别在国内市场,Linux桌面的发展趋势非常迅猛。国内如中标软件、红旗等系统软件厂商推出的Linux桌面操作系统,目前已经在政府、企
7、业、OEM等领域得到了广泛应用。国外的Novell(SuSe)、Sun公司也相继推出了基于Linux的桌面系统。但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面,如音乐播放器。Linux发展非常迅速,这与它具有的良好特性是分不开的。Linux具有的主要特性如下4:(1)开放性。系统遵循世界标准规范,凡遵循国际标准所开发的硬件和软件,都能彼此兼容。(2)多用户。系统资源可以被不同用户各自拥有和使用,即每个用户对自己的资源有特定权限,互不影响。(3)多任务。能够同时执行多个程序,而且各个程
8、序相互独立运行。(4)设备独立性。将外部设备统一视为文件,只要安装它们的驱动程序,任何用户都可以像使用文件一样操纵、使用设备,而不必知道它们的具体存在形式。1.2 Qt介绍Qt是一个跨平台的C+应用程序开发框架5。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,比如控制台工具和服务器。Qt被OPIE、Skype、VLC media player、Adobe Photoshop、VirtualBox 与Mathematica所使用。它是诺基亚(Nokia)的Qt Development Frameworks部门的产品。Qt使用标准的C+。通过语言绑定,其他的编程语
9、言也可以使用Qt。Qt是自由且开放源代码的软件,在GNU较宽松公共许可证条款下发布。所有版本都支持广泛的编译器,包括GCC的C+编译器和Visual Studio。使用Qt开发的软件,相同的程序码可以在任何支持的平台上编译与执行,而不需要修改源代码。会自动依平台的不同,表现平台特有的图形界面风格。除了C+外,Qt还为其它多种计算机语言提供了应用程序接口,您也可以使用这些语言开发Qt应用程序6。Qt主要的优势如下:(1)面向对象。Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代callback,
10、这使得各个元件之间的协同工作变得十分简单。(2)丰富的API。Qt包括250个以上的C+类,还提供基于模板的collections,serialization,file,I/O device,directory management,date /time类。甚至还包括正则表达式的处理功能。1.3 集成开发环境Qt Creator是一款跨平台的集成开发环境,Qt Creator 是 Qt 被 Nokia收购后推出的一款新的轻量级IDE。此 IDE 能够跨平台运行,支持在桌面环境,如:Windows、Linux/X11和Mac OS。与移动设备,如:Symbian、Maemo和MeeGo上建构和运
11、行Qt应用程序。允许开发者为多桌面环境及移动设备平台创建应用程序。它包括一个可视化侦错工具和整合的GUI版面和外形设计师。这个编辑器的功能包括语法高亮度显示和自动完成。根据官方描述,Qt Creator 的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。Qt Creator在 Linux上,使用GCC的C+编译器。在 Windows,预设安装它可以使用MinGW或MSVC。从原始码编译时,也可以使用cdb(Microsoft Console Debugger)。在功能方面,Qt Creator 包括项目生成向导、高级的 C+ 代码编辑器、浏览文件及类的工具、集成了
12、 Qt Designer、Qt Assistant、Qt Linguist、图形化的 GDB 调试前端,集成 qmake 构建工具等 。Qt Creator主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的Qt开发人员的工作效率。Qt Creator主要功能和优势如下:(1)使用强大的C+代码编辑器可快速编写代码。语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。(2)使用浏览工具管理源代码。集成了领先的版本控制软件,包括Git、Perforce和Subversion开放式文件,无须知晓确切的名称或位置搜索类和文
13、件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换。(3)为Qt跨平台开发人员的需求而量身定制。集成了特定于Qt的功能,如信号与槽(Signals/Slots)图示调试器,对Qt类结构可一目了然集成了Qt Designer可视化布局和格式构建器只需单击一下就可生成和运行Qt项目。1.4 Phonon简介Phonon是KDE(Kool Desktop Environment)的多媒体API, 为使用音频和视频的应用程序开发提供的一个框架7。应用程序不用去管多媒体播放是通过什么实现的(如GStreamer),只需调用相应的接口就行,但这中间需要一个中转,被称为backend。Pho
14、non提供一个稳定的API允许KDE4独立于任何一个声音系统服务器,Phonon从一开始就被设计成Qt函数的风格,Phonon并非只能运行于Unix系统,他的后端可以是在其它平台如 Microsoft Windows 并提供相同的功能。正是由于Phonon能够实现跨平台使用,使得Qt4.4和之后版本使用了Phonon,作为跨平台的音频和视频播放。Phonon让各种后端提供界面给开发者所谓的“引擎”,每个引擎运作在一个具体的后端。每个后端都可让Phonon控制基本功能,如播放、暂停和搜寻。Phonon也支持更高层次的功能,如让音轨转化之间变微弱。使用Solid,Phonon将给予用户更多配件的控
15、制能力如耳机、扬声器、麦克风。2 系统分析2.1 播放器举例Windows下的音乐播放器:Windows Media Player 是一款Windows系统自带的播放器,支持通过插件增强功能,在V7及以后的版本,支持换肤。1992年微软在Windows 3.1当中捆绑了WMP1.0,使Windows3.1成为第一代支持多媒体的Windows系统。后来,在Windows 98当中内置了WMP64,这个版本存在于后续的操作系统中,并被一直保留至今。另外,Windows有千千静听、QQ音乐、酷狗音乐等优秀播放器,功能十分完善,界面十分华丽,设计人性化,操作灵活、简单,种类十分丰富。Linux下的音乐
16、播放器:(1)Audacious与其它播放器的不同之处在于,它除了支持UTF-8字符集之外,还提供其它字符集的支持,这样能比较好的解决中文乱码的问题。更重要的一点是,它能很好的播放APE格式的音乐 。(2)Juk是一个很易用的播放器,而且界面方面做得比较美观。但似乎它不能直接读取windows分区里的音乐文件,如果音乐都在NTFS分区里,会给用户带来不少不便。(3)Bmpx相对前面两者的特色在于最小化到托盘后的播放提示。(4)Rhythmbox 是一款集成化的音乐管理工具,创建灵感来源于iTunes播放器,以GNOME桌面系统和GStreamer媒体框架为基础。不仅可以播放多种格式的音乐文件,
17、还可以连接到互联网中接受网络收音机或者到网上音乐商店购买音乐4。虽然Linux上的音乐播放软件并不缺乏,但是很多的软件技术层面并不是非常超前,只是简简单单,一切都由插件搞定,只是靠它整合的完整性让人简简单单完成音乐播放的任务。在缺乏商业化因素的支持下,Linux音乐播放器的用户体验并不高。由于Linux在图形界面、用户操作方面的劣势,现在的Linux应用程序在在向windows学习,应用程序界面更加丰富,更加美观,更加人性化,种类也更加丰富。开发者也在想更加团队、专业发展。2.2 功能需求分析音乐播放器作为一款必不可少的应用程序,广泛应用于电脑、智能手机、嵌入式设备,有着庞大的客户人群。本文设
18、计并实现一款简单的播放器,能够实现音乐播放器的一般基本功能。现将本播放器能够实现的功能做一些分析。2.2.1 基本功能实现音频的播放,这是开发一款音乐播放器的最基本要求,能够实现音频播放、暂停、停止、进度拖动、音量控制、上一首、下一首等基本功能。同时,在用户使用播放器的过程中,能够打开本地音频文件,将文件动态的添加到播放器当前播放列表,实现文件的打开操作8。为了方便用户的使用,本文能够将用户的播放列表存储在本地文件中,当系统下次启动的时候,能够获取用户的历史播放列表,并且将其添加进播放器的播放列表中。同时,如果用户想删除某首歌曲,可以将其从当前播放列表中删除。为了能够使用户清楚自己的播放历史,
19、播放器实现了播放历史记录功能,将用户的播放历史记录在本地文件中,可以方便用户的查看。播放器还有一些其他的功能,如:双击播放器列表实现文件的播放,系统关闭提示,最小化到系统托盘,鼠标拖动窗口等。2.2.2 播放器基本设置为了让用户对播放器有更好的体验,本文实现了对播放器的设置功能,能够对播放器进行一些基本设置,将设置结果保存在播放器的配置文件中,每次播放器启动的时候,首先读取配置文件,根据其中的内容,配置播放器的相关项。能够实现的基本配置有:背景图标的切换、语言切换、默认打开文件路径、是否最小化、播放器关闭提示。2.2.3 快捷键设置为了方便用户的操作,现在绝大部分的应用软件都设置有快捷键操作,
20、能够实现对软件的快捷操作。本文也根据需要设置了相关的快捷键,实现对播放器的控制。2.2.4 上下文菜单设置在播放器的设计过程中,参照主流音乐播放器的一些特点,为本播放器的托盘图标,播放列表,和播放器的主窗体设置有相关的上下文菜单。当用户点击鼠标右键,能够弹出相应的菜单选项,提供不同的操作。比如,当用户右键播放器托盘图标的时候,弹出的菜单有:最小化、复原、设置等,当用户右击播放列表,弹出菜单有:删除此歌曲、删除全部歌曲、打开文件等功能。2.3 可行性分析对于基于Linux的音乐播放器的设计与实现的可行性,本文将从经济、技术和应用三方面进行分析。2.3.1 经济可行性Debian是一种自由和开放源
21、码的类Unix操作系统,系统软件本身的安装和使用都不需要任何费用。Qt分为两种版本:(1)Qt商业版。提供给商业软件开发。它们提供传统商业软件发行版并且提供在协议有效期内的免费升级和技术支持服务。(2)Qt开源版。仅仅为了开发自由和开放源码软件,提供了和商业版本同样的功能。GNU通用公共许可证下,它是免费的。本系统采用Qt开源版,不需要任何费用。所以,基于Linux的音乐播放器在开发过程中,不需要任何的附加费用,能够实现“零成本”的可行性。2.3.2 技术可行性首先,基于Linux的音乐播放器,实现一般音乐播放器的基本功能(播放,暂停,快进),没有十分复杂的其他功能,如:网络下载,歌词下载等,
22、这些都能够运用所学的知识实现,这些功能都可以通过调用Phonon的API来实现。Qt对于大多数人来说,还是一个新事物,但是它只是一个跨平台应用程序和UI开发框架,而且这个项目对于Qt的运用不是很深入,只是对于某一些基本的理论知识的学习和运用。同时在Linux下使用Qt的集成开发环境 Qt Creator与在windows平台下没有太大差别。此项目使用过的编程语言是C+,作为一项高级语言,与C、C#、Java都有很多相似性。最后,Linux、Qt作为开源软件,在网络上有许多开源社区,有很多开源爱好者,能够查到许多相关的源代码,通过充分运用这些网络资源,对自己完成设计有很大帮助。2.3.3 应用分
23、析本文是在Debian操作系统平台上进行的开发,使用Qt实现C+图形用户界面开发,Phonon实现多媒体编程。由于Qt和Phonon都具有跨平台的特性,使用Qt开发的软件,相同的程序代码可以在任何支持的平台上编译与执行,而不需要修改源代码。只要操作系统安装有Qt和Phonon的相关类库,本播放器能够在 Linux、Windows、Mac OS X等操作系统上使用。所以能够支持播放器的操作系统十分广泛。本播放器实现了大部分基本功能,能够满足用户一般的播放需要。资源获取途径方面,本播放器可以不受限制地获取本地计算机上的所有资源,同时资源获取方便快捷。界面观感方面,桌面应用程序除了自身的菜单栏和工具
24、栏之外,没有多余的菜单栏和工具栏。2.4 总结本课题通过对Linux环境下的音乐播放器技术的相关研究,了解了Linux平台下的体系结构,以及QT开发平台使用,掌握了音乐播放器的实现原理以及过程,从而设计出一款用户界面友好的音乐播放器。通过以上分析,播放器的功能不是非常复杂,完成这个音乐播放器的知识大都已经具备,所以能够较好的完成。主要研究内容包括以下几个方面:(1)查找相关书籍与文献,了解LINUX的构架并搭建LINUX平台。(2)查找相关资料,了解QT Creator的开发方式以及QT库的使用,搭建QT平台。(3)查找现阶段基于LINUX平台手机音乐播放器发展现状以及相关功能。在上述基础上,
25、做出音乐播放器的相关功能如下:(1)美观、时尚的操作界面。(2)滚动显示正在播放的歌曲及其长度信息。(3)音频的播放、暂停、停止、快进等功能。(4)显示歌曲的播放进度。(5)通过播放列表来选择播放曲目。(6)音乐播放器的控制设置功能。(7)音乐播放器的控制设置功能等。在LINUX平台上完成该课题的软件,然后进行相应的软件测试。3 系统设计3.1 Qt信号与槽机制介绍在以往的GUI用户界面中,用户操作一个窗口部件时,需要其他窗口部件的响应或者能够激活其他操作。在程序开发中,经常使用回调(callback)机制来实现。但是,QT不同于回调机制,他使用信号与槽机制。信号和槽机制是 QT 的核心机制,
26、要精通 QT 编程就必须对信号和槽有所了解。信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。信号和槽是 QT 自行定义的一种通信机制,它独立于标准的 C/C+ 语言,因此要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler)的 QT 工具,该工具是一个 C+ 预处理程序,它为高层次的事件处理自动生成所需要的附加代码9。在人们熟知的很多 GUI 工具包中,窗口小部件 (widget) 都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在 QT 中信号和槽取
27、代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。 信号和槽能携带任意数量和任意类型的参数,他们是类型完全安全的,不会像回调函数那样产生 core dumps。所有从 QObject 或其子类 (例如Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。可以将很多信号与单个的槽进行连接,也
28、可以将单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。总之,信号与槽构造了一个强大的部件编程机制。3.1.1 信号当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。只有定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。信号与槽机制完全独立于任何 GUI 事件循环。只有当所有的槽返回以后发射函数emit()才返回。如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地 执行,但是它们执行的顺序
29、将会是随机的、不确定的,我们不能人为地指定哪个先执行,哪个后执行。信号的声明是在头文件中进行的,QT 的 signals 关键字指出进入了信号声明区,随后即可 声明自己的信号。例如,下面定义了两个信号:signals:void mySignal(); void mySignal(int x);在上面的定义中,signals 是 QT 的关键字,而非 C/C+ 的。接下来的一行void mySignal() 定义了信号mySignal,这个信号没有携带参数;接下来的一行void mySignal(int x) 定义了重名信号 mySignal,但是它携带一个整形参数,这有点类似于 C+ 中的虚函数。从形式上讲信号的声明与普通的C+函数是一样的,但是信号却没有函数体定义。另外,信号的返回类型都是void,不要指望能从信号返回什么有用信息。信号由moc自动产生,它们不应该在.cpp文件中实现6。3.1.2 槽槽是普通的 C+ 成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。既然槽是普通的成员函数,因此与其它的函数一样,它们也有存取权限。槽的存取权限决定了谁能够与其相关联。同普通的 C+ 成员函数一样,槽函数也分为三种类型,即 pub
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1