<!-- [if !mso]>
<mce:style><!--
v/:* {behavior:url(#default#VML);}
o/:* {behavior:url(#default#VML);}
w/:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
-->
<!-- [endif]--><!-- [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!-- [if !mso]>
<object
classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui>
</object>
<mce:style><!--
st1/:*{behavior:url(#ieooui) }
-->
<!-- [endif]-->
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"/@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;
text-underline:single;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:1266185948;
mso-list-type:hybrid;
mso-list-template-ids:1862710722 981369336 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
{mso-level-text:%1、;
mso-level-tab-stop:39.0pt;
mso-level-number-position:left;
margin-left:39.0pt;
text-indent:-18.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
<!-- [if gte mso 10]>
<mce:style><!--
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
-->
<!-- [endif]-->
2010-2-13
使用
Qt
做一个简易音乐播放器【
Phonon
浅谈
--
续】
在第一篇
Phonon浅谈
中提及到了
Phonon
这个多媒体框架的一些基本知识,于是想着结合这些基本知识来实践一番,做一个简单的音乐播放器。
【步骤一】
新建一个
Qt Gui
工程,在建立过程中需要包含
Phonon
模块,之后生成文件如下图:
<!-- [if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:148.5pt;
height:115.5pt'>
<v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.jpg" mce_src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.jpg"
o:title="0"/>
</v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
Qt Gui
工程会生成一个
ui
文件,在这里是
mainwindow.ui
。双击
mainwindow.ui
进行一番简单的布局,如下图:
<!-- [if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
style='width:219pt;height:252.75pt'>
<v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg" mce_src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg"
o:title="2"/>
</v:shape><![endif]--><!-- [if !vml]--><!-- [endif]-->
关于这个
ui
界面,中央位置是一个
QListWidget
,用来显示音乐文件列表;下面一栏红色矩形是一个
QVBoxLayout
垂直布局部件,用来确定等会要建立的播放进度条的位置;而下面则是四个相关控制按钮。
大概地说,
Phonon
的工作机制是使用
MediaObject
来管理
MediaSource
即源文件,通过
Path
连接到
AudioOutput
,最后是由
AudioOutput
将数据发送到相关物理设备。
于是有了步骤二。
【步骤二】
步骤一是用来实现基本的界面,而步骤二是用代码实现具体的功能。
基于对
Phonon
的认识,有了以下四点:
<!-- [if supportFields]><span lang=EN-US><span
style='mso-element:field-begin'></span><span style="mso-spacerun:yes" mce_style="mso-spacerun:yes"> </span>=
1 /* GB3 <span style="mso-element:field-separator" mce_style="mso-element:field-separator"></span></span><![endif]-->①
<!-- [if supportFields]><span
lang=EN-US><span style="mso-element:field-end" mce_style="mso-element:field-end"></span></span><![endif]-->使用
MediaObject
管理媒体源
<!-- [if supportFields]><span lang=EN-US><span
style='mso-element:field-begin'></span><span style="mso-spacerun:yes" mce_style="mso-spacerun:yes"> </span>=
2 /* GB3 <span style="mso-element:field-separator" mce_style="mso-element:field-separator"></span></span><![endif]-->②
<!-- [if supportFields]><span
lang=EN-US><span style="mso-element:field-end" mce_style="mso-element:field-end"></span></span><![endif]-->使用
AudioOutput
连接物理设备
<!-- [if supportFields]><span lang=EN-US><span
style='mso-element:field-begin'></span><span style="mso-spacerun:yes" mce_style="mso-spacerun:yes"> </span>=
3 /* GB3 <span style="mso-element:field-separator" mce_style="mso-element:field-separator"></span></span><![endif]-->③
<!-- [if supportFields]><span
lang=EN-US><span style="mso-element:field-end" mce_style="mso-element:field-end"></span></span><![endif]-->使用
SeekSlider
实现进度条
<!-- [if supportFields]><span lang=EN-US><span
style='mso-element:field-begin'></span><span style="mso-spacerun:yes" mce_style="mso-spacerun:yes"> </span>=
4 /* GB3 <span style="mso-element:field-separator" mce_style="mso-element:field-separator"></span></span><![endif]-->④
<!-- [if supportFields]><span
lang=EN-US><span style="mso-element:field-end" mce_style="mso-element:field-end"></span></span><![endif]-->使用
QList
实现播放列表
于是产生了相应的代码:
并且需要在构造函数里面将
mediaObject
和
audioOutput
连接起来:
从而使得数据能从
mediaObject
到达
audioOutput
,再通过物理设备播放。
<!-- [if !supportLists]-->1、
<!-- [endif]-->要播放音乐首先需要有源文件,所以先实现添加文件的功能。
首先,将添加按钮和添加功能连接起来:
从而实现点击按钮激活相应操作的功能,而添加音乐文件的槽的代码如下:
上述代码是使用
QFileDialog
的
getOpenFileNames
方法获取若干个音乐文件,然后再使用
Qt
中的
foreach
遍历每个选中的文件,将其添加到播放列表中。
<!-- [if !supportLists]-->2、
<!-- [endif]-->播放、暂停和停止的基本实现
同样的先将信号和槽连接起来:
之后再具体实现相应的简单功能,这里列出
playFile
的代码:
首先判断列表是否为空,接着设置播放队列,然后播放当前文件,最后使得播放按钮不可用,而激活暂停按钮。其它的功能类似,都是使用
mediaObject
的方法。
【步骤三】
这里只简单地实现播放功能,当然还是可以再继续扩展功能,不过这是后话了。
运行的效果图如下:
<!-- [if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
style='width:222pt;height:266.25pt'>
<v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image003.jpg" mce_src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image003.jpg"
o:title="3"/>
</v:shape><![endif]--><!-- [if !vml]-->
此时就能听见蛮好听的《左边》了^_^
以下是全部代码:
mainwindow.h:
mainwindow.cpp:
main.cpp:
分享到:
相关推荐
Qt基于Phonon做的视频播放器
QT制作的简易音乐播放器 自己做的练习,可以互相学习一下。
qt phonon音乐播放器代码,供大家参考
基于QT的音乐播放器 运用phonon实现
利用qt,phonon框架制作的音乐播放器,添加歌曲播放音乐,播放显示歌词
QT Phonon 音乐播放器可执行文件及其源码 完整版,绝对货真价实
qt 的phonon 开发的播放器。 有pro 文件,点击批处理,生成vcproj文件即可使用。有注释。
此源代码是基于QT Phonon的视频音频播放器的设计与实现
离线安装包,亲测可用
QT的Phonon插件写的播放器,代码供参考。
使用QT+phonon+gstreamer开发的朋友,这是不可缺少的后台查件
QT做的音乐播放器源码 可以显示歌词 QT做的音乐播放器源码 可以显示歌词 需要安装phonon模块
qt4 音乐播放器 基于phonon库 有后台功能
支持MP3 WMA等音乐格式播放 可以实现四套皮肤的更换。
QT C++ 音乐播放器 炫酷界面 附带所有自制资源图片,开发环境QT Creator,Qt4 添加歌曲、音量调节、下一首、上一首、列表选择、自动加载已添加列表、自动删除无效歌曲列表。帮助等。
基于qt4的音乐播放器,完成了歌词,本地音乐,网络音乐的播放和下载,百度音乐电台。完全出自个人兴趣,里面有十分详细的代码注释,供大家参考。写得不好的方面大家不要见怪
基于QT phonon开发的一个媒体播放器,大家可以试下,我测试过能用
这一节实现一个简易的音乐播放器,其音乐播放的核心功能是采用Qt支持的Phonon框架,该框架在前一篇博文Qt学习之路_13(简易俄罗斯方块) 中已经使用过了,在俄罗斯方块中主要是用来设置背景音乐和消行的声音的。...
基于Qt4.6.3开发的视频播放器,功能全面,代码简单,基于Qt Phonon实现。对于希望简单实现播放器的同学或者想学习Qt Phonon的同学,是个非常好的学习资料。
QT4音乐播放器,小巧,适合新手学习。有发布版,直接可以使用,包含了codec和phonon的backend,直接可用。