第一篇:音樂播放器課設報告要點
音樂播放器
音樂播放器 問題定義和可行性研究................................................................2
(1)問題定義.......................................................................................................................2(2)可行性研究.....................................................................................................................3 需求分析........................................................................................3 功能需求...............................................................................................................................3
1.1 功能描述....................................................................................................................3 2 性能需求...............................................................................................................................4 3 將來可能提出的要求...........................................................................................................4 4項目描述................................................................................................................................5
4.1編寫目的.....................................................................................................................5 4.2項目背景.....................................................................................................................5 4.3開發工具及環境簡介.................................................................................................6 3 概要設計和詳細設計....................................................................6
3.1概要設計.............................................................................................................................6 3.2 詳細設計............................................................................................................................7 3.3音樂編碼設計.....................................................................................................................7
5主界面界面介紹.............................................................................8 6 系統的實現..................................................................................11
一、主要的對話框.................................................................................................................11
二、全局變量.........................................................................................................................12
三、初始化函數.....................................................................................................................12
三、播放、暫停功能.............................................................................................................15
四、添加文件到播放列表.....................................................................................................18
五、下一首上一首................................................................................................................20
六、停止播放.........................................................................................................................21
七、播放模式.........................................................................................................................21
八、顯示時間和播放進度.....................................................................................................22
九、刪除歌曲.........................................................................................................................23 5.2 單元測試..........................................................................................................................25 6.總結...............................................................................................26 問題定義和可行性研究
本章分為兩部分,問題定義和可行性研究。問題定義階段主要研究我們所學的知識能做什么項目,而可行性研究給出了制作音樂播放器的可行性。
(1)問題定義
通過開發音樂播放器,來練習本學期軟件工程課程所學知識。熟悉軟件開發的各個階段,將書本上的知識與實踐性的開發活動聯系起來。實現音樂播放器基本的功能。(2)可行性研究
大一的時候已經學過了基本的C++編程的知識,在這個基礎上,有三個星期的時間來學習MFC編程,學習文件的讀寫操作,以及系統API函數調用等知識。邊學邊用,具備開發軟件的能力。需求分析
本章給出了音樂播放器應該具備的功能,并給出了功能示意圖,最后提出了實現該播放器應該具備的條件。功能需求 1.1 功能描述
本播放器主要有如下功能:1.對文件進行操作。2.對按鈕的處理
1.對文件的操作
通過文件的讀寫知識,實現瀏覽目錄以選擇文件,添加歌曲到播放列表,刪除播放列表中的歌曲,對已經選中的文件進行播放、暫停,以及通過雙擊播放列表中的歌曲來播放文件。
2.對控件的處理
對各種按鈕添加了事件響應函數,可以處理基本的播放,暫停,上一首/下一首,刪除,選擇播放模式等操作。功能如下圖: 性能需求
本項目是一個普通的音樂播放器,運行環境為VS2010,項目運行速率正常,可以滿足用戶需求。1.時間性能要求:越低越好。
2.便捷性:運用了可視化編程,更有助于人機交互,更人性化。程序的運行,符合正常的操作習慣,程序功能明了簡潔!將來可能提出的要求
(1)歌曲列表的保存(2)菜單操作(3)更換背景圖片
(4)提供網絡下載功能:支持通過歌名和歌手名進行歌曲檢索和下載功能;(5)支持歌詞顯示和同步播放;(6)支持歌曲在線播放;
(7)支持更友好的歌曲檢索和下載功能;(8)提供更良好的操作界面。
4項目描述 4.1編寫目的
設計一個基于windows平臺的音樂點播系統,實現音樂庫的管理以及播放功能。
音樂播放器能夠滿足音樂的播放功能,實現一款播放器的基本功能。
4.2項目背景
本項目作為《軟件課程設計》課程的訓練項目提出,在基本的設計實現基礎上,將不斷對已有的設計進行進一步的修改和完善,最終完成整個軟件開發過程。本次項目的旨在通過不同軟件工程設計方法與技術的實踐,了解和掌握各種技術、工具平臺的特點與局限性,體會協同開發方式。
第1階段:主要目的是通過對項目需求的分析和理解,通過面向對象的設計方式完成項目前期的準備工作。
第2階段:我們會根據既定需求,完善設計模式。第3階段:在設計文檔和需求分析的文檔下,完成音樂點播系統原型的開發,并完成整個開發流程的測試報告
第4階段:通過音樂點播系統軟件的設計開發,了解軟件文檔的編寫原則,訓練掌握軟件各類文檔寫作的技巧,同時在文檔的編寫過程中提高和增加C++開發的能力和經驗。
4.3開發工具及環境簡介
操作系統:windows xp或以上版本
C++ 6.0: Visual C++是一個功能強大的可視化軟件開發工具。自1993年Microsoft公司推出Visual C++1.0后,隨著其新版本的不斷問世,Visual C++已成為專業程序員進行軟件開發的首選工具。
Microsoft Office Word 2003:經典辦公軟件,本項目中用于編寫文檔。概要設計和詳細設計
3.1概要設計
通過這個階段的工作將劃分出組成系統的物理元素——程序,文件和文檔等,但是每個物理元素仍然處于黑盒子級,這些黑盒子里的具體內容將在以后仔細設計。總體設計的另一項重要任務是設計軟件的結構,也就是要確定該軟件由哪些模塊組成的,以及這些模塊之間的關系。
運用傳統軟件工程方法學的知識將音樂播放器軟件的開發分成:
一、MFC的使用以及實現方法
二、文件的讀寫操作
三、系統API函數的調用
3.2 詳細設計
根據概要設計所劃分的四個模塊,該階段應詳細地完成這四個模塊的任務:
一、MFC的實現
通過MFC窗口以及函數的使用,創建出播放器的主界面,主界面應包括文件的打開、添加、播放以及線程按鍵。另外,還要各種函數應該實現相應組件上的各種事件。
二、文件讀寫操作的實現
通過以前的學過的文件讀寫操作知識,實現對音樂文件的讀以及寫操作。
三、系統API函數的調用
通過調用系統媒體控制接口函數實現對mp3,wav,wma等格式的音樂的播放的功能。
3.3音樂編碼設計
一、編碼原理
1.音樂的十二平均率規定(1)每兩個八度音之間的頻率相差一倍。
(2)兩個八度音之間又可以分為十二個伴音,每兩個伴音的頻率比為1.059463。
(3)低音6(音名A)的頻率是440Hz,音名B到C之間、E到F之間為伴音,其余為全音。2.樂譜編碼
選取65536Hz為基準頻率,以此頻率分頻得到簡譜高音各音調的分頻比。計算公式為N=65536/f。
二、編碼參照
為了讓ROM能夠識別各音頻的分頻系數,需將個音頻分頻系數按照一定格式轉換成十六進制格式。我們采用8位的ROM,D6D5位表示高中低音,如表1-2所示,11為高音,10為中音,01為低音;用D4D3D2D1D0位表示分頻系數,將表1-1的分頻系數轉換成二進制格式表示;ROM的高位全部補0。然后轉換成十六進制如表1-2所示。之所以采用高音分頻比的二分之一為基準分頻系數,是因為ROM的位寬限制,而每兩個八度音頻率相差一倍,所以我們后面用譯碼器譯成各音頻的分頻系數輸出給分頻器,這樣由分頻器輸出到揚聲器,揚聲器就可發聲了。
5主界面界面介紹
1、界面圖:
2添加歌曲按鈕
3、刪除歌曲按鈕
4、音量的變大變小按鈕
5、歌曲時間和進度的顯示圖像
6、下一首歌按鈕
7、上一首歌按鈕
8、停止播放按鈕
9、播放按鈕
10、單曲播放/隨機播放/順序播放按鈕
11、空白部分為歌曲的菜單列表 6 系統的實現
一、主要的對話框
class CMCIPlayerDlg : public CDialogEx { // 構造 public: CMCIPlayerDlg(CWnd* pParent = NULL);// 標準構造函數 // 對話框數據
enum { IDD = IDD_MCIPLAYER_DIALOG };
protected: virtual void DoDataExchange(CDataExchange* pDX);//
DDX/DDV 支持
// 實現 protected: HICON m_hIcon;
// 生成的消息映射函數
virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public: // 列表
CListBox m_list;afx_msg void OnBnClickedOnstart();afx_msg void OnBnClickedOnloadmusic();void load(music a);int isplay;int index;CSliderCtrl volume;afx_msg void OnNMCustomdrawVolun(NMHDR *pNMHDR, LRESULT
*pResult);afx_msg void OnBnClickedOnnext();afx_msg void OnBnClickedOnper();afx_msg void OnBnClickedOnstop();LRESULT OnMciNotify(WPARAM wParam, LPARAM lParam);//設置播放
模式
afx_msg void OnBnClickedOrder();afx_msg void OnLbnDblClk();void OnTimer(UINT nIDEvent);// 進度條
CSliderCtrl m_progress;afx_msg DWORD getinfo(DWORD item);afx_msg void OnBnClickedDeletemusic();};
二、全局變量
struct music { string name;string mPath;};int m_max;//進度條的最大位置變量
int hour,minute,second;//時間變量:小時、分鐘、秒鐘 DWORD cdlen;//某個音頻文件的總時間長度 DWORD m_count;//設備型號
DWORD cdfrom,cdto;//歌曲的起點和終點 DWORD DeviceID;
list
vector
三、初始化函數
BOOL CMCIPlayerDlg::OnInitDialog(){ CDialogEx::OnInitDialog();
// 將“關于...”菜單項添加到系統菜單中。
//volume.SetBkColor(RGB(37,38,37));
HBITMAP
hBitmap;
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4));
((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap);
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
((CButton *)GetDlgItem(IDC_ONPER))->SetBitmap(hBitmap);
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP2));
((CButton *)GetDlgItem(IDC_ONNEXT))->SetBitmap(hBitmap);
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP5));
((CButton *)GetDlgItem(IDC_ONSTOP))->SetBitmap(hBitmap);
hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP7));
((CButton *)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap);
SetBackgroundImage(IDB_BITMAP6,BACKGR_TILE,NULL);
isplay=0;
//未播放狀態
index=-1;
m_list.SetCurSel(0);//設置初始選擇位置
volume.SetRange(0,1000);//滑塊的移動范圍0~1000
volume.SetPos(500);//滑塊指針的初始位置設為500代表初始音
量為50
ifstream rin;
//導入原先數據
rin.open(“Mylist.txt”);
//int rere;
string str[2];
if(rin>>setw(50)>>str[0]>>setw(150)>>str[1])
while(!rin.eof())
{
music mu;
mu.name=str[0];
mu.mPath=str[1];
CString name;
for(int i=0;i { if(mu.name[i]=='/') mu.name[i]=' '; } name=mu.name.c_str(); CString mPath; for(int i=0;i { if(mu.mPath[i]=='/') mu.mPath[i]=' '; } mPath=mu.mPath.c_str(); int j=m_list.GetCount();// 把名字和地址插 入到list控件 m_list.InsertString(j,name); //CString *p=&mPath; allpath.push_back(mPath); rin>>str[0]>>str[1]; } rin.close(); // IDM_ABOUTBOX 必須在系統命令范圍內。 ASSERT((IDM_ABOUTBOX & 0xFFF0)== IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);if(pSysMenu!= NULL){ BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu); } } // 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將 自動 // 執行此操作 SetIcon(m_hIcon, TRUE); // 設置大圖標 SetIcon(m_hIcon, FALSE);// 設置小圖標 // TODO: 在此添加額外的初始化代碼 return TRUE;// 除非將焦點設置到控件,否則返回 TRUE } 三、播放、暫停功能 void CMCIPlayerDlg::OnBnClickedOnstart()//開始播放 { // TODO: 在此添加控件通知處理程序代碼 if(isplay==0){ // TODO: 在此添加控件通知處理程序代碼 if(m_list.GetCurSel()==-1)//判斷有沒有歌曲被選中,若 沒有,則從第一首開始播放-1代表沒有被選中 m_list.SetCurSel(0); if(m_list.GetCurSel()==index){ SetTimer(0,1000,NULL); mciSendCommand(DeviceID,MCI_RESUME,0,0); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3)); ((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,“暫停”); isplay=1;} else { index = m_list.GetCurSel();CString data;//m_list.GetDlgItemTextA(index,data);//CString c=dat MCI_OPEN_PARMS mciopenparms;//打開 MCI_PLAY_PARMS mciplayparms;//播放 second=0;minute=0;hour=0;mciopenparms.lpstrElementName=allpath[index];//將音樂文件路 徑傳給設備 DWORD dwReturn;if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT| MCI_WAIT,(DWORD)(LPVOID)&mciopenparms)){ //如果打開文件失敗,則將出錯信息儲存在buffer,并顯示 出錯警告 char buffer[256]; mciGetErrorString(dwReturn,buffer,256); MessageBox(buffer,“出錯警告!”,MB_ICONHAND| MB_ICONERROR|MB_ICONSTOP); } DeviceID=mciopenparms.wDeviceID; mciopenparms.lpstrDeviceType=NULL;//文件類型 m_count=mciopenparms.wDeviceID;//多媒體設備類型編號 mciplayparms.dwFrom=0;//每次播放都是從0開始播放 HWND hwnd = GetSafeHwnd(); mciplayparms.dwCallback =(DWORD)hwnd;cdlen=getinfo(MCI_STATUS_LENGTH); CString stime;CClientDC dc(this);dc.SetBkColor(RGB(255,255,255));//設置放置計數器區域的外觀 dc.SetTextColor(RGB(95,180,66));stime.Format(“%02d:%02d:%02d”,cdlen/3600000,(cdlen %3600000)/60000,((cdlen%3600000)%60000)/1000);//顯示時間進度 dc.TextOut(328,13,stime); mciSendCommand(DeviceID,MCI_PLAY,/*MCI_FROM|*/MCI_NOTIFY,(DWORD)(LPVOID)&mciplayparms); SetTimer(0,1000,NULL);//設置系統計數器,顯示歌曲播放的進度 HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3)); ((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,“暫停”);isplay=1;} } else { KillTimer(0); mciSendCommand(DeviceID,MCI_PAUSE,0,0); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)); ((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,“播放”); isplay=0;} } 四、添加文件到播放列表 void CMCIPlayerDlg::OnBnClickedOnloadmusic()//導入歌曲 { // TODO: 在此添加控件通知處理程序代碼 CFileDialog dlg(TRUE, _T(“*.*”), NULL,OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,_T(“mp3文件(*.mp3)|*.mp3|” “wma文件(*.wma)|*.wma|” “wav文件(*.wav)|*.wav|” “所有文件(*.*)|*.*|”), NULL); // 選項圖片的約定 dlg.m_ofn.lpstrTitle = _T(“打開音樂文件”); // 打開文件對話框 的標題名 if(dlg.DoModal()!= IDOK) // 判斷是否獲得圖 片 return; CString mPath = dlg.GetPathName();// 獲取音樂路徑 CString mmpath=mPath; allpath.push_back(mPath); int i = mPath.ReverseFind('');//從磁盤地址中獲取歌曲名字 CString name; name = mPath.Right(mPath.GetLength()-1-mPath.ReverseFind('')); int j=m_list.GetCount();// 把名字和地址插入到list控件 m_list.InsertString(j,name);//m_shelllist.SetItemText(j,0,name);music mu;mu.name=name.GetBuffer();mu.mPath=mPath.GetBuffer();load(mu);} void CMCIPlayerDlg::load(music a){ list ifstream rin; rin.open(“Mylist.txt”); //int rere; string str[2]; if(rin>>str[0]>>str[1]) while(!rin.eof()) { music mu; mu.name=str[0]; mu.mPath=str[1]; if(mu.name!=a.name) mus.push_back(mu); else { MessageBox(“已經有該歌曲”); return; } rin>>str[0]>>str[1]; } rin.close(); for(int i=0;i //把名 字里面的空格變為'_' { if(a.name[i]==' ') a.name[i]='/'; } for(int i=0;i //把地 址里面的空格變為'*' { if(a.mPath[i]==' ') a.mPath[i]='/'; } mus.push_back(a); ofstream out(“Mylist.txt”);list out< (*it).mPath < it++;} out.close();} 五、下一首上一首 void CMCIPlayerDlg::OnBnClickedOnnext()//下一首 { // TODO: 在此添加控件通知處理程序代碼 KillTimer(0); second=0;minute=0;hour=0;mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加載文件前先清空 上一次播放的設備 isplay=0;index = m_list.GetCurSel();if(index+1==m_list.GetCount()){ m_list.SetCurSel(0);} else { m_list.SetCurSel(index+1);} OnBnClickedOnstart(); isplay=1;} void CMCIPlayerDlg::OnBnClickedOnper()//上一首 { // TODO: 在此添加控件通知處理程序代碼 KillTimer(0); second=0;minute=0;hour=0;mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加載文件前先清空 上一次播放的設備 isplay=0; } index = m_list.GetCurSel();if(index==0){ m_list.SetCurSel(m_list.GetCount()-1);} else { m_list.SetCurSel(index-1);} OnBnClickedOnstart();isplay=1; 六、停止播放 void CMCIPlayerDlg::OnBnClickedOnstop()//停止 { // TODO: 在此添加控件通知處理程序代碼 KillTimer(0); second=0;minute=0;hour=0;mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加載文件前先清空 上一次播放的設備 isplay=0;SetDlgItemText(IDC_ONSTART,“播放”);HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)); ((CButton *)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); index=-1;UpdateData(false);} 七、播放模式 void CMCIPlayerDlg::OnBnClickedOrder()//設置播放模式 { // TODO: 在此添加控件通知處理程序代碼 CString pattern;GetDlgItemText(IDC_ORDER,pattern);if(pattern==“順序”){ SetDlgItemText(IDC_ORDER,“隨機”); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP8)); ((CButton *)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); } if(pattern==“隨機”){ SetDlgItemText(IDC_ORDER,“單曲”); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP9)); ((CButton *)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); } if(pattern==“單曲”){ SetDlgItemText(IDC_ORDER,“順序”); HBITMAP hBitmap; hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP7)); ((CButton *)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); } } 八、顯示時間和播放進度 void CMCIPlayerDlg::OnTimer(UINT nIDEvent){ CString stime;second++;CClientDC dc(this);dc.SetBkColor(RGB(255,255,255));//設置放置計數器區域的外觀 dc.SetTextColor(RGB(95,180,66)); if(second==60)//設置鐘表的顯示 {minute++;second=0;} if(minute==60){hour++;minute=0;} if(hour==24){hour=0;} stime.Format(“%02d:%02d:%02d”,hour,minute,second);//顯示時間 進度 dc.TextOut(68,13,stime);m_progress.SetRange(0,cdlen);//使進度條的范圍與歌曲時間一致 UpdateData(false);m_max=cdfrom;//保存歌曲的當前位置信息 if(m_max!=cdlen)//如果歌曲結束,則進度條重新置0 {m_progress.SetPos(cdfrom);} else {m_progress.SetPos(0);m_max=0;OnBnClickedOnstop();} DWORD cdf=getinfo(MCI_STATUS_POSITION); cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRAME(cdf));//獲取當前播放文件的信息 UpdateData(false);CDialog::OnTimer(nIDEvent); 九、刪除歌曲 void CMCIPlayerDlg::OnBnClickedDeletemusic()//刪除歌曲 { // TODO: 在此添加控件通知處理程序代碼 if(m_list.GetCurSel()==-1) MessageBox(“請選中要刪除的歌曲”);else { CString na; int i=m_list.GetCurSel(); na=allpath[i]; allpath.erase(allpath.begin()+i); m_list.DeleteString(i); UpdateData(false); string pa=na.GetBuffer(); for(int i=0;i //把地址里面的空格 變為'*' { if(pa[i]==' ') pa[i]='/'; } list ifstream rin; rin.open(“Mylist.txt”); //int rere; string str[2]; if(rin>>str[0]>>str[1]) while(!rin.eof()) { music mu; mu.name=str[0]; mu.mPath=str[1]; if(mu.mPath!=pa) mus.push_back(mu); rin>>str[0]>>str[1]; } rin.close(); ofstream out(“Mylist.txt”);list out< (*it).mPath < it++;} out.close(); } } 5.2 單元測試 初始界面: 初始界面由一個七個按鈕控件,一個列表控件,一個進度條控件組成。 當點擊添加歌曲按鈕時,彈出文件對話框 彈出的文件對話框 6.總結 自制音樂播放器是運行于VS2010的一款MFC應用程序,該軟件通過運用平時所學的知識,把文件的創建、讀寫操作,MFC控件的使用,系統的MCI函數的知識系統地聯系在了一起。 播放器通過文件的讀寫知識,實現了對音樂文件的添加、刪除等操作;通過系統MCI函數,支持MP3,WAV,WMA等格式的音樂文件的播放,而在主界面程序中只是調用這些功能函數,有助于對軟件進行更新操作;另外,該軟件運用了MFC的知識,實現了按鈕,列表框等控件的使用,通過使用事件處理機制,實現了各種按鍵上的動作事件。 因此,該播放器能夠更好地練習本學期所學的各種知識,通過該播放器的開發,回顧了文件的各種操作,加深了對MFC的認識,尤其是對軟件開發的各個過程有了較詳細的了解。 華東交通大學課程項目 學 院:軟件學院 ______ 課程名稱: Android應用開發___________ 項目名稱: ___ _音樂播放器________ 學生名字: ____ ________ 學生班級: ____ ______ 授課教師: __________ 授課學期:2015___至2016______學年第2學期 2016年 6月 1 日 目錄 目錄...................................................................................................................................2 1、需求分析.............................................................................................................................3 1.1編寫目的.....................................................................................................................3 1.2項目背景.....................................................................................................................3 1.3目標.............................................................................................................................4 1.4用戶特點.....................................................................................................................4 2、程序設計.............................................................................................................................5 2.1歡迎界面....................................................................................................................5 2.2主頁面........................................................................................................................6 2.3播放音軌SeekBar......................................................................................................6 2.4播放調節功能實現.....................................................................................................7 2.5歌曲列表顯示界面.....................................................................................................8 2.6專輯列表顯示界面.....................................................................................................8 3、功能設計.............................................................................................................................9 4、個人總結...........................................................................................................................10 1、需求分析 1.1編寫目的 現今社會生活緊張,而欣賞音樂史其中最好的舒緩壓力的方式之一,音樂播放類的軟件數不勝數,為什么我還要再寫一個播放器出來呢?因為現有的音樂播放器功能實在是有些多了,多未必不好,但是我總想要一個干凈純粹的音樂播放器,只為聽歌的播放器,一個有著一些自己想要的功能的播放器,比如“切歌”,一個自己熟悉代碼的播放器,甚至,一個可以自定義功能結構的音樂播放器。本項目的目的是開發一個可以播放主流音樂文件格式的播放器,本設計的實現的這主要功能是播放MP3等音樂文件,并且能夠控制播放器播放,暫停,停止,上一曲,下一曲。界面簡單,操作簡單。 本軟件具備音樂播放器的播放歌曲、歌曲列表、拖動進度等基本功能,同時本播放器界面簡潔美觀,操作簡單便捷。 1.2項目背景 隨著智能手機的普及,用戶需要各種各樣的應用軟件,音樂播放器肯定是必不可少的。隨著計算機的廣泛運用,手機市場的迅速發展,各種音頻資源也在網上廣為流傳,這些資源卡是平常,但已經漸漸成為人們生活中必不可少的一部分了。于是各種手機播放器也緊跟著發展起來,但是很多播放器一味最求外觀花俏,功能龐大,對用戶的手機造成很多資源浪費,比如CPU,內存等的占用率過高,在用戶需要多任務操作時,受到不小的影響,帶來了許多不便,而對于大多數普通用戶,許多功能用不上,形同虛設。針對以上各種弊端,選擇了開發多語種的音頻播放器,將各種性能優化,繼承播放器的常用功能,滿足一般用戶聽歌的需求。1.3目標 學習完本周的應用開發課程之后,需要實現以下目標: 可以獲取本地音樂 可以顯示歌曲的進度 可以用拖動條來控制歌曲的進度 音樂播放器可以循環播放音樂; 可以播放下一首歌曲; 有一個精美的界面; 可以通過手勢調節音量; 1.4用戶特點 本系統的最終用戶是面向廣大的擁有手機的用戶。廣大用戶有各個階級的,學生,上班族,家長。 主要群體是學生,學生的特點是要求播放的音頻潮流,音質高,功能多種多樣。學生基本上會隨身攜帶手機。 上班族工作壓力比較大,可以適當的播放音樂緩解壓力。 2、程序設計 2.1歡迎界面 歡迎界面模塊主要是用于給用戶一種友好的體驗,讓用戶較容易接受本軟件。進入系統后進入歡迎界面如圖2.1,運用計時器兩秒鐘后自動跳轉到選擇進入界面4.2。并且運用了組合動畫實現了漸隱的效果。 2.1歡迎界面 2.2主頁面 主頁面是本運用的核心界面,本界面擁有三個Fragment,可以運用Activity底部的選項卡進行切換,三個Fragment分別為歌曲列表,正在播放以及專輯列表。如圖4.2所示,此時Activity上顯示的Fragment為正在播放,此頁面運用一張炫酷的網絡圖片。中間一塊專輯及歌曲顯示的模塊是屬于一個自定義模塊。底部為音軌模塊。 2.2主頁面 2.3播放音軌SeekBar 播放器最重要的一部分就是音軌與歌曲進度同步的實現。音軌設置了兩個TextView用來顯示當前歌曲播放的進度時間和歌曲的長度。音軌對象SeekBar在歌曲剛開始播放的時候調用方法SeekBar.setMax(),參數傳入歌曲的長度。SeekBar.setProgress(1)設置游標的起始進度為1。Android的線程的開始是通過Handler類來進行的,Handler類是線程與線程之間通信的橋梁,實現Runnable接口會實現里面的run方法,當線程開始的時候,Runnable中的run方法會向Handler發一個Message消息,這樣,Handler類就可以接收到run方法發送過來的不同的消息進行不同的代碼處理。這樣就達到了各線程之間的通信。要啟動一個線程調用Handler的方法postDelayed(Runnable,1000)表示線程睡眠時間是1000ms。 讓播放歌曲的線程每隔1000ms,即每1秒對音軌的TextView重新設置時間且讓進度條 前進1秒的進度。對音軌進行刷新。這樣就實現了歌詞同步功能SeekBar有一個監聽器,該監聽器的作用是一直保持著對進度條的監聽,當我們用鼠標向SeekBar的各位置進行點擊時,它會自動監聽其位置,進行相應的位置顯示。這也是進度條上的游標會不停的移動和歌詞時間會不停的變動的原因。 2.3播放音軌 2.4播放調節功能實現 各按鈕水平放置,從左到右依次是上一首、播放、下一首功能按鈕。用的是布局中的線性布局LinearLayout,;將其設置為水平,如圖所示。LinearLayout中依次放置播放/暫停,上一首、下一首按鈕屬性。 歌曲專輯圖片顯示,如果有歌曲圖片,才會返回,否則為null,2.4控制按鈕 Android的媒體播放原理:Android源程序已經為我們封裝好了一個接口類,叫MediaPlayer。該接口在執行行需要一個數據源,通過如下步驟: 第一步:MediaPlayer.reset();復位操作,為以后的媒體準備播放作準備。第二步:傳入歌曲數據源,這里也是一個數據MediaPlayer.setDataSource(String path);參數需要傳一個路徑,該接口類在收到路徑后將其轉化為數據源。 第三步:準備播放數據源,調用方法MediaPlayer.Prepare()。 第四步:MediaPlayer.Start();播放數據源,該數據源播放后,不再與程序有關,需要用MediaPlayer.Stop()方法讓其停止或MediaPlayer.Start();讓其啟動。2.5歌曲列表顯示界面 歌曲列表整體采用了相對布局(RelativeLayout),中間歌曲列表部分采用的是ListView視圖,以確保有大量歌曲時能滾動式容納所有歌曲,如圖2.5所示,背景采用一張炫酷的圖片,自定義LIstView,左側為歌曲圖片,中間為歌曲名歌手,最右邊為歌曲時長。 歌曲的名稱:MediaStore.Audio.Media.TITL 歌曲的歌手名:MediaStore.Audio.Media.ARTIST 歌曲的總播放時長:MediaStore.Audio.Media.DURATION 2.5歌曲列表 2.6專輯列表顯示界面 專輯列表采用了網格視圖(GridView)用它能實現視圖的網格排列,九宮格視圖就是GridVew最典型的使用,GridView是一個AdapterView,所以需要通過適配器來綁定數據,這里使用BaseAdapter。如圖所示用一張網絡圖片作為背景,GRidView布局自定義,每個item分為兩部分,上面為圖片,下邊為歌曲專輯名。 歌曲的專輯名:MediaStore.Audio.Media.ALBUM 2.6專輯列表 3、功能設計 該系統具有以下主要功能: 1)播放歌曲,顯示歌曲名字 2)播放上一首歌和下一首歌 3)播放模式可以是循環的,也以是單曲循環 4)可以通過手勢調節歌曲進度 5)可以選取歌曲進行播放 4、個人總結 通過對Android手機平臺的音樂播放器的開發,使我對Android系統有了更高層次的了解,Android功能是非常強大的,在這段時間的學習與實踐中遇到了很多難題,不過通過網上專門的Android 社區有些開源的代碼供參考研究,同時還得到了Android高手的指點,總算給完成了,覺得蠻有意義的。 開發Android音樂播放器,要抓住開發的核心部分,音樂播放器大體由播放主界面、播放列表組成。這兩個個模塊完成,音樂播放器就能初具規模。而其它的功能都是在這兩個模塊的基礎上去補充添加的,這是功能的確是必不可少的功能,否則就不具備音樂播放器的基本功能了。 在開發過程中我學到了一些經驗:系統分析的好壞將決定著的系統開發成功與否,一份好分析設計將是成功開發主要因素。總之,經過這次的Android系統技術知識的學習和對音樂播放器的構思與設計,使我對Android系統有了一定的了解,讓我對Android系統上的開發流程和開發模式有了深入的了解,同時也對整個軟件產品的實現流程有了一個深入的了解,這對我以后從事軟件開發有很大的幫助。 一、綜述本課題國內外研究動態,說明選題的依據和意義 1.1課題的背景和意義 隨著科技的進步,手機的功能也不斷的得到豐富,從最早的“大哥大”到現在的商務PDA手機,智能手機,音樂手機等等,功能也從單純的打電話發展到了發短信,聽歌,上網....手機和我們生活的聯系越來越緊密,手機的功能也是很多人們關注的焦點。 目前手機的音樂播放功能已經是大家比較關注的一個部分了,不少在人在購買手機的時候都會關心手機的音樂播放的能力,這也足以看出目前大家對音樂播放功能的重視,所以一款性能良好的手機音樂播放器軟件一定會受到歡迎。和傳統的音樂播放器相比,手機播放音樂更加的容易攜帶,其他方面也都不輸于傳統音樂播放器,而且還具有網上聽音樂功能,所以開發一款受歡迎的手機音樂播放軟件是具有良好的市場和應用前景的。 一款專業的音樂播放軟件是手機中必不可少的要素,幾乎市場上所有的手機都擁有一個自帶的音樂播放軟件,通過軟件可以對音樂欣賞中一些必要的元素進行人性化的設置,同時在操作的時候也能得到一定的便利,但是不能滿足用戶的所有要求,所以網上就出現了各種各樣的手機音樂播放軟件,來滿足不同用戶的不同要求。不同手機平臺的手機,所支持的音樂播放軟件也是各不相同,而現在最流行的手機平臺就是google的android手機平臺,所以本課題就致力于開發出一款基于android手機平臺的音樂播放器,來滿足用戶的使用需求。 1.2課題的研究歷史和發展現狀 首先簡單的介紹一下google的android。Android原本是一家獨立的手機操作系統公司,2005年被Googel收購。2007年11月,Googel宣布推出基于Linux的Android開放式手機操作系統,沿襲至今,已發展到2.2版本(3.0尚在研)。此系統的“開放”尤其體現在任何手機制造商均可無需支付專利費即可將此系統運用在自己的手機 Google的以Linux為內核的Android移動手機平臺從誕生之日起短時間內便在世界范圍里獲得了廣泛的關注。最近的報告顯示在中國,一個擁有最大的人口,擁有最多的手機用戶,擁有巨大的增長潛力的國家,這個系統的占有率沿著一個倒拋物線的增長曲率成為手機操作系統中的霸主 同時國外的Android市場也正在如日中天的擴展,據市場調研機構NPDGroup最近發布的一份報告稱,今年第一季度基于Android操作系統的智能手機在美國智能手機總銷量中所占比例達到28%,首度超過蘋果iPhone,蘋果iPhone約為21%,相信在不久的將來會有更多的用戶選擇Android系統的手機或是無線終端設備。 根據美國移動廣告商AdMob的統計,iPhoneOS在美國本土的網絡流量占了美國本土全部移動互聯網流量的39%,而Android系統首次超越了它,達到了46%。不過要放在世界范圍內來看,iPhone OS仍占了46%,而Android只占了25%,還是排第二。不過仍能說明 Android的來勢洶洶,能對蘋果造成威脅的果然只有Google。 國內目前中國移動、Moto、LG、三星、華為、MTK等正在積極籌備Android產品和相關的電子市場,中國移動率先推出了基于Android深度定制的Ophone系統和Mobile Marke,聯想基于Android的樂phone手機也于5月17日正式上市,國內其他電子廠商也紛紛表示到下半年會推出大量的基于Android的手機和MID產品,Moto更是放棄了原有的所有手機操作系統,孤注一擲,計劃今年國內市場有近20款Android產品面世。3G時代的到來,給中國企業追趕國際廠商帶來了騰飛的機會,據預測亞太區域將來會占據全球Android市場中最大的收入份額。 Android的代號序列會按甜點名字中首個英文字母(C、D、E、F)的排列順序,到目前為止android系統已經有多個幫本: Android1.1發布于2009年2月主要特性: 鬧鐘,API示例,瀏覽器,攝像頭,計算器,聯系人,開發工具包,撥號應用,電子郵件,地圖,信息服務,音樂,圖片,設置。2009年4月30日,官方1.5版本(Cupcake)的Android發布。主要的更新如下: 拍攝/回放視頻,并支持上傳到youtube,支持立體聲藍牙耳機,同時改善自動配對性能,最新的采用WebKit技術的瀏覽器,支持拷貝/粘帖和頁面中搜索,gPS性能大大提高, 屏幕虛擬鍵盤,主屏幕增加音樂播放器和相框widgets,應用程序自動隨著手機旋轉 短信,Gmail,日歷,瀏覽器的用戶界面大幅改善,比如說Gmail現在可以批量刪除郵件了 ,相機啟動速度加快,拍攝圖片可以直接上傳到picasa, 來電照片顯示。2009年9月15日, 1.6(Donut)版本SDK發布。主要的更新如下:完全重新設計的Android Market,手勢支持,支持CDMA網絡,文字轉語音系統(TXT-2-speech),快速搜索框,全新的拍照界面,應用程序耗電查看,支持VPN,支持更多的屏幕分辨率,支持OpenCore2媒體引擎,新增面向視覺或聽覺困難人群的易用性插件 2009年10月26日, 2.0(Eclair)版本SDK發布。主要的更新如下:優化硬件速度,“Car Home”程序,支持更多的屏幕分辨率,重整界面,新的瀏覽器的用戶界面和支持HTML5,新的聯系人名單,更好的白色/黑色背景比率,改進Google Maps 3.1.2,支持Microsoft Exchange,支持內置相機閃光燈,數字變焦,改進的虛擬鍵盤,藍牙2.1 Android的代號序列會按甜點名字中首個英文字母(C、D、E、F)的排列順序。下一個版本的Android將會命名為Froyo(凍酸奶,基于Linux Kernel 2.6.32)。Froyo 之后的版本的Android將會命名為Gingerbread(姜餅,基于Linux Kernel 2.6.33/34)。 二、研究的基本內容,擬解決的主要問題: 2.1課題研究的主要內容 本文的主要研究內容包括以下幾個方面: ? 查找相關書籍與文獻,了解Android的構架并搭建Android平臺。? 查找相關資料,現階段基于Android平臺手機音樂播放器發展現狀以及相關功能。 ? 在上述基礎上,提出所要做的手機播放器的相關功能如:播放本地歌曲,設置,播放列表,播放記錄等。 ? 在Android平臺上完成該課題的軟件并進行相應的軟件測試。 2.2課題研究的拓展 傳統的音樂播放器受限于手機存儲和計算處理能力,在音樂收集、存儲和管理方面一直存在瓶頸,新一代音樂播放器應該進一步拓展了應用空間,更迎合用戶的使用習慣,將音樂搜索、收藏、管理等全部交由網絡來完成,為用戶提供的音樂資源更為龐大,搜索更為精準,管理和收藏更為簡便的服務。 1.智能化超級搜索 網絡音樂播放器的特點就是集成了音樂搜索服務,將用戶從繁雜的網頁搜索解脫出來,提供更為專業和準確的音樂搜索服務。新一代音樂播放器提供的搜索結果不是直接抓取的網頁搜索鏈接,而是先由服務器進行實時采集和篩選,然后保存在數據庫由用戶進行調用,以此來保證搜索結果的準確性、唯一性和有效性,將搜索結果的驗證和判斷交由服務器來未完成,避免出現盲搜會出現的搜索結果重復和無效的情況發生,從而大大提高用戶的搜索效率。 2.智能化口味分析 在網絡音樂時代海量的音樂信息已經改變了大眾的聽歌習慣,一天聽個幾十上百首新歌都不是問題。無論是音樂排行榜、媒體推薦還是口碑宣傳,都屬于小范圍的傳播途徑,這些傳統的歌曲信息獲取方式已經無法滿足大眾大量獲取新鮮歌曲的需要。新一代音樂播放器應該實時采集用戶的聽歌習慣,實時分析出用戶的喜好,在短時間內即可將大量滿足用戶喜好的歌曲推薦出來,用戶無須人工操作即可不斷聽到新鮮的好歌,常聽常新 3.雖然網絡音樂播放已經成為主流,但很多用戶仍習慣于在本地收藏和管理音樂文件。本地音樂管理所遇到的主要難題就是音樂信息混亂,絕大多數從網上下載的音樂文件名都是簡化的英文或數字,讓人無法辨識出正確的歌曲名。日積月累這些音樂文件就會給日常管理帶來極大麻煩。識別服務則可以完美解決這一問題,它可以自動采集音樂旋律上傳至服務器,憑借服務器系統強大的識別能力,通過音樂旋律即可準確誤別出正確的音樂信息,然后再自動對本地音樂文件進行信息更正,將音樂文件重命為正確的中文或英文歌曲名等。歌曲數量再多都能在極短的時間內批量完成誤別操作,識別服務可以說是現在本地音樂管理的不可或缺的幫手 上面所說的幾種功能都是下一代音樂播放器應該具有的功能,只有音樂播放器客戶端軟件的不斷創新發展,未來人們欣賞音樂的體驗才會更加精彩。 三、研究步驟、方法及措施: 3.1研究步驟 研究步驟主要分為6個步驟,包括理論準備、材料分析、需求分析、、編碼實現、系統測試、完善軟件系統。每個步驟的大致工作如下: 3.1.1理論準備 此步驟是整個研究過程的基礎,也是今后研究展開的基石,主要是翻閱相關資料,查詢Android平臺的歷史和發展現狀,在理論的基礎上為接下來的步驟做準備。3.1.2材料分析 對現行的Android平臺手機播放器進行分析并提出相應功能。 3.1.3需求分析 在步驟1和2的基礎上對該課題進行需求分析。 3.1.4編碼實現 此過程主要是針對步驟2和3的編碼實現,完成上文描述的功能需求進行必要的編碼。當然這里是在Android平臺上實現的。3.1.5系統測試 對基于Android平臺手機播放器進行基本的軟件測試,查找并修改常見的BUG。3.1.6后期完善 此步驟主要是對上述軟件的界面等外設進行修改,以達到操作方便,友好美觀的效果。3.2研究方法和措施 根據現有的音樂播放器,分析用戶喜好,優化功能,邀請不同的用戶提出建議,不斷的進行完善。 四、研究工作進度: 序號 1 2 3 4 5 6 7 8 時間 2010.5.11-2010.6.11 2010.6.12-2010.6.30 2010.7.1-2010.7.31 2010.8.1-2010.8.31 2010.9.1-2010.9.30 2010.10.1-2010.10.9 2010.10.9-2010.10.28 內容 熟悉課題要求與任務 查閱相關文獻資料 熟悉Android系統 構建Android平臺以及熟悉相關操作 需求分析 完成開題報告 軟件編程 測試軟件 完善軟件,準備論文寫作 修改論文,定稿,準備答辯,材料歸檔 2010.10.28-2010.11.9 2010.11.16-2010.11.10 2010.11.29-2010.12.1 五、主要參考文獻: [1] ophone應用開發權威指南 胡幸征著;—北京:電子工業出版社,2010.1 [2] 深入淺出Google Android/E2Ecloud 工作室編著。—北京:人民郵電出版社,2009.8 [3] Google Android開發入門與實戰/靳巖,姚尚朗編著。—北京:人民郵電出版社,2009.7 [4] Google Android SDK開發范例大全/余志龍等編著;王世江改編。—北京:人民郵電出版社,2009.7(2009.8重印)[5] Android應用框架原理與程序設計36技/高煥堂著; 六、指導教師審核意見: 指導教師簽字: 年 月 日 七、系、室、部(研究所)評議意見: 1.適合本專業的畢業設計課題; 2.不適合本專業的畢業設計課題; 3.其他 系、室、部(研究所)主任簽字: 八、開題小組評審意見: 開題小組組長簽字: 2009 年 9 月 27 日 九、系領導(答辯委員會)審核意見: 1.通過; 2.完善后通過; 3.未通過 系領導(答辯委員會)簽字: 2009 年 9 月 28 日 音樂播放器作文 我有一臺音樂播放器,我非常喜歡它,給它取名為小白。這是我的一位好朋友送給我的。小白穿著一身漂亮的“白襯衫”還配著一條黑色的漂亮“短裙子”,再配上優美的音樂,簡直就是個小姑娘在翩翩起舞。小白是一個不太規則的長方體,其中,它長7厘米,寬4厘米,厚一厘米左右。小白身上有六個按鈕,它們分別是:開關按鈕、確定按鈕、待機按鈕、上翻按鈕、播放按鈕以及下翻按鈕,在播放按鈕正上方有一個小正方形,上面還有許多小洞洞,我想那應該是發音的吧!小白和一枚雞蛋比起來,可輕多了,它可以帶在身上,不像那些錄音機這么大,這么重。 小白不但外形漂亮,而且我和它在生活中還是一對兒形影不離的好朋友呢!每當我孤獨、寂寞的時候,小白總是陪伴我;每當我高興時,我不僅和家人分享快樂,我還和小白一起分享快樂。小白也需要我,有的時候,小白沒電了,它都會響起“嘟嘟”的警告聲,似乎在說“小主人,我的肚子餓了,快給我吃飯。”有的時候,小白的“裙子”臟了,我都會去拿點兒紙巾,擦去“裙子”的臟痕,它變得非常漂亮,我真是越來越喜歡它了。 小白還有許多的功能呢!里面有一個音樂播放器,我偶爾會下載一些歌曲,仿佛給小白增添了幾件新衣裳。考試之前,我總要聽上一兩首優美的歌曲,放松一下緊張的心情。小白里面還有電影播放,我無聊時,我都看一些有趣的電影,這樣就可以解悶了。里面還有錄音,我每天都會錄音,長大后,我就可以細細的回味小時候的趣事了。小白里面還有一個電子書,有許多書籍我都可以在電子書里找呢!小白真是無所不能呀!我愛你,小白! 音樂播放器設計文檔 在 android平臺上開發音樂播放器是一個全新的挑戰。這次通過 android QQ music 項目實戰,總結出一些方法和經驗,希望能夠對移動平臺的設計尤其是多媒體這塊提供一些有價值的參考和幫助。1.1 項目背景 當今社會的生活節奏越來越快,人們對手機的要求也越來越高,由于手機市場發展迅速,使得手機操作系統也出現了不同各類,現在的市場上主要有三個手機操作系統,Windows mobile,symbian,以及谷歌的Android操作系統,其中占有開放源代碼優勢的Android系統有最大的發展前景。那么能否在手機上擁有自己編寫的個性音樂播放器呢?能的,谷歌Android系統就能做到。本文的音樂播放器就是基于谷歌Android手機平臺的播放器。 Android:是谷歌于2007年公布的開放式源代碼手機系統,它的開放性就優于其它封閉式的手機系統,因此,任何人都可能根據自己的喜好將手機系統中的所有功能重新編寫。這使得越來越多的人關注這個操作系統。本次作品音樂播放器就是基于Android平臺的。 隨著計算機的廣泛運用,手機市場的迅速發展,各種音頻視頻資源也在網上廣為流傳,這些資源看似平常,但已經漸漸成為人們生活中必不可少的一部分了。于是各種手機播放器也緊跟著發展起來,但是很多播放器一味追求外觀花哨,功能龐大,對用戶的手機造成了很多資源浪費,比如CPU,內存等的占用率過高,在用戶需要多任務操作時,受到了不小的影響,帶來了許多不便,而對于大多數普通用戶,許多功能用不上,形同虛設。針對以上各種弊端,選擇了開發多語種的音頻視頻播放器,將各種性能優化,繼承播放器的常用功能,滿足一般用戶(如聽歌,看電影)的需求,除了能播放常見格式的語音視頻文件,高級功能:還能播放RMVB格式的視頻文件。此外,還能支持中文、英文等語言界面。要研究了各種市場上流行的手機播放器,了解它們各自的插件及編碼方式,還有各種播放器播放的特別格式文件,分析各種編碼的優缺點以及各種播放器本身存在的缺陷和特點,編寫出功能實用,使用方便快捷的播放器。目前已經實現的功能有能播放常見音頻文件的功能,如MP3,WAV,等,擁有播放菜單,能選擇播放清單,具備一般播放器的功能,如快進,快退,音量調節等。播放模式也比較完善,有單曲,順序,循環,隨機播放等模式。 一、引入產品定義描述(Application Definition Statement) 相信大多數設計師都有過這樣的經歷:在產品設計過程中,設計師和產品經理不斷 pk,各抒己見,甚至鬧得臉紅 耳赤、拍桌翻臉,最后項目總結時又因達不到“理想目標“雙方深深自責,紛紛表示”缺少交流“。彼此不斷 pk,交流 絕對足夠,只是我們缺少有效溝通的工具。如果能在早期建立共識,口水仗爆發的頻率就會越少,真正花在產品上 的時間也就越多。這一次,我們決定更早地切入,在最開始的產品規劃層面,引入“產品定義描述”(關于 ap-plicationdefinition statement,請參考《iPhone Human Interface Guidelines》)。 注意: ADS 的定義也是一個迭代的過程,外部環境的變化、后續過程產生的問題,都可能對原 ADS 產生影響,需 要重新評估、修正,甚至否定再來,但無論如何,必須確保整個團隊對 ADS 有一個共同的認識。 二、細分場景,從場景推導需求,從需求推導設計 從源頭的戰略層面上建立了統一的認知,我們接下來開展的工作就有根據了。既然核心是解決“移動場景聽歌“的問 題,我們必須首先弄清楚什么是”移動場景“?移動環境和 PC 環境差異甚大,碎片時間的使用更為突出。用戶一天 是怎么活動的呢?每次拿起手機聽音樂都是什么時間?上班的公車上、走路、晚上睡覺前?在這些點上用戶都會做 些什么?簡單的腦暴可以羅列各個可能的使用場景,但還比較粗糙。場景的構想需要建立在高度的認知上,這時候 用研的切入顯得相當關鍵,用戶特征、喜好、使用習慣…對用戶越了解,場景就越能貼近真實、越能發現更多的細 節。這些都為后續的設計決策提供了有力的依據 客觀構建的場景有很多有意思的發現,比如用戶在播放本地歌曲時,挑選第一首歌往往比較猶豫,但對后續播放的 歌曲卻不太在意。從場景仔細分析和推敲,很容易就可以明確產品的需求,對應上述的發現,推導如下需求:為用 戶提供“馬上聽歌”按鈕引導用戶直接聽歌。需求的推導因為有用研的切入,避免了太多的個人情感因素。 三、敏捷原型設計,適應與借鑒并行 用研的輸出以及前面的 ADS 定義為功能篩選和設計取舍提供了強有力的決策依據。在需求框架大致決定的時候,我們接下來就進行方案設計了。正所謂“一圖勝千言”,原型有時候會比面面俱到的文檔更直觀。不同的階段,我們 會進行不同精度的原型設計: 在原型迭代的過程中,需要注意 android平臺的 UI 尷尬。與其他平臺(iPhone、symbian、windows mobile)不同,an-droid 更加開放,不同的廠商不同的 ROM 版本界面規范并不統一。如果簡單地將其他平臺的設計規范移植過來,產品體驗可能會和整個系統“格格不入”。借鑒了 android平臺的一些優秀 app(比如 twitter 和 new york times)的 設計策略,我們決定“適應與借鑒并行“:在大的基礎體驗上,保證與系統體驗一致,尊重平臺使用習慣;在細節體 驗上,盡量克服系統的操作困難,保證局部體驗的流暢。 四、視覺方案 在整個設計過程中,我們嘗試了多套風格方案,比如“夢幻光影”、“清爽夏日”、“木質桌面”“藍色海洋”等等,由于 beta1 開發時間有限,最后選擇了偏深綠色主色調的“夢幻光影”作為默認皮膚,這里奉上其他未曾謀面的方案,供 參考。 4.1 主要界面模塊劃分 視覺方案的第一步是對界面各模塊和控件進行作出符合審美原理和需要的的合理劃分和尺寸設定,這里重點會落在 正在播放界面和歌曲列表界面兩塊,雖然兩個界面功能和承載的信息都不相同,但是在造作上兩個界面跳轉和切換 是緊密關聯的,在各模塊劃分和空間比例上兩個需要統籌安排,一方面考慮上下同樣尺寸的“標題行”和底部“控制行 / tab 行”一方面要考慮歌曲列表界面的列表選擇合適的行高和行數。在保證每一行歌曲信息能夠有足夠的空間顯示 整個界 從上圖區域劃分和比例可以看出,播放器界面,封面/歌手圖片的中心點在整個界面的高度是 296,相對于面的高 480,這一比例基本是處在 0.618:1 的黃金分隔點上。4.2 正在播放界面 用戶使用音樂播放器,最大的關注點一般會落在正在播放/播放器界面上,這塊在視覺上是整個產品的核心區域,在很大程度上代表了整款軟件的品質、品位和風格信息表達。而專輯封面/歌手頭像又是正在播放界面的視覺中心,因此這塊在設計上花了比較重的筆墨,用細膩的光照效果與晶瑩剔透的質感精心營造了一種符合我們 QQ 音樂在手 機移動操作平臺上的氣質的效果。 4.3 系統菜單 icon 菜單選項 icon 是另外一個視覺信息傳達比較重要的地方,對整體風格的形成起著重要作用,這里做了兩種效果的 嘗試,一種 A 方案:是空心邊框形式,看起來彈出菜單很輕盈,一屏 6 個選項帶文字不會覺得擁擠,缺點是單個 圖標的輪廓有的地方不連貫,有可能會造成辨識度降低。另外最后選用的方案 B 是實心剪影的形式,這種表現方式 整個 icon 看起來很整體,比較飽滿,識別度較高,不過如果一屏圖標過多的話可能會稍有擁擠的感覺,但如果以 縮小的方式處理,對于手指觸摸操作來說是不合理的,這里 icon 作了圓角處理和鏤空實心均衡化處理,能在視覺 感受上弱化一下可能會產生的擁擠感。 4.4 出現“水波紋”的問題 色彩顯示效果上 Android 系統的手機由于硬件和技術上的限制和問題,會在某些情況下產生令人抓狂的水波紋問題,在嘗試的過程中大致總結了容易造成水波紋的漸變使用,如上圖左邊兩個圖塊:如果使用規則的徑向漸變,程序貼 圖后極容易出現水波紋,另一種情況是如右邊的兩圖塊:漸變色差值過小,就是說漸變特別的細膩不顯著的話也很 容易在切圖程序貼圖后出現明顯的水波紋。所以后面在配色和設計過程中可以據此避免盡量這樣的情況出現。 4.5 最終選用方案: 五、后記 (1)通過對Android手機平臺的音樂播放器軟件的開發,使我對Android音樂播放器系統的整體設計有一個深入的了解,對整個流程也會有一個清晰的認識。開發Android音樂播放器,要抓住開發的核心部分,音樂播放器大體由播放主界面、播放列表、菜單、播放設置、文件瀏覽、歌曲搜索六大核心組成,只要掌握了這六部分的開發,音樂播放器就能初具規模。而其它的功能都是在這六個功能的基礎上去補充添加的,但是這是功能的確是必不可少的功能,否則就不能算是音樂播放器了。 (2)音樂播放器系統實現了播放器的基本功能:播放,暫停、停止、上/下一首、音量調節、歌詞顯示、播放模式、歌曲搜索、文件瀏覽器、播放列表查詢等功能。運用的系統平臺是現今最熱門的Android系統,是一個開源的基于Linux系統的手機平臺。是以Java語言編寫+SQLite數據庫支持+SharePreference配置文件的組合方式進行數據管理。實現了音樂播放器的系統編程。 (3)本次程序設計,對播放器的系統結構框架做了精心的構思與設計,采用主要開發工具是Eclipse3.5+Java語言的支持,Android Development Tool的插件,和Android SDK2.1版本的全面結合,才使整個音樂播放器系統得以實現。 (4)總之,經過幾個月的Android系統技術知識的學習和對音樂播放器的構思與設計,使我對Android系統有了一定的了解,讓我對Android系統上的開發流程和開發模式有了深入的了解,這對我以后的Android項目開發有很大的幫助。參 考 書 籍 《Java API文檔》 《Android 系統原理及開發要點詳解》 作者:韓超,梁泉 著 《Android SDK開發范例大全》 作者:郭宏志 著 《Android Google API開發文檔》 作者:Google官方 《Android Application Development》 出版社: O’Reilly 《Java編程思想think of java》 作者:Bruce Eckel 《手機軟件研發培訓教材》 出版社:極地星空3G通信學院 參 考 文 獻 [1] 張孝祥著. java就業培訓教程[M].北京:清華大學出版社,2007.[2] 余志龍編著.Google Android SDK開發范例大全[M].北京:人民郵電出版社,2009-7-1.[3] E2ECloud工作室著.深入淺出Google Android[M].北京:人民郵電出版社,2009-08-1.[4] 靳巖 姚尚朗著.Google Android開發入門與實戰[M].北京:清華大學出版社,2009-07-01.[5] 高昂著.支持動態語言的Android平臺[M].北京:人民郵電出版社,2009-05-07.[6] eoe.Android開發社區.http://. 2010-04-10.[9] 高煥堂編.Android 應用框架原理與程式設計(第三版)[M].北京:清華大學出版社,2008-10-03 [10] 楊豐盛主編.Android 應用開發揭秘[M].西安:機械工業出版社,2010-01-25 [11] XML解析方式DOM、SAX之比較.http://wghjay.javaeye.com/blog/519955.2009-11-18.名詞術語: JDK Java Development Kit Android 基于Linux操作系統的手機平臺 SDK Android Software Development Kit ADT Android Development Tool Anroid開發工具 IDE Intergrate Design Environment 集成開發環境 ADB Android Debug Bridge 調試橋 AVD Android Virtual Devices Android虛擬設備 DDMS Dalvik Debug Monitor Service 調試監視服務 AIDL Android Interface Description Language Android接口描述語言 xmlns XML NamePace XML命名空間第二篇:音樂播放器項目報告
第三篇:音樂播放器報告
第四篇:音樂播放器作文
第五篇:電信-音樂播放器