曾经有人说过:最令人生厌的问题都来自那些看起来能工作,其实却潜藏着Bug的程序。正因为这样,事前必须有周密的思考[5]。
本文将开发一款界面清楚明了,操作简单实效,支持多种格式媒体播放的音乐播放器。该播放器集播放、暂停、停止、快进、快退、下一曲、上一曲、音量调节等功能于一体,性能良好。该播放器支持MP3、WAV、WMA等音频格式。
在现实生活中,我们可能都用过“酷狗音乐盒”、“酷我音乐盒”、“千千静听”等非常优秀的播放器,但是在我们使用这些播放器的过程中总有一些不尽如人意的地方,比方说软件庞大,有的多达几十MB,频频的软件升级等。可最重要的缺点在我看来是这些公司并没有开放其源代码,对于一个程序员来说,这可能是觉得非常遗憾的;因为我们无法知道其具体过程的实现。本文设计的这个基于KDE中phonon库的音乐播放器,除了实现一般播放器的常用功能之外,而且播放器具有体积小等优点,最重要的是源码是自己写出来的。本程序的开发环境是QT,操作系统是WIN7,用到的编程语言是C++。
这次毕业设计所追求的是结合C++语言提供的先进设计思想以及QT中多样化的媒体控制手段,结合用户(呵呵,一般说来是自己)使用音乐播放器的习惯和对多媒体播放器的要求,设计了一款操作界面大方、美观,操作简单、实用,可以实现在播放列表中加载一个或者是多个媒体文件;能够实现连续播放多个媒体文件等功能的音乐播放器。
2
1 QT及Phonon库介绍
1.1 QT简介
QT是一个跨平台的C++开发工具,有时又被称为C++部件工具箱。QT被用在KDE桌面环境、Opera、Google Earth、Skype、Adobe Photoshop Album和VirtualBox的开发中。它是挪威QT Software 的产品,2008年6月17日被芬兰的诺基亚(Nokia)公司收购,以增强该公司在跨平台软件研发方面的实力。
使用QT开发的软件,可以在任何支持的平台上编译与运行,而不需要修改源代码。可以实现本平台的图形界面风格,也可实现其它平台的图形界面风格。比如可以在Microsoft Windows平台下编译出具有苹果公司Mac OS图形界面风格的应用程序。
经过多年发展,QT不但拥有了完善的C++图形库,而且近年来的版本逐渐集成了数据库、OpenGL库、多媒体库(Phonon)、网络库、脚本库、 XML库、WebKit库等等,其内核库也加入了进程间通信、多线程等模块,极大的丰富了QT开发大规模复杂跨平台应用程序的能力,真正意义上实现了其研发宗旨“Code Less; Create More; Deploy Anywhere”。
QT中使用了C++的非标准扩展,用在编译前增加一个名为moc的预处理器QT开放源代码,并且提供自由软件的用户协议。使得它可以被广泛地应用2009 年5月11日,诺基亚QT Software 宣布 QT源代码管理系统面向公众来实现,moc将QT代码处理成标准C++代码。 在各平台上的开放源代码软件开发中。
开放,QT 开发人员可通过为 QT 以及与 QT 相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造 QT未来的发展。为了便于这些内容的管理,QT Software 启用了基于 Git 和 Gitorious 开源项目的Web 源代码管理系统。在推出开放式 QT 代码库的同时,QT Software 在其网站发布了其产品规划。其中概述了研发项目中的最新功能,展现了现阶段对 QT 未来发展方向的观点,以期鼓励社区提供反馈和贡献代码,共同引导和塑造 QT 的未来。
其包括了以下模块:
1、基本模块,包括核心,窗口组件等 2、集成开发环境 3、工作区模块
4、openGL三维图形模块 5、网络模块 6、表格模块
3
7、XML模块 8、数据库模块[7]
1.2 Phonon库简介
Phonon库原本是KDE4的开放原码多媒体API,不过后来,KDE与QT合并开发了。反正简单说来的话,就是QT使用Phonon这个多媒体框架来提供一般的影音多媒体文件的播放。
Phonon库是一个跨平台多媒体框架,能够在QT应用程序中使用与播放影音多媒体内容。但如果我们不借助这个库而去开发多媒体软件的话,我们可能要下载解码器,才能播放多媒体的文件。
整体来说,Phonon的架构只要记住三个东西: 1、media object
Phonon的基础,用于管理多媒体来源。来源可能是影音档等,而能够提供基本的播放控制,例如开始、暂停戒结束。而提供多媒体数据给media object的则为media source,在给media object之前通常是raw data,再由media object迚行转换。
2、sinks
输出多媒体,例如在widget上播放影片戒是输出至声卡(播放音乐)。通常sink是一个播放的装置(例如声卡等)。而sink只接受media object来的数据,由media object控制播放;而由sink来处理这些多媒体
3、paths
用来连接Phonon的对象,意即media object不sink之间的连接。 本款QT播放器开发采用的是结构化生命周期法,其理念是把整个系统开发过程分成若干个阶段,每个阶段完成相应的任务,从而开发出我们想要的产品软件。其基本思想是:
1、设计人员与用户交互的原则 2、先逻辑然后物理实现的原则 3、“自顶向下”的原则[6]
研究手段:主要结合自己以前的软件开发经验,联系本次软件需求分析和参考文献,根据项目的特点选择适当的开发工具软件(QT)和编程语言(C++)来制定合适的软件开发方案。
4
2 播放器的基本设计需求
2.1 基本设计需求
根据我们的软件需求分析,可获得软件系统的基本功能需求,以下从不同的角度来描述系统的需求,并且使用图例来描述,系统的功能需求,我们分成几个部分来概括,即播放器的基本控制需求,播放器列表管理需求如图1所示。
播放 暂停 播放器停止 在播放器运行时,用户选择一首歌曲后,播放器将播放选中的播放列表中的歌曲,并同时显示当前进度;当歌曲未暂停或停止时,用户单击“暂停”,播放器进入暂停状态;如果是单击“停止”按钮,播放器将停止播放,用户点击“上一曲”或“下一曲”按钮,播放器将播放上一首或下一首歌曲;用户点击“播放列表”按钮,播放列表则显示或隐藏,点击“歌词”按钮,则显示歌词。 2.2工作原理
播放器的整个工作原理就是这样一个流程图。从主界面开始,如果播放音乐需先添加需播放的音频文件到播放列表,如果已经添加了播放的音频文件在播放列表中,则可直接在主界面上的点击播放按钮,切歌可通过上一曲后下一曲实现,另一种快捷的切歌方式是直接通过点击播放列表中的歌曲,则播放器播放当前点击的歌曲。同时,在播放列表上还有歌词显示按钮,如果歌词存在于相关的路径下,点击歌词按钮则显示或隐藏歌词。
上一曲 下一曲 音量控制
图1 播放列表管理结构图
5
当然,该播放器还有其他一些功能,比方说隐藏在后台播放,就不再在此详述。工作原理如图2所示。
主界面 歌词显示 播放列表 打开文件选择歌曲播放
图2 播放器工作原理图
6