DirectShow技术音频播放器设计Word文件下载.docx
- 文档编号:16658682
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:31
- 大小:688.80KB
DirectShow技术音频播放器设计Word文件下载.docx
《DirectShow技术音频播放器设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《DirectShow技术音频播放器设计Word文件下载.docx(31页珍藏版)》请在冰豆网上搜索。
第二章系统分析3
2.1设计方案3
2.2可行性分析3
2.2.1技术可行性3
2.2.2经济可行性3
2.3功能分析3
第三章系统设计与开发4
3.1系统功能模块设计4
3.1.1歌曲添加4
3.1.2歌曲播放控制5
3.1.3歌曲音量播放控制5
3.1.4播放器交互界面5
3.1.5播放列表5
3.1.6歌词秀5
3.1.7播放核心5
3.2系统功能实现5
3.2.1歌词文件解析(LRC文件解析)5
3.2.2桌面歌词秀秀的实现9
3.2.3窗体歌词秀的实现11
3.2.4播放核心的实现13
3.2.5用户界面设计13
3.2.6播放列表设计16
第四章总结23
致谢23
参考文献24
第一章绪论
语音是人类语言的一种声学特殊表现形式,而音乐则是由有组织的乐音来表达人们思想感情、反映现实生活的一种艺术。
音乐不以说教方式来传播,更多的是通过熏陶及感染的途径,潜移默化地来影响人的心灵,使更多地得到美的滋润。
一款优秀的音乐播放器是享受音乐洗礼的必要条件。
目前多媒体软件可谓是百花齐放,争奇斗艳。
我的课题就是“基于DirectShow的音频播放器软件的设计”,吸取优秀多媒体播放器软件的优秀设计,改善不良缺陷,打造一款功能完善,音频播放效果俱佳的音频播放器软件。
播放器的开发将采用VS2010开发工具,并且利用MicrosoftDirectXSDK中的DirectShow组件命令接口进行编程。
1.1课题研究的目的和背景
1.1.1课题研究背景
音乐现在已经成为人类不可缺少的生活调剂品,也成为表达人们思想感情、反应现实生活的一种特殊艺术。
音乐的高潮迭起,刚柔起伏,都是人们抒发感情,寄托感情,表现感情的艺术形式。
所以音乐质量的高低影响着人们品味音乐。
高质量的音乐能使人们最大程度的感受音乐所表达的感情,而低质量音乐则有可能改变人们对原有音乐的理解。
所以一款优质的播放器是保证人们享受优质音乐的前提。
在这网络信息化的年代,计算机已经成为生活必须品,而音乐播放器则是计算机中的常用必备软件。
但是当前的音乐播放器大多功能单调,无法满足人们日常生活享受音乐时所需。
比如人们候享受音乐时,有时候需要结合歌词来理解感受音乐的情感;
或者人们想在家里就享受KTV时K歌的乐趣,这时候准确的动态歌词秀将是不可或缺的。
1.1.2课题研究的目的
设计研究一款功能齐全,符合人们日常操作习惯的音乐播放器是课题研究的最终目的。
本课题将克服普通音乐播放器功能单一,持续播放稳定性,无法显示歌词等缺点,使人们能使用此播放器享受音乐无穷的乐趣。
1.2系统主要实现内容与关键技术
1.2.1实现内容
通过对DirectShow音频开发技术的相关研究,了解音频开发的原理以及过程,从而设计出一款功能完善的高质量音频播放器。
这款音乐播放器实现的相关内容如下:
❑简洁、美观的人性化交互界面。
❑播放MP3、WAV等多种格式的音频文件。
❑歌曲播放控制方式实现。
❑歌曲添加。
❑播放列表实现。
❑LRC歌词文件解析
❑三种形式的歌词显示方式:
滚动条形式,窗口形式,桌面卡拉OK形式。
1.2.2系统开发的关键技术
1.2.2.1VisualStudio2010MFC开发环境
VisualStudio2010是微软公司最新推出的开发环境,是目前最流行的windows平台应用程序开发环境。
VisualStudio2010为C++开发人员提供了极大的便利,从利用Windows7所提供的新功能到通过使用大型基本代码提高工作效率的增强功能,每个C++开发人员都可获得新的或改进的功能。
MFC是微软为C++开发人员开发的一个编程框架,全称MicrosoftFoundationClassLibrary。
微软为开发人员封装了各种类,并且MFC这些类结合起来构成了一个应用程序框架,MFC为开发人员在windows下的应用程序开发提供了基础和便利。
MFC框架定义了应用程序的基本框架,并提供了用户接口的标准实现方法,开发人员通过预定义的接口就可以实现自己的内容。
MicrosoftVisualC++还提供了相应的工具来完成这个工作:
AppWizard可以用来生成初步的框架文件(代码和资源等);
资源编辑器用于帮助直观地设计用户接口;
ClassWizard用来协助添加代码到框架文件;
最后,编译,则通过类库实现了应用程序特定的逻辑。
MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。
这样封装的结果对程序员来说,是一套开发模板(或者说模式)。
针对不同的应用和目的,程序员采用不同的模板。
例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。
为了支持对应用程序概念的封装,MFC内部必须作大量的工作。
例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。
又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。
虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。
1.2.2.2MicrosoftDirectShowSDK
DirectShow是微软公司在ActiveMovie和VideoforWindows的基础上推出的基于COM组件的流媒体处理的开发包。
DirectShow为多媒体流的捕捉和回放提供了强力的支持。
运用DirectShow,我们可以很方便地从WDM驱动模型的采集卡上捕获数据,并进行相应的后期处理乃至存储到文件中。
DirectShow支持多种媒体格式,比如Asf、Mpeg、Avi、Dv、Mp3、Wave等,为多媒体流的捕捉和回放提供了强有力的支持。
DirectShow的设计初衷是简化windows平台上流媒体应用程序的开发,把程序从数据传输、硬件差别和同步机制等复杂问题中分离出来。
DirectShow使用了DirectSound技术提高音频流媒体的吞吐量,高效的渲染,最终把表现流媒体数据到用户的声卡。
同时,DirectShow在媒体数据中封装了时间标签从而保证其回放同步。
为处理各种可能的流媒体来源、格式和硬件设备,DirectShow采用了模块化结构,在这些模块中混合、匹配这些应用,而这些模块就是所谓的“滤波器”。
1.2.2.3COM组件技术原理介绍
COMcomponent(COM组件)是微软公司为了计算机行业的软件生产更加符合人类的行为方式而开发的一种新的软件开发技术。
在COM框架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需求有效组合,构成复杂的应用系统。
由此带来的好处是:
系统中的组件可以随时用新的组件替代,以便随时进行系统的升级和维护;
可以在多个应用程序中重复利用同一个组件;
可以方便的将应用程序扩展到网络环境下;
COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与语言专长编写组件模块。
COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用系统的一个规范,说明了如何动态交替更新组件。
一个应用程序通常是由一个的二进制文件组成的。
当编译器编译生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序不会发生任何变化。
操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新编译生成。
目前这种状况已经发生改变,开发人员开始将单个的应用程序分隔成单独多个独立的模块,即组件。
这种做法的好处是可以随时更新出新组件代替旧组件。
此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。
而且利用已有的组件,用户还可以快速的建立全新的应用。
第二章系统分析
2.1设计方案
本课题将制作一个功能完善的音频播放器,主要实现音频播放器的播放、停止、暂停等基本操作。
并设计实现播放列表功能,播放列表歌曲的添加。
实现lrc文件的解析,并实现歌词的三种同步显示方式。
2.2可行性分析
通过DirectX的DirectShow组件API函数实现播放器的播放、停止、暂停等基本操作。
通过MFC实现良好的图形用户界面和播放列表、歌曲文件的添加。
通过对LRC文件歌词的解析,实现歌词信息的读取和存储,并运用GDI和GDI+实现三种歌词的同步显示方式。
2.2.1技术可行性
播放器的开发采用VisualStudio2010开发环境,利用DirectX中的DirectShow组件API编程接口进行程序开发。
VisualStudio2010包含了一系列高效、智能的开发工具,为程序开发人员提供了强大了功能。
而其中的MFC则是为可视化编程创造了便利,我们可以轻松的通过MFC进行用户交互界面的可视化开发。
DirectShow则帮我们封装好了播放多媒体文件的API,我们只要通过DirectShowAPI就能轻松实现多种格式音频文件的播放。
2.2.2经济可行性
播放器的开发过程中,硬件设施投入少,开发周期短,总体成本低廉。
播放器的开发采用VisualStudio2010的MFC开发环境并利用DirectX中DirectShow编程接口进行开发,操作简单上手,节省开发时间。
综上所述,在人力、财力、物力、时间上的考虑,播放器的开发在经济上是可行的。
2.3功能分析
音乐播放器实现的相关内容如下:
第三章系统设计与开发
3.1系统功能模块设计
在系统功能分析的基础上,生成如图3-1所示的系统功能模块图。
图3-1系统功能模块图
3.1.1歌曲添加
音乐潮流在日新月异地变化着,用户对音乐的享受也在不断变化。
用户经常要根据音乐潮流的变化享受不同的音乐,这时我们就需要为用户提供一个可以方便添加歌曲的功能,让用户可以方便享受音乐。
该功能模块就是实现用户对歌曲文件添加到播放列表,并更新播放列表的歌曲,方便用户欣赏歌曲。
为方便用户添加歌曲享受歌曲的乐趣,歌曲添加模块必须要实现单个文件歌曲添加和多个歌曲文件添加功能,方便用户的各种操作需要。
3.1.2歌曲播放控制
播放歌曲控制,此功能模块实现对歌曲进行播放、暂停、停止、上一首、下一首、循环播放、单曲播放、随机播放等控制。
我们收听音乐时,有时候听到一首美妙个音乐,这时候我们就想一直享受这首歌曲,这时我们就可以用歌曲播放控制的单曲播放了,如果觉得不喜欢了,我们可以用下一首。
歌曲播放控制就是为了满足用户的各种对歌曲播放的控制,方面用户享受音乐。
3.1.3歌曲音量播放控制
歌曲音量播放控制主要实现音量大小控制、静音控制。
欣赏音乐时候,用户有时候要对不同的音乐进行声音的控制以此来增加音乐的效果,最大化的享受音乐的乐趣,所以就必须为用户提供音量大小的调节功能。
当我们享受音乐时,突如其来的一个电话,我们就需要把音乐关掉,这时我们就必须为用户提供一个静音功能。
3.1.4播放器交互界面
用户使用软件的时候不可能自己去调用播放接口等其他操作。
所以我们必须为用户提供一个良好的界面,是用户能够方便使用播放器来享受音乐,提升享受音乐的乐趣。
交互界面的开发必须简洁、美观、满足用户的各种需求。
为了达到用户界面的美观,将采用透明窗口,其实现原理是通过创建一个完全透明窗口,然后通过UpdateLayeredWindow根据PNG背景图片的Alpha值来实现窗口的部分透明。
通过对PNG图片的Alpha控制我们就可以创建各式各样的不规则窗口,这样的窗口设计方案美观又简单。
3.1.5播放列表
用户收听音乐如果每次都要重新添加歌曲文件,那将是多么麻烦的事情,播放列表可以帮助解决这个问题。
播放列表可以保存用户想要播放的歌曲。
3.1.6歌词秀
歌词秀是为了配合用户享受音乐而出现的。
用户可以结合歌词达到最大程度的音乐享受。
播放器将实现三个歌词显示方式,满足用户的不同需求。
比如桌面歌词秀,他的窗体是透明的,所以用户可以一边行其他操作一边享受歌词跟音乐带来的乐趣。
3.1.7播放核心
一个稳定、高效的播放核心是一个优秀音乐播放必不可少的重要组成部分。
3.2系统功能实现
3.2.1歌词文件解析(LRC文件解析)
3.2.1.1LRC歌词文件简介
LRC歌词文件是一种基于纯文本的歌词专用格式文件,包含着“[*:
*]”形式的“标签(tag)”,最早由郭祥祥先生提出并在其程序中得到应用。
LRC文件既可以用来实现卡拉OK功能,又能以普通的文字处理软件查看编辑。
LRC文件包含时间标签和标识标签。
标识标签一般出现在文件开头,其格式为“[标识名:
值]”。
以下是预定义的标签:
[ti:
歌曲名称]、[ai:
专辑名称]、[ar:
艺人名称]、[by:
编辑者]、[offset:
时间补偿值]。
时间标签形式为[mm:
ss]或者[mm:
ss.ff]。
其中数字必须为非负整数。
时间标签可以位于某行的任意位置。
一行歌词可以包含多个时间标签。
根据时间标签,用户端程序就会按照顺序依次高亮显示歌词,标签也无需排序,歌词的先后顺序由程序负责。
3.2.1.2Lyric组件结构图
图3-2Lyric组件结构图
3.2.1.3Lyric歌词文件解析代码组件具体实现
(1)CParseLyric:
:
Parse(char*lpLyric)主要是通过CString的Find、Mid、Compare方法来实现对歌词的解析。
具体代码如下所示:
voidCParseLyric:
Parse(char*lpLyric)
{
CStringstrLyric,strCurTring;
intiPos;
longnLength;
strLyric=lpLyric;
nLength=strLyric.GetLength();
iPos=strLyric.Find(L"
["
);
strCurTring=strLyric.Mid(iPos,1);
while(iPos<
=nLength)
{
if(strCurTring.Compare(L"
\n"
)==0||strCurTring.Compare(L"
\r"
)==0)
{
strCurTring=L"
"
;
}
)==0)
CStringtagString,tagStr;
while(strCurTring.Compare(L"
]"
)!
=0)
if(strCurTring.Compare(L"
=0||strCurTring.Compare(L"
{
tagStr=strCurTring;
tagString=tagString+tagStr;
}
iPos++;
strCurTring=strLyric.Mid(iPos,1);
}
tagStr="
tagString=tagString+tagStr;
ParseTags(tagString);
continue;
else
CStringstrLrc,strLrc1;
if(strCurTring.Compare(L"
{
strCurTring=L"
}
strLrc1=strCurTring;
strLrc=strLrc+strLrc1;
iPos++;
strCurTring=strLyric.Mid(iPos,1);
if(iPos>
iPos++;
break;
ParseLrc(strLrc);
}
}
(2)CParseLyric:
ParseTags(CStringstrLyric)经过了Parse将歌词信息的标识标签信息分离出来,然后再对标识标签进行单独解析。
ParseTags(CStringstrLyric)
CStringstrMinute,strScend;
if(strLyric.Find(L"
=-1&
&
strLyric.Find(L"
"
=-1)
if(strLyric.Find(L"
ti"
)==-1&
al"
ar"
strLyric.Find(L"
by"
offset"
)==-1)
{
strMinute=strLyric.Mid(1,2);
strScend=strLyric.Mid(strLyric.Find(L"
)+1,strLyric.Find(L"
)-strLyric.Find(L"
)-1);
m_Lyrics[m_iTimeCount].nTime=(long)((_wtof(strMinute))*60*1000+(_wtof(strScend))*1000+m_nOffset);
m_iTimeCount++;
[ti"
m_sTitle=strLyric.Mid(strLyric.Find(L"
[al"
m_sAL=strLyric.Mid(strLyric.Find(L"
[ar"
m_sAuthor=strLyric.Mid(strLyric.Find(L"
[by"
m_sBY=strLyric.Mid(strLyric.Find(L"
[offset:
m_nOffset=(long)_wtof(strLyric.Mid(strLyric.Find(L"
)-1));
3.2.2桌面歌词秀秀的实现
3.2.2.1桌面歌词秀设计结构图
图3-3桌面歌词秀结构图
3.1.2.2桌面歌词秀代码具体实现
桌面歌词秀主要是为了满足用户在进行其他操作时,也能同时进行歌词的观赏而设计的。
为了实现这个功能,桌面歌词秀的显示窗体就必须透明的,且总要在桌面的最上层,以免被其他应用程序覆盖。
所以创建桌面歌词的首要任务是要实现一个透明窗口。
实现窗口透明其实就是设置窗口的属性为扩展属性WS_EX_LAYERED,这样我们就创建了一个分层窗口实现了窗口透明。
以下是实现窗口透明的代码实现:
voidCLyricWindow:
AchieveTranWnd()
DWORDdwExStyle=:
GetWindowLongW(m_hWnd,GWL_EXSTYLE);
if((dwExStyle&
WS_EX_LAYERED)!
=WS_EX_LAYERED)
:
SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^WS_EX_LAYERED);
CRectrc;
:
GetClientRect(:
GetDesktopWindow(),&
rc);
//获得桌面窗口大小
SetWindowPos(m_hWnd,HWND_TOPMOST,rc.left+300,rc.bottom-100,800,200,SWP_NOSIZE|SW
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DirectShow 技术 音频 播放 设计