一款音频播放软件设计文档,欢迎提出宝贵
http://files.cnblogs.com/ququer/TWGPlayer.rar
3 系統(tǒng)分析
3.1系統(tǒng)概述
3.1.1概述
本系統(tǒng)是一款音頻播放軟件,盡量能播放各種常用的音樂格式,它要有漂亮的可定制的界面,高效的性能,簡(jiǎn)單的操作,絢麗的效果,能帶用戶進(jìn)入一個(gè)完美的音樂空間。它是一款集播放、音效、歌詞等多種功能于一身的音頻播放軟件。擁有自主研發(fā)的音頻引擎,使用DirectSound,具有資源占用低、運(yùn)行效率高、擴(kuò)展能力強(qiáng)等優(yōu)點(diǎn)。支持MP3/mp3PRO、AAC/AAC+、M4A/MP4、WMA、OGG、WAVE等音頻格式。支持同步歌詞滾動(dòng)顯示和拖動(dòng)定位播放,并且支持在線歌詞搜索和歌詞編輯功能。支持多播放列表,支持多種視覺效果,同時(shí)具有水晶界面、磁性窗口、半透明/淡入淡出窗口、窗口陰影、任務(wù)欄圖標(biāo)、自定義快捷鍵、信息滾動(dòng)、菜單功能提示等功能。
3.2需求分析
3.2.1播放功能
3.2.1.1音頻:
能解碼播放各種常見格式的本地音頻文件,如mp3、AAC、AAC+、WMA、WAV、OGG等。并提供擴(kuò)展功能,使用DirectSound加速播放,支持對(duì)各種格式的音頻的轉(zhuǎn)換。
3.2.1.2均衡器:
10波段均衡器,多級(jí)杜比環(huán)繞,常見音效的設(shè)置。
3.2.1.3播放列表:
列表插刪改,文件插刪改,添加文件夾,添加文件,本地搜索,刪除(全部刪除,錯(cuò)誤文件刪除,物理刪除),排序(按標(biāo)題、文件名、專輯名、文件長(zhǎng)度、隨機(jī)等),查找(定位,查找歌曲),編輯(剪貼復(fù)制粘貼,移動(dòng)到列表,復(fù)制到列表,全選,不選,反選),模式(單曲,單曲循環(huán),順序,循環(huán),隨機(jī)),文件屬性。
3.2.1.4在線播放功能:
提供正在下載播放,廣播收聽。
3.2.1.5播放:
播放,暫停,停止,上一首,下一首,靜音,音量調(diào)節(jié),播放位置調(diào)整。
3.2.2界面功能
3.2.2.1視覺效果:
頻譜分析,示波顯示,夢(mèng)幻星空,專輯封面,全屏顯示。
3.2.2.2界面效果:
音頻信息的滾動(dòng)顯示,當(dāng)前播放時(shí)間,滾動(dòng)軸效果。
3.2.2.3皮膚主題:
換膚功能(背景更換,配色更換,主界面透明[毛玻璃])。
3.2.2.4歌詞走馬燈效果:
底紋(紋理),陰影,歌詞手動(dòng)調(diào)節(jié),歌詞編輯,歌譜下載,歌詞下載,字體設(shè)置,主題設(shè)置。
3.2.3下載功能
3.2.3.1歌曲下載管理:
多線程下載,下載進(jìn)度,下載速度,暫停,開始。
3.2.3.2音樂窗體:
提供在線音樂,在線廣播。
3.2.3.3歌詞下載:
歌詞搜索,文件關(guān)聯(lián)。
3.2.4其他功能
3.2.4.1快捷鍵:
快捷鍵設(shè)置。
3.2.4.2播放器設(shè)置窗口:
各種設(shè)置。
3.3系統(tǒng)設(shè)計(jì)約束
3.3.1需求約束
3.3.1.1規(guī)則約束
本系統(tǒng)的編碼應(yīng)遵循匈牙利標(biāo)記法命名[1],開發(fā)流程應(yīng)符合軟件開發(fā)中的各種約束[1]。
3.3.1.2環(huán)境約束
表3-1開發(fā)環(huán)境約束
| 類別 | 標(biāo)準(zhǔn)配置 | 最低配置 |
| 計(jì)算機(jī)硬件 | 2G內(nèi)存,320G硬盤 | 內(nèi)存128M,硬盤80G |
| 軟件 | Win7,winxp3,VS2008 | win2000以上 |
| 網(wǎng)絡(luò)通信 | 0.5M帶寬 | 無(wú) |
| 其它 | 無(wú) | 無(wú) |
表3-2運(yùn)行環(huán)境約束
| 類別 | 標(biāo)準(zhǔn)配置 | 最低配置 |
| 計(jì)算機(jī)硬件 | 2G內(nèi)存,320G硬盤 | 內(nèi)存128M,硬盤80G |
| 軟件 | Win7,winxp3,win2000 | win2000以上 |
| 網(wǎng)絡(luò)通信 | 0.5M帶寬 | 無(wú) |
| 其它 | 無(wú) | 無(wú) |
3.3.1.3軟件質(zhì)量的約束
(1) 健壯性約束:
能對(duì)數(shù)據(jù)文件(列表、皮膚xml、用戶自定義數(shù)據(jù)等)的錯(cuò)誤進(jìn)行識(shí)別和自我修復(fù)。
(2) 兼容性約束:
能在常用xp和win7下實(shí)現(xiàn)所有功能。
(3)效率(性能)約束:
常駐內(nèi)存級(jí)別要求,內(nèi)存<=25M,磁盤<=15M,性能要求為高性能。
(4)可維護(hù)性約束:
軟件架構(gòu)應(yīng)具有更好的擴(kuò)展性,代碼優(yōu)化要求高。
(5)可測(cè)試性約束:
能對(duì)類,函數(shù),模塊的接口編寫先行測(cè)試。
(6)編碼約束:
名字、注釋、代碼格式的一致性,類接口約定的一致性,處理基本錯(cuò)誤條件。
(7)易用性約束:
軟件具有人性化界面設(shè)計(jì),簡(jiǎn)單易用。
(8)可擴(kuò)展性約束:
軟件應(yīng)該具有可擴(kuò)展性:如音頻解碼格式的擴(kuò)展,軟件定制信息擴(kuò)展等。
(9)安全性約束:
軟件應(yīng)安全運(yùn)行,不能修改破壞用戶系統(tǒng),并對(duì)自身安全提供保護(hù)(如火種注入、單模塊文件恢復(fù)等策略)。
3.3.2隱含約束
3.3.2.1用戶受教育程度約束:
假設(shè)一般用戶受教育程度為初中以上水平。
3.3.2.2用戶計(jì)算機(jī)技能約束:
假設(shè)一般用戶計(jì)算機(jī)技能比較低,只會(huì)使用操作簡(jiǎn)單的軟件。
3.3.2.3用戶計(jì)算機(jī)軟件硬件約束:
請(qǐng)參看環(huán)境約束。
4 系統(tǒng)設(shè)計(jì)
4.1設(shè)計(jì)策略
4.1.1擴(kuò)展策略
(1) 為了方便音頻解碼格式的擴(kuò)展,本系統(tǒng)對(duì)音頻解碼模塊采用多態(tài)策略。
(2) 對(duì)以后可能添加的各種視覺效果提供渲染接口。
(3) 設(shè)計(jì)易于擴(kuò)展的主題模塊和設(shè)置模塊。
(4) 為web頁(yè)面提供更多接口,使web站點(diǎn)更易擴(kuò)展。
4.1.2復(fù)用策略
(1) 關(guān)于界面引擎考慮到代碼復(fù)用。
(2) 對(duì)各種控件自繪基類考慮封裝,使之有利于代碼復(fù)用。
(3) 對(duì)于一些下載模塊,解碼模塊和頻譜模塊等進(jìn)行封裝,有些作為dll單獨(dú)編譯,可用于以后代碼的復(fù)用。
4.2總體設(shè)計(jì)
4.2.1總體架構(gòu)
4.2.1.1架構(gòu)規(guī)格書
表4-1 架構(gòu)規(guī)格書
| 構(gòu)造塊 | 責(zé)任 | 負(fù)責(zé)需求 | 實(shí)現(xiàn)方法(簡(jiǎn)述) | 可用那個(gè)模塊 | 通信規(guī)則 |
| 解碼模塊 | 音頻解碼,實(shí)現(xiàn)對(duì)各種音頻文件的解碼播放。 | 3.2.1.1 | 文件解碼(可用mpg12或公開解碼庫(kù)實(shí)現(xiàn))播放用DirectSound處理。 | 無(wú) | 無(wú) |
| 頻譜模塊 | 頻譜分析,實(shí)現(xiàn)各種視覺效果。 | 3.2.2.1 | FFT,gdi繪圖等。 | 無(wú) | 無(wú) |
| 播放模塊 | 播放,暫停等,并協(xié)調(diào)處理解碼模塊和頻譜模塊的相關(guān)操作。 | 3.2.1.5 | 可用事件,多線程,線程同步等實(shí)現(xiàn)。 | 解碼模塊,頻譜模塊。 | has-a解碼模塊。 has-a頻譜模塊。 |
| 界面模塊 | 毛玻璃界面實(shí)現(xiàn),并負(fù)責(zé)界面主題的更換,是其他窗口類的基類。 | 3.2.2.2 | 毛玻璃效果實(shí)現(xiàn)。 | 播放模塊,主題模塊,列表模塊,Http下載模塊。 | has--a播放模塊。 has-a主題模塊。 has-a列表模塊。 has-a Http下載模塊。 |
| 主題模塊 | 界面主題包的管理。 | 3.2.2.3 | ? | 無(wú) | 無(wú) |
| Xml模塊 | Xml文件的管理,對(duì)所有數(shù)據(jù)的讀取處理工作。 | 無(wú) | 用開源xml管理庫(kù)。 | 無(wú) | 無(wú) |
| 列表模塊 | 列表管理,列表文件的管理。 | 3.2.1.3 | 用相關(guān)高效容器實(shí)現(xiàn)。 | 無(wú) | 無(wú) |
| 歌詞模塊 | 歌詞顯示和功能實(shí)現(xiàn)。 | 3.2.2.4 | 走馬燈效果,雙層窗體實(shí)現(xiàn)。 | 主題模塊。 | like-a主題模塊。 |
| Web模塊 | 瀏覽器的接口實(shí)現(xiàn)。 | 3.2.3.2 | CDHtmlDialog接口處理。 | 無(wú) | 無(wú) |
| Http下載模塊 | 下載,緩沖區(qū)的管理。 | 3.2.3.1 3.2.3.3 | WinSock編程實(shí)現(xiàn),多線程下載。 | 無(wú) | 無(wú) |
| 設(shè)置模塊 | 各種用戶設(shè)置支持。 | 3.2.4 | 略 | Xml模塊。 | has -a Xml模塊。 |
4.2.1.2模塊邏輯架構(gòu)圖
圖4-1 模塊邏輯架構(gòu)圖
4.2.1.3架構(gòu)規(guī)格書說(shuō)明
(1)分解方法:根據(jù)各有關(guān)需求,結(jié)合所使用的MFC框架,設(shè)計(jì)以上相應(yīng)模塊。
(2)子系統(tǒng)的協(xié)調(diào):通過各有關(guān)對(duì)象實(shí)例協(xié)調(diào)處理用戶消息,實(shí)現(xiàn)相應(yīng)功能。
4.2.2系統(tǒng)架構(gòu)
4.2.2.1播放模塊架構(gòu)圖:
圖4-2 播放模塊架構(gòu)圖
4.2.2.2解碼模塊架構(gòu)圖:
圖4-3 解碼模塊架構(gòu)圖
4.2.2.3界面模塊架構(gòu)圖
圖4-4 界面模塊架構(gòu)圖
4.2.2.4歌詞模塊架構(gòu)圖
圖4-5 歌詞模塊架構(gòu)圖
4.3詳細(xì)設(shè)計(jì)
4.3.1模塊匯總表
表4-2模塊匯總表
| 系統(tǒng)A:音頻播放器 | |
| 模塊名稱 | 功能簡(jiǎn)述 |
| 1.解碼模塊 | 音頻解碼,實(shí)現(xiàn)對(duì)音頻文件的解碼播放。 |
| 2.頻譜模塊 | 頻譜分析,實(shí)現(xiàn)各種視覺效果。 |
| 3.播放模塊 | 播放,暫停等,并協(xié)調(diào)處理解碼模塊和頻譜模塊的相關(guān)操作。 |
| 4.界面模塊 | 毛玻璃界面實(shí)現(xiàn),并負(fù)責(zé)界面主題的更換,是其他窗口類的基類。 |
| 5.主題模塊 | 界面主題包的管理。 |
| 6.Xml模塊 | Xml文件的管理,對(duì)所有數(shù)據(jù)的讀取處理工作。 |
| 7.列表模塊 | 列表管理,列表文件的管理。 |
| 8.歌詞模塊 | 歌詞顯示和功能實(shí)現(xiàn)。 |
| 9.Web模塊 | 瀏覽器的接口實(shí)現(xiàn)。 |
| 10.Http下載模塊 | 下載,緩沖區(qū)的管理。 |
| 11.設(shè)置模塊 | 各種用戶設(shè)置支持。 |
4.3.2模塊設(shè)計(jì)表
4.3.2.1解碼模塊A-1
表4-3解碼模塊設(shè)計(jì)表
| 模塊名稱 | 解碼模塊 |
| 功能描述 | 音頻解碼,實(shí)現(xiàn)對(duì)音頻文件的解碼播放。 |
| 接口與屬性 | (1) 繼承關(guān)系圖: 圖4-6 解碼模塊繼承關(guān)系圖 (2) 類名:CInput Main Method: virtual void Pause();//暫停讀取 virtual void Resume();//重新讀取文件 virtual DWORD GetTotalTime();//獲取音頻文件 virtual LARGE_INTEGER GetTotalSamples();//獲取總樣本數(shù) virtual WORD GetBitsPerSample() = 0;//獲取量化位數(shù) virtual WORD GetChannels() = 0;//獲取聲道數(shù) virtual DWORD GetSampleRate() = 0;//獲取采樣頻率 virtual DWORD GetCurrentPlayPos() = 0;//獲取當(dāng)前播放位置 LARGE_INTEGER GetSize();//獲取文件大小 LARGE_INTEGER GetPosition(); void GetData(void** buffer, DWORD* size);//獲取size位置的緩沖區(qū)指針,buffer返回 DWORD CopyData(void* buffer, DWORD size);//復(fù)制size位置的緩沖區(qū)數(shù)據(jù)到buffer DWORD FillBuffer(void* buffer, DWORD size, BOOL* eof);//復(fù)制填充buffer,eof返回是否成功 void Init(); void Flush(); (3) 類名:CFileIn CInput CStreamedInput CFileIn Constructor: CFileIn(void); virtual ~CFileIn(void); Main Method: virtual void OpenFile() = 0;//打開一個(gè)文件 virtual void CloseFile() = 0;//關(guān)閉一個(gè)文件 virtual void GetSoundInformation(char *title, char *artist, char *album, char *year, char *comments) = 0;//讀取音頻數(shù)據(jù)信息 void SetFileName(TCHAR* pszFileName);//設(shè)置文件名 size_t GetFileNameLen();//獲取文件長(zhǎng)度 WORD GetBitsPerSample(); DWORD GetSampleRate(); WORD GetChannels(); INT GetOpened();//獲取打開狀態(tài) LARGE_INTEGER GetTotalSamples(); DWORD GetTotalTime(); BOOL SetStartTime(DWORD Minutes, DWORD Seconds); BOOL SetEndTime(DWORD Minutes, DWORD Seconds); void Reset(); void Jump(INT offset); |
| 算法與原理 | 內(nèi)部實(shí)現(xiàn)使用相關(guān)解碼庫(kù)解碼成pcm數(shù)據(jù)[3]。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.2頻譜模塊A-2
表4-4頻譜模塊設(shè)計(jì)表
| 模塊名稱 | 頻譜模塊 |
| 功能描述 | 頻譜分析,實(shí)現(xiàn)各種視覺效果。 |
| 接口與屬性 | 類名: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) ; |
| 算法與原理 | 對(duì)pcm數(shù)據(jù)執(zhí)行FFT算法,根據(jù)視覺效果類型進(jìn)行排序渲染繪制。 視覺效果實(shí)現(xiàn)原理:傅立葉變換是眾多數(shù)學(xué)變化中應(yīng)用最廣泛的一種,其實(shí)質(zhì)是將一個(gè)周期函數(shù)分解成一系列正交函數(shù)的(比如sin和cos函數(shù))的線性集合。快速傅里葉變換將時(shí)域中難以處理的信號(hào)轉(zhuǎn)換成易于處理的頻域信號(hào)。通過把解碼后的PCM數(shù)據(jù)流進(jìn)行實(shí)時(shí)FFT,對(duì)處理后的頻域信號(hào)進(jìn)行分組排序等算法,根據(jù)要實(shí)現(xiàn)的視覺效果進(jìn)行相關(guān)繪制即可。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.3播放模塊A-3
表4-5播放模塊設(shè)計(jì)表
| 模塊名稱 | 播放模塊 |
| 功能描述 | 播放,暫停等,并協(xié)調(diào)處理解碼模塊和頻譜模塊的相關(guān)操作。 |
| 接口與屬性 | 類名: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(); |
| 算法與原理 | 均衡器實(shí)現(xiàn)原理[4]:均衡器的作用就是調(diào)節(jié)不同頻率的信號(hào)的強(qiáng)度。聲音作為一種波具有三個(gè)要素:幅度,頻率,相位。其中幅度決定了聲音的大小,頻率決定了聲音音調(diào)的高低。實(shí)際的聲音往往都不是單一頻率的波,而是有各種頻率的波疊加而成,從而形成了各具特色的聲音。y = Asin(wt+fi)+A0 (單頻率聲波描述) (2-1)y = A1sin(w1t+fi1) + A2sin(w2t+fi2) + .(實(shí)際的聲波描述) (2-2)聲音的不同就在于不同頻率的聲信號(hào)具有不同的強(qiáng)度。而均衡器就是根據(jù)這個(gè)原理來(lái)實(shí)現(xiàn)的。均衡器能自動(dòng)分離不同頻率的信號(hào),并采取不同程度的放大或縮小,從而改變聲音的效果。具體來(lái)說(shuō),均衡器一般把人能聽到的頻段范圍(20Hz-20KHz)分為多個(gè)頻段,對(duì)不同頻段的聲信號(hào)進(jìn)行不同程度的放大或縮小(增益或負(fù)增益)。對(duì)處理后PCM數(shù)據(jù)流用DirectSound把數(shù)據(jù)放到音頻設(shè)備上即可。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.4界面模塊A-4
表4-6界面模塊設(shè)計(jì)表
| 模塊名稱 | 界面模塊 |
| 功能描述 | 毛玻璃界面實(shí)現(xiàn),并負(fù)責(zé)界面主題的更換,是其他窗口類的基類。 |
| 接口與屬性 | 略 |
| 算法與原理 | 主界面實(shí)現(xiàn)原理[2]: 我們創(chuàng)建兩個(gè)對(duì)話框,一個(gè)(標(biāo)準(zhǔn)對(duì)話框)負(fù)責(zé)處理用戶輸入事件和窗口消息,另一個(gè)(透明對(duì)話框)負(fù)責(zé)界面展示。 透明對(duì)話框創(chuàng)建通過CreateWindowEx,并賦予WS_EX_LAYERED, WS_EX_TRANSPARENT and WS_EX_NOACTIVATE屬性。而且與真實(shí)對(duì)話框保持大小和位置的一致。標(biāo)準(zhǔn)對(duì)話框用過函數(shù)SetLayeredWindowAttributes設(shè)置完全的透明。 圖4-7 界面窗體層次圖 兩層窗體位置大小同步原理: 上層窗體通過OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)設(shè)置拉伸鼠標(biāo)形狀,通過OnNcLButtonDown(UINT nHitTest, CPoint point)和OnNcHitTest(CPoint point)檢測(cè)鼠標(biāo)非客戶區(qū)(遍體欄和邊框)的點(diǎn)擊,通過OnSize(UINT nType, int cx, int cy)改變窗口大小。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.5主題模塊A-5
表4-7主題模塊設(shè)計(jì)表
| 模塊名稱 | 主題模塊 |
| 功能描述 | 界面主題包的管理。 |
| 接口與屬性 | 略 |
| 算法與原理 | 對(duì)每個(gè)主題使用xml組織頁(yè)面控件位置大小,實(shí)現(xiàn)切換。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.6 XML模塊A-6
表4-8 XML模塊設(shè)計(jì)表
| 模塊名稱 | Xml模塊 |
| 功能描述 | Xml文件的管理,對(duì)所有數(shù)據(jù)的讀取處理工作。 |
| 接口與屬性 | 略 |
| 算法與原理 | 用Markup實(shí)現(xiàn)xml的存取,對(duì)系統(tǒng)配置變量進(jìn)行校驗(yàn)管理。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.7模塊A-7
表4-9列表模塊設(shè)計(jì)表
| 模塊名稱 | 列表模塊 |
| 功能描述 | 列表管理,列表文件的管理。 |
| 接口與屬性 | 略 |
| 算法與原理 | 用相關(guān)高效容器實(shí)現(xiàn)。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.8模塊A-8
表4-10歌詞模塊設(shè)計(jì)表
| 模塊名稱 | 歌詞模塊 |
| 功能描述 | 歌詞顯示和功能實(shí)現(xiàn)。 |
| 接口與屬性 | 類名: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); //滑動(dòng)條歌詞定位 |
| 算法與原理 | 歌詞走馬燈效果實(shí)現(xiàn):使用雙層窗體,對(duì)這兩層窗體通過進(jìn)行GDI+繪制與和png圖片融合,實(shí)現(xiàn)歌詞走馬燈效果。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.9模塊A-9
表4-11 Web模塊設(shè)計(jì)表
| 模塊名稱 | Web模塊 |
| 功能描述 | 瀏覽器的接口實(shí)現(xiàn)。 |
| 接口與屬性 | 類名: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頁(yè)面暴露接口函數(shù)實(shí)現(xiàn)c++與javescript的交互。 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.10模塊A-10
表4-12 Http下載模塊設(shè)計(jì)表
| 模塊名稱 | Http下載模塊 |
| 功能描述 | 下載,緩沖區(qū)的管理 |
| 接口與屬性 | 類名:CHttpSocket Constructor: CHttpSocket(); virtual ~CHttpSocket(); Main Method: CHttpSocket(); virtual ~CHttpSocket(); int GetServerState();//返回服務(wù)器狀態(tài)碼-1表示不成功 int GetField(const char* szSession,char *szValue,int nMaxLength); //返回某個(gè)域值,-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); //格式化請(qǐng)求頭 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多線程下載實(shí)現(xiàn) |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.2.11模塊A-11
表4-13設(shè)置模塊設(shè)計(jì)表
| 模塊名稱 | 設(shè)置模塊 |
| 功能描述 | 各種用戶設(shè)置支持 |
| 接口與屬性 | 類名: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); |
| 算法與原理 | 略 |
| 補(bǔ)充說(shuō)明 | 無(wú) |
4.3.3界面詳細(xì)設(shè)計(jì)
4.3.3.1應(yīng)當(dāng)遵循的界面設(shè)計(jì)規(guī)范
(1) 操作的簡(jiǎn)單性。
(2) 界面的一致性。
(3) 組織的合適性。
(4) 操作的靈活性。
4.3.3.2界面的關(guān)系圖和工作流程圖
4.3.3.3主界面設(shè)計(jì)
(1) 繪制子主界面的視圖:
圖4-8 主界面設(shè)計(jì)
(2) 主界面和整體界面的顯示效果:
圖4-9 主界面顯示效果
圖4-10 主界面去列表顯示效果
圖4-11 界面整體顯示效果
(3) 主界面的功能與操作:
主要功能和操作:鼠標(biāo)移至窗口即顯示相關(guān)按鈕,包括上一首,下一首,播放,暫停,停止,關(guān)閉,最小化,打開歌詞,打開音樂窗,打開均衡器,打開歌曲列表,打開歌曲文件,聲音調(diào)整,選時(shí)播放。
4.3.3.4 設(shè)置界面設(shè)計(jì)
(1) 設(shè)置界面顯示效果:
圖4-12 界面整體顯示效果
(2) 設(shè)置界面的功能與操作:
可以設(shè)置各種屬性項(xiàng)
4.3.3.5 下載管理界面設(shè)計(jì)
(1) 繪制下載管理彈出菜單視圖:
圖4-13 下載菜單設(shè)計(jì)
(2) 下載界面的顯示效果:
圖4-14 下載顯示效果
(3) 下載界面的功能與操作:
包括開始播放,開始任務(wù),暫停任務(wù),上一道頂部,下移到底部,打開文件夾,從硬盤上刪除。
轉(zhuǎn)載于:https://www.cnblogs.com/ququer/articles/2131401.html
總結(jié)
以上是生活随笔為你收集整理的一款音频播放软件设计文档,欢迎提出宝贵的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抽象代数之拉格朗日定理的证明
- 下一篇: SketchUppro 2021 已支持