艾鍗學院Android產業訓練專班成果發表
第3組: K歌Bar
行動KTV點歌APP (錢櫃、好樂迪、金嗓.支援)
Version: 1.0A
Release Date: December 05h 2011
開發組員 林育州 陳禮群 牟俊霖 指導老師: Jarey 開發時程 課程學習訓練: Java程式設計課程-30小時 + Android應用程式開發課程-45小時 實作開發時間: 3週半(含專題規劃討論與文件撰寫)
Table of Content
1產品描述與功能定義
1.1產品摘要
想要歡唱KTV,你可以選擇在家裡買一台KTV播放器(金嗓、點將家、KOD),或是到坊間的KTV包廂(錢櫃、好樂迪),或是一些戶外投幣式KTV系統。 愛唱歌的您一定常會遇到一些困擾,點歌本好大一本又厚又重,翻來翻去總是找不到我想唱的歌曲曲號。到KTV包廂想要點歌得到KTV點歌系統旁去選歌,但點歌器只有一台,每人都要輪流排隊點歌,想要透過點歌本點歌,但是包廂內昏暗的燈光讓我眼睛看的好吃力。 這時你可能會思考,如果我有一個專屬的點歌器,可以隨時方便我,查歌、切歌、插播、點歌,那該有多好。以上是大多數人在歡唱KTV時所會遇到的問題,而本次的專題將思考如何利用智慧型手機結合APP軟體,來解決上述傳統KTV系統所帶來的不便。
圖1-1: 系統應用圖
圖1-1為本專題的系統應用圖,從圖中可以看到傳統的KTV點播器,除了要有點歌器外還得要有好幾本的點歌本。而本專題(K歌Bar)即是利用用APP軟體,將歌本建立在APP資料庫中,如此使用者可以直接利用APP快速的查尋歌曲,或是將常點的歌曲加入我的最愛中。而搖控器的部份則透過一個聲波轉IR的模組實現,之所以要選擇使用AUDIO轉IR的技術,主要是因為紹大多數的智慧型手機Audio的接頭都是設計在手機的頂部,另外Audio是所有的手機都會有的,同時也不會有API相容性的問題,如果選擇使用的是USB轉IR,那麼Android手機必須要到2.3.4以上的版本才會支援ADK套件。另外使用USB轉IR的成本較高,需要有顆MCU控制器,週邊電路也會比較複雜點,而使用Audio to IR,則只需要一個OPA放大器,與一些被動元件,成本比USB的模組相對低很多。
1.2市場應用分析
圖1-2: 錢櫃官方APP使用評價
圖1-3: 好樂迪官方APP使用評價
1.3主要的功能定義
u快速批次點歌(一次同時輸入多首歌曲)
u加入我的最愛歌本
u依歌星名稱,反查該歌星所有的歌曲
u字首查尋(依字部查尋歌曲)
u快速搜尋歌曲(輸入歌曲部份名稱即可)
u男女歌手、團體、國台英日語歌曲分類
u支援多家KTV系統搖控器控制碼
u支援多家KTV系統歌曲編號
u支援離線歌曲點播與查尋(資料庫位於手機內)
u可外接聲波轉IR 紅外線發射模組。
2.1軟體架構方塊圖
圖2-1為K歌Bar的軟體架構設計,由圖中可以看到我們將軟體切分為四個層次,分別為:
1.Activity應用層
最上層綠色部份為Activity頁面層,負責呈現UI介面提供給使用者操作。
2.IO控制管理層
由於不同家KTV系統的搖控器編碼不同,連同歌本上歌曲的編碼也不盡相同。因此我們必須設計其中個IO控制層,提供上層Activity一套標準一致化的操作介面,IO層在依照用戶一開始選擇的KTV系統來做不同指令與歌碼的轉換動作。
3.Remote Service背景服務程式
接收來至IO層的指令,並將對應要輸出的IR指令,轉換出對應搖控器的聲波,在將聲波發送至耳機輸出。由於歌曲號碼通常為4~5碼,因此Service會在背景連續的發送每個代碼的聲波,最後會在發送出輸入鍵的聲波代碼。KTV播放系統會持續接收到用戶點歌輸入歌曲號碼的指令,最後收到輸入指令時,便會將歌曲加入到待播歌單中。
4.資料庫控制管理層
目前本系統己收入數千首的歌曲資料庫,要同時管理不同KTV業者的資料庫,同時還必須能提供許多不同的點歌查尋方式(字首、歌手、男女分類..),因此資料庫的設計將相當的複雜,同時必須要能提供許多不同的Query方式。為此我們另外設計了一套Data Base Adapter介面,將複雜的DataBase操作全都包在Data Base Adapter類別之中,另外提供一套更高階容易呼叫使用的介面給Activity應用層呼叫存取。
圖2-1 軟體架構方塊圖
圖2-2為此專題的部份資料庫表單設計,我們利用關連式資料庫設計,對表單進行了正規化處理,並預先載入了上千首的歌曲資料(點播代碼、歌手、歌名..)。不同的系統對於同一首歌曲的代碼定義可能會不同,因此使用者可以透過手機軟體切換目前所正在使用的KTV系統,資料庫會依用戶的系統選擇自動提供相對應的代碼點播。
圖2-2 關連式資料庫部份表單設計
2.2UI介面設計
由於UI介面相當的主觀,在開發初期總是會不斷進行修修改改,因此我們先行設計了一系列的UI模型。下列圖片為開發初期所繪製的各頁UI模型,我們透過這些模型來進行討論與修改,並撰寫一些範例來一頁頁的驗證其操作方式是否流暢順手。最後在將這模型實際的進行XML Layout於Android系統上。
圖2-3 開發初期的UI模型設計
下圖為實際將UI模型透過Android Layout Edit工具,將每個頁面編成XML Layout檔。在實際開發時我們必須設計一些圖片Icon,將原本模型沒有描述的細節部份補足。另外Layout的排版控制也是個很大的難提,要如何設計在不同大小尺吋的手機畫面上,都能有一致的操作畫面,這點花費了我們不少的時間與精力去做調整設計。
圖2-4 將UI模型實作Layout
圖2-6為軟體操作流程圖,使用者先於設定頁決定目前要使用的KTV系統平台。接著在主畫面將有四種不同的點歌方式。在不同的頁面之中可以透過Action Bar(圖2-5))來做快速的頁面切換。另外用可以在回播歌曲時反查出該歌手的所有歌曲,這將可以方便使用者瀏覽同一歌手的其它歌曲。
圖2-5 Action Bar
圖2-6 軟體操作流程圖
3.1軟體開發實作
為了能整合多家不同KTV系統歌曲與不同的搖控器型號,因此我們必須建立一套具有彈性的軟體架構設計。圖3-1為依照圖2-1的系統軟體架構疊堆圖所實作出的程式碼。總共有超過50隻以上的Java應用程式,分為9個package目錄。必須在短短的一個月內完成這個不算小的軟體開發,我們必須要有一套可以供所有組員同時進行程式碼開發,並且又不會互相影響到對方程式的協助工作平台。在此我們透過由艾鍗提供的SVN Server,與預先討論設設好的軟體架構與package目錄分類,所有的組員得以同時的進行開發工作。期間我們學習到如何切出SVN分支,如何做SVN主幹與分支的合並,如何解決SVN衝突,如何團隊運作...等等許多寶貴經驗。圖3-1為Eclipse整合SVN版本控制系統。本專案SVN提交(Commit)多達1458次,最後在全體組員的努力下一同完成了這項堅鉅的挑戰。
圖3-1 Android軟體架構實作
圖3-2 利用SVN管理SourceCode協同開發
圖3-3為資料庫的建置方式,由於不同的系統有些歌曲的編號並不盡相同,而資料庫內的資料則必須手動依照我們建立的表單欄位結構一筆筆的填入,所以在此階段我們花費了不少的時間進行資料庫的設計與預載資料的動作。同時我們也建立了數個View Table,預先將所需的欄位,從不同的關聯性表單中進行整合查尋,以方便在Android軟體查尋與存取操作。
圖3-3 歌本關資料庫建立
圖3-4與為紅外線發送載波格式,我們利用聲波做為載波發送紅外線訊號,而不同的紅外線搖控器所使用的Protocol格式不盡相同,圖3-4為較常見的NCR紅外線Protocol格式。圖3-5為我們為不同的搖控器定義的不同的Profile檔,APP軟體可以藉由讀取該Profile檔來決定發送的聲波發送的Pulse間格的時間,以利產生不同系統的紅外線Protocol。
KTV搖控器的每個按鈕的編碼代號,則必須透過實際的錄制,將每個按鈕的Data Code錄制進Profile檔中。
3.2硬體開發實作
圖3-6為本次專題所需使用到的H/W,Audio to IR Module,由艾鍗提供印刷電路版與所需的電子原件,我們必須透過手工焊接的方式將元件一一的焊上去。最終成品的大小約莫一個半十元硬幣大小(2.2cm x 4cm),並透過一個6V的迷你電池推動。電源主要是提供給OPA放大器用,由於手機麥克風輸出的功率通常很小,為了可以提高發射距離,與訊號的穩定度,因此必須在透過一顆OPA放大器將訊號放大。
圖3-6 硬體電路版設計與上件
完成的電路版需要透過示波器量測其波型訊號是否正確,圖3-7與3-8為調整波形的過程。在量測實驗的階段,我們發現到如果手機本身的音量開的太大,就容易造成HighàLow的訊號下降的太慢(會有尾波),進而造成訊號的誤判。初期我們發現發射出去的資料會漏掉,經過了示波器量測後才發現是音量的問題,最後我們調整了發射器的電路來解決這個問題。
圖3-7 紅外線輸出波形驗證與調校
圖3-8 紅外線發送波形調整
圖3-9為實際將H/W模組連接上手機,並與K歌Bar APP結合運作,初期我們透過自製的Serial Port IR接收器利用PC先進行接收實驗,以確定發射器送出的資料正確性。接著我們將該專題與另一組負責開發Android KTV底座的組員結合應用(圖3-10),利用Arduino平台連接IR Receiver進行解碼測試,最後解碼出的資料在透過Arduino ADK介面透過USB將資料傳送回Android平版上進行點歌。
圖3-9 實體手機發送驗證
圖3-10 與Android 平版KTV系統整合測試
4成果展示圖
配合艾鍗Droid KTV系統搖控操作
詳細整合應用請參考另一篇Droid KTV專題介紹
http://sites.xms.com.tw/board.php?courseID=143&f=doc&folderID=839&cid=7640
5更多Android專題