一款音频播放软件设计文档,欢迎提出宝贵
http://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 CStreamedInput CFileIn 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頻譜模塊設計表
| 模塊名稱 | 頻譜模塊 |
| 功能描述 | 頻譜分析,實現各種視覺效果。 |
| 接口與屬性 | 類名:CSpectrumAnalyser //頻譜分析類 繪制頻譜 Constructor: CSpectrumAnalyser(CBasicPlayer* pPlayer); ~CSpectrumAnalyser(void); Main Method: void drawSpectrumAnalyserBar(RECT* pRect, int pX, int pY, int pWidth, int pHeight, int band); //繪制頻譜柱 void prepare(); //初始化 void Start(); //開始繪制 void Stop(); //停止繪制 char* GetAudioDataBuffer(); INT GetPosition(); void SetPosition(INT pPosition) ; DWORD GetAudioDataBufferLength(); void SetAudioDataBufferLength(DWORD pAudioDataBufferLength) ; |
| 算法與原理 | 對pcm數據執行FFT算法,根據視覺效果類型進行排序渲染繪制。 視覺效果實現原理:傅立葉變換是眾多數學變化中應用最廣泛的一種,其實質是將一個周期函數分解成一系列正交函數的(比如sin和cos函數)的線性集合。快速傅里葉變換將時域中難以處理的信號轉換成易于處理的頻域信號。通過把解碼后的PCM數據流進行實時FFT,對處理后的頻域信號進行分組排序等算法,根據要實現的視覺效果進行相關繪制即可。 |
| 補充說明 | 無 |
4.3.2.3播放模塊A-3
表4-5播放模塊設計表
| 模塊名稱 | 播放模塊 |
| 功能描述 | 播放,暫停等,并協調處理解碼模塊和頻譜模塊的相關操作。 |
| 接口與屬性 | 類名:CBasicPlayer Constructor: CBasicPlayer(HWND hWnd, TCHAR* pszFileName); ~CBasicPlayer(void); Main Method: DWORD GetSoundLength(); DWORD GetCurrentPosition(); void SetVolume(int iVolume); int GetVolume(); void SetCurrentPosition(int pos); DWORD GetBufferSize() void SetBufferSize(DWORD pBufferSize) FLOAT GetSampleRate() void SetSampleRate(FLOAT pSampleRate) WORD GetFrameSize() void SetFrameSize(WORD pFrameSize) WORD GetBitsPerSample() void SetBitsPerSample(WORD pBitsPerSample) WORD GetChannels() void SetChannels(WORD pChannels) CPlayThread* GetPlayThread() DS_Info* GetDSInfo() long GetBytePosition() void Start(); void Stop(); void Pause(); __int64 GetLongFramePosition(); |
| 算法與原理 | 均衡器實現原理[4]:均衡器的作用就是調節不同頻率的信號的強度。聲音作為一種波具有三個要素:幅度,頻率,相位。其中幅度決定了聲音的大小,頻率決定了聲音音調的高低。實際的聲音往往都不是單一頻率的波,而是有各種頻率的波疊加而成,從而形成了各具特色的聲音。y = Asin(wt+fi)+A0 (單頻率聲波描述) (2-1)y = A1sin(w1t+fi1) + A2sin(w2t+fi2) + .(實際的聲波描述) (2-2)聲音的不同就在于不同頻率的聲信號具有不同的強度。而均衡器就是根據這個原理來實現的。均衡器能自動分離不同頻率的信號,并采取不同程度的放大或縮小,從而改變聲音的效果。具體來說,均衡器一般把人能聽到的頻段范圍(20Hz-20KHz)分為多個頻段,對不同頻段的聲信號進行不同程度的放大或縮小(增益或負增益)。對處理后PCM數據流用DirectSound把數據放到音頻設備上即可。 |
| 補充說明 | 無 |
4.3.2.4界面模塊A-4
表4-6界面模塊設計表
| 模塊名稱 | 界面模塊 |
| 功能描述 | 毛玻璃界面實現,并負責界面主題的更換,是其他窗口類的基類。 |
| 接口與屬性 | 略 |
| 算法與原理 | 主界面實現原理[2]: 我們創建兩個對話框,一個(標準對話框)負責處理用戶輸入事件和窗口消息,另一個(透明對話框)負責界面展示。 透明對話框創建通過CreateWindowEx,并賦予WS_EX_LAYERED, WS_EX_TRANSPARENT and WS_EX_NOACTIVATE屬性。而且與真實對話框保持大小和位置的一致。標準對話框用過函數SetLayeredWindowAttributes設置完全的透明。 圖4-7 界面窗體層次圖 兩層窗體位置大小同步原理: 上層窗體通過OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)設置拉伸鼠標形狀,通過OnNcLButtonDown(UINT nHitTest, CPoint point)和OnNcHitTest(CPoint point)檢測鼠標非客戶區(遍體欄和邊框)的點擊,通過OnSize(UINT nType, int cx, int cy)改變窗口大小。 |
| 補充說明 | 無 |
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歌詞模塊設計表
| 模塊名稱 | 歌詞模塊 |
| 功能描述 | 歌詞顯示和功能實現。 |
| 接口與屬性 | 類名:CLyricDlg CLyricDlg CDialog public: CString SearchLyricLocal(); //歌詞本地搜索 bool OpenLyric(); //打開歌詞文件 void GetLyric(CString strFileName); //分析歌詞 void AnalyseLine(CString strLine); //分析一行 void SortLyric(); //行排序 void DrawText(CDC *pDC); //歌詞繪制 void OnSliderSeek(int soundPos); //滑動條歌詞定位 |
| 算法與原理 | 歌詞走馬燈效果實現:使用雙層窗體,對這兩層窗體通過進行GDI+繪制與和png圖片融合,實現歌詞走馬燈效果。 |
| 補充說明 | 無 |
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) 下載界面的功能與操作:
包括開始播放,開始任務,暫停任務,上一道頂部,下移到底部,打開文件夾,從硬盤上刪除。
轉載于:https://www.cnblogs.com/ququer/articles/2131401.html
總結
以上是生活随笔為你收集整理的一款音频播放软件设计文档,欢迎提出宝贵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抽象代数之拉格朗日定理的证明
- 下一篇: SketchUppro 2021 已支持