一款音频播放软件设计文档,欢迎提出宝贵
https://files.cnblogs.com/ququer/TWGPlayer.rar
3 系统分析
3.1系统概述
3.1.1概述
本系统是一款音频播放软件,尽量能播放各种常用的音乐格式,它要有漂亮的可定制的界面,高效的性能,简单的操作,绚丽的效果,能带用户进入一个完美的音乐空间。它是一款集播放、音效、歌词等多种功能于一身的音频播放软件。拥有自主研发的音频引擎,使用DirectSound,具有资源占用低、运行效率高、扩展能力强等优点。支持MP3/mp3PRO、AAC/AAC+、M4A/MP4、WMA、OGG、WAVE等音频格式。支持同步歌词滚动显示和拖动定位播放,并且支持在线歌词搜索和歌词编辑功能。支持多播放列表,支持多种视觉效果,同时具有水晶界面、磁性窗口、半透明/淡入淡出窗口、窗口阴影、任务栏图标、自定义快捷键、信息滚动、菜单功能提示等功能。
3.2需求分析
3.2.1播放功能
3.2.1.1音频:
能解码播放各种常见格式的本地音频文件,如mp3、AAC、AAC+、WMA、WAV、OGG等。并提供扩展功能,使用DirectSound加速播放,支持对各种格式的音频的转换。
3.2.1.2均衡器:
10波段均衡器,多级杜比环绕,常见音效的设置。
3.2.1.3播放列表:
列表插删改,文件插删改,添加文件夹,添加文件,本地搜索,删除(全部删除,错误文件删除,物理删除),排序(按标题、文件名、专辑名、文件长度、随机等),查找(定位,查找歌曲),编辑(剪贴复制粘贴,移动到列表,复制到列表,全选,不选,反选),模式(单曲,单曲循环,顺序,循环,随机),文件属性。
3.2.1.4在线播放功能:
提供正在下载播放,广播收听。
3.2.1.5播放:
播放,暂停,停止,上一首,下一首,静音,音量调节,播放位置调整。
3.2.2界面功能
3.2.2.1视觉效果:
频谱分析,示波显示,梦幻星空,专辑封面,全屏显示。
3.2.2.2界面效果:
音频信息的滚动显示,当前播放时间,滚动轴效果。
3.2.2.3皮肤主题:
换肤功能(背景更换,配色更换,主界面透明[毛玻璃])。
3.2.2.4歌词走马灯效果:
底纹(纹理),阴影,歌词手动调节,歌词编辑,歌谱下载,歌词下载,字体设置,主题设置。
3.2.3下载功能
3.2.3.1歌曲下载管理:
多线程下载,下载进度,下载速度,暂停,开始。
3.2.3.2音乐窗体:
提供在线音乐,在线广播。
3.2.3.3歌词下载:
歌词搜索,文件关联。
3.2.4其他功能
3.2.4.1快捷键:
快捷键设置。
3.2.4.2播放器设置窗口:
各种设置。
3.3系统设计约束
3.3.1需求约束
3.3.1.1规则约束
本系统的编码应遵循匈牙利标记法命名[1],开发流程应符合软件开发中的各种约束[1]。
3.3.1.2环境约束
表3-1开发环境约束
类别 |
标准配置 |
最低配置 |
计算机硬件 |
2G内存,320G硬盘 |
内存128M,硬盘80G |
软件 |
Win7,winxp3,VS2008 |
win2000以上 |
网络通信 |
0.5M带宽 |
无 |
其它 |
无 |
无 |
表3-2运行环境约束
类别 |
标准配置 |
最低配置 |
计算机硬件 |
2G内存,320G硬盘 |
内存128M,硬盘80G |
软件 |
Win7,winxp3,win2000 |
win2000以上 |
网络通信 |
0.5M带宽 |
无 |
其它 |
无 |
无 |
3.3.1.3软件质量的约束
(1) 健壮性约束:
能对数据文件(列表、皮肤xml、用户自定义数据等)的错误进行识别和自我修复。
(2) 兼容性约束:
能在常用xp和win7下实现所有功能。
(3)效率(性能)约束:
常驻内存级别要求,内存<=25M,磁盘<=15M,性能要求为高性能。
(4)可维护性约束:
软件架构应具有更好的扩展性,代码优化要求高。
(5)可测试性约束:
能对类,函数,模块的接口编写先行测试。
(6)编码约束:
名字、注释、代码格式的一致性,类接口约定的一致性,处理基本错误条件。
(7)易用性约束:
软件具有人性化界面设计,简单易用。
(8)可扩展性约束:
软件应该具有可扩展性:如音频解码格式的扩展,软件定制信息扩展等。
(9)安全性约束:
软件应安全运行,不能修改破坏用户系统,并对自身安全提供保护(如火种注入、单模块文件恢复等策略)。
3.3.2隐含约束
3.3.2.1用户受教育程度约束:
假设一般用户受教育程度为初中以上水平。
3.3.2.2用户计算机技能约束:
假设一般用户计算机技能比较低,只会使用操作简单的软件。
3.3.2.3用户计算机软件硬件约束:
请参看环境约束。
4 系统设计
4.1设计策略
4.1.1扩展策略
(1) 为了方便音频解码格式的扩展,本系统对音频解码模块采用多态策略。
(2) 对以后可能添加的各种视觉效果提供渲染接口。
(3) 设计易于扩展的主题模块和设置模块。
(4) 为web页面提供更多接口,使web站点更易扩展。
4.1.2复用策略
(1) 关于界面引擎考虑到代码复用。
(2) 对各种控件自绘基类考虑封装,使之有利于代码复用。
(3) 对于一些下载模块,解码模块和频谱模块等进行封装,有些作为dll单独编译,可用于以后代码的复用。
4.2总体设计
4.2.1总体架构
4.2.1.1架构规格书
表4-1 架构规格书
构造块 |
责任 |
负责需求 |
实现方法(简述) |
可用那个模块 |
通信规则 |
解码模块 |
音频解码,实现对各种音频文件的解码播放。 |
3.2.1.1 |
文件解码(可用mpg12或公开解码库实现)播放用DirectSound处理。 |
无 |
无 |
频谱模块 |
频谱分析,实现各种视觉效果。 |
3.2.2.1 |
FFT,gdi绘图等。 |
无 |
无 |
播放模块 |
播放,暂停等,并协调处理解码模块和频谱模块的相关操作。 |
3.2.1.5 |
可用事件,多线程,线程同步等实现。 |
解码模块,频谱模块。 |
has-a解码模块。 has-a频谱模块。 |
界面模块 |
毛玻璃界面实现,并负责界面主题的更换,是其他窗口类的基类。 |
3.2.2.2 |
毛玻璃效果实现。 |
播放模块,主题模块,列表模块,Http下载模块。 |
has--a播放模块。 has-a主题模块。 has-a列表模块。 has-a Http下载模块。 |
主题模块 |
界面主题包的管理。 |
3.2.2.3 |
无 |
无 |
|
Xml模块 |
Xml文件的管理,对所有数据的读取处理工作。 |
无 |
用开源xml管理库。 |
无 |
无 |
列表模块 |
列表管理,列表文件的管理。 |
3.2.1.3 |
用相关高效容器实现。 |
无 |
无 |
歌词模块 |
歌词显示和功能实现。 |
3.2.2.4 |
走马灯效果,双层窗体实现。 |
主题模块。 |
like-a主题模块。 |
Web模块 |
浏览器的接口实现。 |
3.2.3.2 |
CDHtmlDialog接口处理。 |
无 |
无 |
Http下载模块 |
下载,缓冲区的管理。 |
3.2.3.1 3.2.3.3 |
WinSock编程实现,多线程下载。 |
无 |
无 |
设置模块 |
各种用户设置支持。 |
3.2.4 |
略 |
Xml模块。 |
has -a Xml模块。 |
4.2.1.2模块逻辑架构图
图4-1 模块逻辑架构图
4.2.1.3架构规格书说明
(1)分解方法:根据各有关需求,结合所使用的MFC框架,设计以上相应模块。
(2)子系统的协调:通过各有关对象实例协调处理用户消息,实现相应功能。
4.2.2系统架构
4.2.2.1播放模块架构图:
图4-2 播放模块架构图
4.2.2.2解码模块架构图:
图4-3 解码模块架构图
4.2.2.3界面模块架构图
图4-4 界面模块架构图
4.2.2.4歌词模块架构图
图4-5 歌词模块架构图
4.3详细设计
4.3.1模块汇总表
表4-2模块汇总表
系统A:音频播放器 |
|
模块名称 |
功能简述 |
1.解码模块 |
音频解码,实现对音频文件的解码播放。 |
2.频谱模块 |
频谱分析,实现各种视觉效果。 |
3.播放模块 |
播放,暂停等,并协调处理解码模块和频谱模块的相关操作。 |
4.界面模块 |
毛玻璃界面实现,并负责界面主题的更换,是其他窗口类的基类。 |
5.主题模块 |
界面主题包的管理。 |
6.Xml模块 |
Xml文件的管理,对所有数据的读取处理工作。 |
7.列表模块 |
列表管理,列表文件的管理。 |
8.歌词模块 |
歌词显示和功能实现。 |
9.Web模块 |
浏览器的接口实现。 |
10.Http下载模块 |
下载,缓冲区的管理。 |
11.设置模块 |
各种用户设置支持。 |
4.3.2模块设计表
4.3.2.1解码模块A-1
表4-3解码模块设计表
模块名称 |
解码模块 |
功能描述 |
音频解码,实现对音频文件的解码播放。 |
接口与属性 |
(1) 继承关系图: 图4-6 解码模块继承关系图 (2) 类名:CInput Main Method: virtual void Pause();//暂停读取 virtual void Resume();//重新读取文件 virtual DWORD GetTotalTime();//获取音频文件 virtual LARGE_INTEGER GetTotalSamples();//获取总样本数 virtual WORD GetBitsPerSample() = 0;//获取量化位数 virtual WORD GetChannels() = 0;//获取声道数 virtual DWORD GetSampleRate() = 0;//获取采样频率 virtual DWORD GetCurrentPlayPos() = 0;//获取当前播放位置 LARGE_INTEGER GetSize();//获取文件大小 LARGE_INTEGER GetPosition(); void GetData(void** buffer, DWORD* size);//获取size位置的缓冲区指针,buffer返回 DWORD CopyData(void* buffer, DWORD size);//复制size位置的缓冲区数据到buffer DWORD FillBuffer(void* buffer, DWORD size, BOOL* eof);//复制填充buffer,eof返回是否成功 void Init(); void Flush(); (3) 类名:CFileIn CInput Constructor: CFileIn(void); virtual ~CFileIn(void); Main Method: virtual void OpenFile() = 0;//打开一个文件 virtual void CloseFile() = 0;//关闭一个文件 virtual void GetSoundInformation(char *title, char *artist, char *album, char *year, char *comments) = 0;//读取音频数据信息 void SetFileName(TCHAR* pszFileName);//设置文件名 size_t GetFileNameLen();//获取文件长度 WORD GetBitsPerSample(); DWORD GetSampleRate(); WORD GetChannels(); INT GetOpened();//获取打开状态 LARGE_INTEGER GetTotalSamples(); DWORD GetTotalTime(); BOOL SetStartTime(DWORD Minutes, DWORD Seconds); BOOL SetEndTime(DWORD Minutes, DWORD Seconds); void Reset(); void Jump(INT offset); |
算法与原理 |
内部实现使用相关解码库解码成pcm数据[3]。 |
补充说明 |
无 |
4.3.2.2频谱模块A-2
表4-4频谱模块设计表
4.3.2.3播放模块A-3
表4-5播放模块设计表
4.3.2.4界面模块A-4
表4-6界面模块设计表
4.3.2.5主题模块A-5
表4-7主题模块设计表
模块名称 |
主题模块 |
功能描述 |
界面主题包的管理。 |
接口与属性 |
略 |
算法与原理 |
对每个主题使用xml组织页面控件位置大小,实现切换。 |
补充说明 |
无 |
4.3.2.6 XML模块A-6
表4-8 XML模块设计表
模块名称 |
Xml模块 |
功能描述 |
Xml文件的管理,对所有数据的读取处理工作。 |
接口与属性 |
略 |
算法与原理 |
用Markup实现xml的存取,对系统配置变量进行校验管理。 |
补充说明 |
无 |
4.3.2.7模块A-7
表4-9列表模块设计表
模块名称 |
列表模块 |
功能描述 |
列表管理,列表文件的管理。 |
接口与属性 |
略 |
算法与原理 |
用相关高效容器实现。 |
补充说明 |
无 |
4.3.2.8模块A-8
表4-10歌词模块设计表
4.3.2.9模块A-9
表4-11 Web模块设计表
模块名称 |
Web模块 |
功能描述 |
浏览器的接口实现。 |
接口与属性 |
类名:CPageWeb Main Method: void WebGoBack(); void WebGoGoForward(); void WebRefresh(); void OnButtonAddOneSound(VARIANT& cSUrl, VARIANT& cSA, VARIANT& cSName, bool bIsFresh=true); void AfterAddedRefresh(); bool _IsSoundDownLoad(CString SoundName,CString SoundPath);//接口暴露 BEGIN_DISPATCH_MAP(CPageWeb, CDHtmlDialog) DISP_FUNCTION(CPageWeb, "OnButtonAddOneSound", OnButtonAddOneSound, VT_EMPTY, VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_I1) DISP_FUNCTION(CPageWeb, "AfterAddedRefresh", AfterAddedRefresh, VT_EMPTY,VTS_NONE) END_DISPATCH_MAP() |
算法与原理 |
用CDhtmlDialog给web页面暴露接口函数实现c++与javescript的交互。 |
补充说明 |
无 |
4.3.2.10模块A-10
表4-12 Http下载模块设计表
模块名称 |
Http下载模块 |
功能描述 |
下载,缓冲区的管理 |
接口与属性 |
类名:CHttpSocket Constructor: CHttpSocket(); virtual ~CHttpSocket(); Main Method: CHttpSocket(); virtual ~CHttpSocket(); int GetServerState();//返回服务器状态码-1表示不成功 int GetField(const char* szSession,char *szValue,int nMaxLength); //返回某个域值,-1表示不成功 int GetResponseLine(char *pLine,int nMaxLength);//获取返回头的一行 const char* GetResponseHeader(int &Length); //获取完整的返回头 const char * FormatRequestHeader(char *pServer, char *pObject,long &Length,char* pCookie=NULL, char *pReferer=NULL,long nFrom=0,long nTo=0, int nServerType=0); //格式化请求头 int GetRequestHeader(char *pHeader,int nMaxLength) const; BOOL SendRequest(const char* pRequestHeader = NULL,long Length = 0); BOOL SetTimeout(int nTime,int nType=0); long Receive(char* pBuffer,long nMaxLength); BOOL Connect(char* szHostName,int nPort=80); BOOL Socket(); BOOL CloseSocket(); |
算法与原理 |
WinSock多线程下载实现 |
补充说明 |
无 |
4.3.2.11模块A-11
表4-13设置模块设计表
模块名称 |
设置模块 |
功能描述 |
各种用户设置支持 |
接口与属性 |
类名:CPropertyMainDlg Constructor: CPropertyMainDlg(CWnd* pParent = NULL); ~CPropertyMainDlg(); private: vector<pageStruct *> m_pages; int m_iCurPage; CRect m_frameRect; CString m_csConstantText; Main Method: void Init(); bool AddPage(CPropertySubDlg *page, const char *pCaption); void ShowPage(int iPage); |
算法与原理 |
略 |
补充说明 |
无 |
4.3.3界面详细设计
4.3.3.1应当遵循的界面设计规范
(1) 操作的简单性。
(2) 界面的一致性。
(3) 组织的合适性。
(4) 操作的灵活性。
4.3.3.2界面的关系图和工作流程图
4.3.3.3主界面设计
(1) 绘制子主界面的视图:
图4-8 主界面设计
(2) 主界面和整体界面的显示效果:
图4-9 主界面显示效果
图4-10 主界面去列表显示效果
图4-11 界面整体显示效果
(3) 主界面的功能与操作:
主要功能和操作:鼠标移至窗口即显示相关按钮,包括上一首,下一首,播放,暂停,停止,关闭,最小化,打开歌词,打开音乐窗,打开均衡器,打开歌曲列表,打开歌曲文件,声音调整,选时播放。
4.3.3.4 设置界面设计
(1) 设置界面显示效果:
图4-12 界面整体显示效果
(2) 设置界面的功能与操作:
可以设置各种属性项
4.3.3.5 下载管理界面设计
(1) 绘制下载管理弹出菜单视图:
图4-13 下载菜单设计
(2) 下载界面的显示效果:
图4-14 下载显示效果
(3) 下载界面的功能与操作:
包括开始播放,开始任务,暂停任务,上一道顶部,下移到底部,打开文件夹,从硬盘上删除。