成都理工qt课程设计实验报告基于qt实现的简易音乐播放器大学毕设论文Word格式.docx
《成都理工qt课程设计实验报告基于qt实现的简易音乐播放器大学毕设论文Word格式.docx》由会员分享,可在线阅读,更多相关《成都理工qt课程设计实验报告基于qt实现的简易音乐播放器大学毕设论文Word格式.docx(19页珍藏版)》请在冰点文库上搜索。
徐玉祥
2015年5月13日
诚信承诺
本人郑重声明所呈交的课程报告是本人在指导教师指导下进行的研究工作及取得的研究成果。
据我所知,除了文中特别加以标注的地方外,论文中不包含其他人已经发表或撰写过的研究成果。
与我一同工作的同学对本文研究所做的贡献均已在报告中作了明确的说明并表示谢意。
任课
教师
评语
成绩评定:
任课教师(签名):
年月日
基于QT实现的简易音乐播放器
作者姓名:
徐玉祥专业班级:
201413040202指导教师:
李军
摘要
随着现在科技的发展,越来越多的嵌入式设备已经被广泛应用于生活中,这大大提高了人们的生活质量。
时下,音乐播放器已经成为人们生活中不可或缺的必备品。
它的诞生,让动听的声音有了存储的载体,得以广泛的传播和分享。
然而,各种播放器功能特点不同,有些功能强大却占用系统资源多,有些软件小却不支持多种音频格式。
论文在讨论QtPhonon媒体框架的基础上,通过对音乐播放器的基本功能进行了分析和界面的总体设计,提出一套适用于嵌入式系统的媒体播放器框架方案,并最终运用QtCreator实现了整个应用,通过测试运行表明该音乐播放器基本功能完善、运行稳定,能够较好地满足实际应用的需要。
关键词:
嵌入式;
播放器;
Qt;
Phonon
目录
第1章前言2
1.1选题依据2
1.1.1调查研究2
1.1.2方案说明2
第2章设计与实现4
2.1界面设计4
2.2项目框架设计5
2.3系统实现6
第3章实验结论与心得体会14
参考文献15
第1章
前言
1.1选题依据
Qt以其优良的跨平台特性,强大的功能,良好的移植性使之逐渐成为广泛应用的GUI系统,因此,基于Qt的嵌入式系统中实现音乐播放器具有重要的价值。
如今,PC机中音频文件越来越多,小巧而功能完善的音乐播放器已经成为人们生活中不可或缺的必备品。
1.1.1调查研究
经调查研究发现,目前,各种各样的音乐播放器充斥着互联网,每种播放器功能特点不同,有些功能强大却占用系统资源多,有些软件小却不支持多种音频格式。
通过对音乐播放器的基本功能进行了分析和界面的总体设计,本文提出一套适用于嵌入式系统的媒体播放器框架方案,并基于Qt集成开发环境实现软件,具有体积小,支持播放格式多,系统资源占用少等优点。
而与其他播放器相比,本软件的缺点是基本功能虽然具备,但是功能却不够完善,比如不支持播放列表、不能够显示歌曲的具体信息等,这是需要改进的地方。
1.1.2方案说明
本选题是基于QT的音乐播放器,包括音频文件的添加,播放与暂停,换肤等。
具体功能如下:
(1)播放状态显示:
1.用户界面能显示正在被播放的歌曲的进度,显示歌曲的播放状态;
2.用户能够显示正在被播放歌曲的音量;
(2)播放控制:
1.用户能够控制正在被播放歌曲的进度;
2.用户能调节正在被播放歌曲的音量;
3.用户能够控制歌曲停止、暂停与播放;
(3)换肤
用户可以通过“换肤”按钮实现播放器皮肤的切换,该播放器内置五款皮肤。
功能说明:
在Qt的应用开发中,使用了很多媒体变量,在本音乐播放器开发设计中基于Phonon媒体框架使用到的主要媒体变量如下:
Phonon:
:
MediaObject*mediaObject:
媒体对象,管理媒体源
AudioOutput*audioOutput:
音频输出,连接物理设备
SeekSlider*seekSlider:
播放进度滑竿,实现进度条
VolumeSlider*volumeSlider:
音量滑竿,实现音量的大小调节
QList<
Phonon:
:
MediaSource>
sources:
音乐资源列表,实现对音乐资源的管理
除此之外还有:
QTableWidget*musicTable:
音乐资源表格,实现对音乐资源的总体控制
QAction*playAction:
播放按钮,添加到音乐表格中,实现对音乐的播放
QAction*pauseAction:
暂停按钮,实现对音乐的暂停
QAction*stopAction:
停止按钮,实现对音乐的停止
QAction*addFilesAction:
添加文件按钮,添加到音乐表格的菜单栏中,实现添加音乐
QLCDNumber*timeLcd:
电子显示屏,显示正在播放音乐的时间
QPushButton*PbChange:
换肤按钮,实现对音乐播放器皮肤的更换
具体实现功能的方法在下面介绍。
第2章
设计与实现
2.1界面设计
设计界面如图所示:
界面说明:
播放器的用户界面为UI设计后有Qt编译后形成的图形化界面,即播放器的外观界面。
此界面的设计也是在UI模式下对播放器外观的设计,可用一些美工手段进行加工,如使用样式表等对界面和界面按钮的美化等。
左上角控件为菜单栏Files,内嵌QAction类型的addFiles控件,用于文件的添加。
下面控件timeLcd属QLCDNumber类,用于显示音乐播放的时间,只读。
进度条滑块seekSlider属Phonon媒体框架的SeekSlider类型,用于播放进度的调节,初始值为False,可读写。
下方三个按钮均属于QAction类,分别为playAction、pauseAction、stopAction,用于播放控制的播放、暂停与停止。
初始值均为False,可读写。
音量调节滑块volumeSlider属Phonon媒体框架的VolumeSlider类型,用于播放音量的调节,初始值为max,可读写。
QPushButton类型的换肤控件PbChange在窗口的最下方位置,用于窗体皮肤的切换,初始值为默认第一张背景,可读写。
2.2项目框架设计
这个软件设计的目的就是制作一个能够播放音频的播放器。
通过创建带有Phonon模块的工程,对音乐播放器进行设计,主要用到模块中的MediaObject
(管理媒体源)
AudioOutput
(连接物理设备)SeekSlider(
实现进度条)QList
(实现资源添加),
在播放的文件方面,可播放本地的音频文件在功能方面,它具备一些基本的音乐操作处理功能(暂停、播放、音量调节、拖动、停止等)。
设计该播放器涉及到的几种重要类:
MediaObject
Class
主要提供一个能够处理媒体播放的介面。
MediaObject可说是处理多媒体档案最基本的一部份,它接受并管理来自于MediaSource的媒体档案,而媒体播放、暂停与停止都是由它来控制。
而在此之前,media物件必须要与output
node连接,这个nodes主要将媒体输出至底层的硬体,例如音效卡或显示卡等,而所需要的output
node则是根据多媒体的内容而所不同。
目前Phonon有两种output
node:
AudioOutput声音播放,VideoWidget影像播放。
主要是用来把多媒体的声音送到声音输出装置。
所以它能够经由类似喇叭等输出装置来播放,多媒体资料的来源必须要经过Phonon:
createPath()由MediaObject连接。
SeekSlider
提供一个可滑动的slider来设定多媒体串流播放的位置,即播放进度条,所以它会连接到MediaObject,并控制串流目前的位置。
VolumeSlider
提供可以控制声音装置音量的widget,它会连接到MediaObject,以此控制音量输出的大小。
QActionClass:
QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中。
应用程序可以通过菜单,工具栏按钮以及键盘快捷键来调用通用的命令。
本播放器通过QWidget:
addAction()函数将Actions添加到窗口部件上。
2.3系统实现
首先,本音乐播放器具备的功能图解:
播放
暂停
停止
基本操作音量调节
进度调节
功能打开本地文件
播放时间显示
其他操作
换肤
下面就各主要功能分版块介绍:
1.在本播放器开发中,使用中文编码,在main函数中包含头文件
#include<
QTextCodec>
,在main函数体中加入如下代码:
QTextCodec*codec=QTextCodec:
codecForName("
GBK"
);
//中文编码
QTextCodec:
setCodecForTr(codec);
setCodecForLocale(codec);
setCodecForCStrings(codec);
即可实现中文编码。
2.用到的Phonon媒体变量:
媒体变量名规划
类型
变量名
概述
Phonon:
MediaObject*
musicObject
媒体对象
audiooutput
音频输出
SeekSlider*
seekSlider
播放进度滑竿
VolumeSlider*
volumeSlider
音量调节滑竿
sources
音乐资源
3,步骤及功能实现代码:
新建一个空的Qt项目文件,继承自QMainWindow,添加main函数。
Phonon的工作机制是使用MediaSourse即源文件,通过Path连接到AudioOutput,最后使用AudioOutput将数据发送到相关物理设备。
所以,如果要使用Phonon的相关媒体变量,需要在Pro文件中添加一行代码:
QT+=phonon
接着,在头文件中需要包含的有:
QMainWindow>
audiooutput>
mediaobject>
QTableWidget>
seekslider>
volumeslider>
QLCDNumber>
QPushButton>
私有成员变量:
voidsetupActions();
voidsetupMenus();
voidsetupUi();
Phonon:
SeekSlider*seekSlider;
//进度条滑块
MediaObject*mediaObject;
//播放媒体界面
MediaObject*metaInformationResolver;
AudioOutput*audioOutput;
//音频输出
VolumeSlider*volumeSlider;
//音量调节滑竿
QList<
sources;
//媒体资源
QAction*playAction;
//播放按钮
QAction*pauseAction;
//暂停按钮
QAction*stopAction;
//停止按钮
QAction*addFilesAction;
//添加文件按钮
QLCDNumber*timeLcd;
//显示屏
QTableWidget*musicTable;
//音乐表格
QPushButton*PbChange;
//换肤按钮
intmyRand(intmax);
//随机数
intmiGrade;
下面就各功能分块介绍:
1,添加文件功能
addFilesAction=newQAction(tr("
添加文件"
),this);
connect(addFilesAction,SIGNAL(triggered()),this,SLOT(addFiles()));
voidMainWindow:
addFiles()
{
QStringListfiles=QFileDialog:
getOpenFileNames(this,tr("
选择文件"
),//添加文件对话框
QDesktopServices:
storageLocation(QDesktopServices:
MusicLocation));
//文件地址
if(files.isEmpty())//如果文件为空,返回
return;
intindex=sources.size();
foreach(QStringstring,files)
{
MediaSourcesource(string);
sources.append(source);
}
metaInformationResolver->
setCurrentSource(sources.at(index));
}
将添加文件按钮加入到菜单中:
setupMenus()//设置菜单
QMenu*fileMenu=menuBar()->
addMenu(tr("
文件"
));
fileMenu->
addAction(addFilesAction);
最终功能效果如图:
2,显示播放时间功能
tick(qint64time)
QTimedisplayTime(0,(time/60000)%60,(time/1000)%60);
timeLcd->
display(displayTime.toString("
mm:
ss"
功能效果如图:
3,播放进度条功能
seekSlider=newPhonon:
SeekSlider(this);
seekSlider->
setMediaObject(mediaObject);
QHBoxLayout*seekerLayout=newQHBoxLayout;
seekerLayout->
addWidget(seekSlider
4,播放控制功能
setupActions()
playAction=newQAction(style()->
standardIcon(QStyle:
SP_MediaPlay),tr("
"
playAction->
setDisabled(true);
//设置初始不可点击
pauseAction=newQAction(style()->
SP_MediaPause),tr("
pauseAction->
//设置初始不可点击
stopAction=newQAction(style()->
SP_MediaStop),tr("
stopAction->
//连接槽函数
connect(playAction,SIGNAL(triggered()),mediaObject,SLOT(play()));
connect(pauseAction,SIGNAL(triggered()),mediaObject,SLOT(pause()));
connect(stopAction,SIGNAL(triggered()),mediaObject,SLOT(stop()));
connect(addFilesAction,SIGNAL(triggered()),this,SLOT(addFiles()));
将播放控制按钮添加到窗体,使用QToolBar类的bar指针布局
QToolBar*bar=newQToolBar;
bar->
addAction(playAction);
addAction(pauseAction);
addAction(stopAction);
5,音量滑块功能
volumeSlider=newPhonon:
VolumeSlider(this);
volumeSlider->
setAudioOutput(audioOutput);
setSizePolicy(QSizePolicy:
Maximum,QSizePolicy:
Maximum);
QHBoxLayout*playbackLayout=newQHBoxLayout;
playbackLayout->
addWidget(bar);
addWidget(volumeSlider);
6,换肤功能
QPushButton*PbChange;
//换肤按钮
PbChange=newQPushButton("
换肤"
this);
connect(PbChange,SIGNAL(clicked()),this,SLOT(slotChange()));
//槽函数,每一个随机数对应一种事件,换背景图片
slotChange()
inti=myRand(miGrade);
switch(i){
case0:
setStyleSheet("
background-image:
url(D:
/Qt/XuYuXiang/Player/images/2.jpg);
);
break;
case1:
setStyleSheet("
/Qt/XuYuXiang/Player/images/3.jpg);
case2:
/Qt/XuYuXiang/Player/images/1.png);
case3:
/Qt/XuYuXiang/Player/images/5.jpg);
default:
intMainWindow:
myRand(intmax)//产生4以内的随机正整数
max=4;
intr=qrand();
returnr%max;
7.点击事件
tableClicked()
boolwasPlaying=mediaObject->
state()==Phonon:
PlayingState;
mediaObject->
stop();
clearQueue();
if(wasPlaying)
play();
else
8.主窗口设置
QWidget*widget=newQWidget;
widget->
setLayout(mainLayout);
setCentralWidget(widget);
setWindowTitle("
播放器"
setMaximumSize(800,400);
setMinimumSize(800,400);
setStyleSheet("
/Qt/XuYuXiang/Player/images/4.jpg);
最终界面效果如图:
第3章
实验结论与心得体会
该播放器利用Phonon媒体框架,实现了播放MP3、WAV、WMV等Windows音频格式的文件。
通过对该程序的编写和对面向对象程序设计的了解,使得我对Qt编程设计又有了更深的认识,同时了解了Phonon的相关知识。
课程是辛苦劳累的,但收获同样是巨大的,在课程设计中每解决一个问题,那种成就是无法语言的,调试中往往会遇到很多问题,不过经过查询资料,咨询老师,与同学探讨最终会得到理想的程序。
只有在实践中才能得到真正的提升,因为只有在项目实战中才能遇到我们在课堂上遇不到的问题。
而解决这些问题的过程正是我们学习与进步的过程。
回想在这次学习的的过程中,遇到了许多大大小小的问题,而这些问题,都是以我目前的知识水平无法解决的,所以,为了解决这些问题,需要自己去查找资料、请教同学,在这个过程中学到了很多以前不懂的知识。
总的来说,这个音乐播放