[Android課程商品化應用]--行動KTV MIDI歡唱系統擴充底座(ADK應用)-艾鍗學院
by 艾鍗學院, 2011-12-01 20:34, 人氣(9306)
艾鍗學院Android產業訓練專班成果發表
第4組: DroidKTV系統
Android KTV MIDI歡唱系統擴充底座
(Android Arduino ADK 商業應用專題)
Version: 1.0A
Release Date: December 05h 2011
開發組員 | |||
黃弘琦 | 張凱鈞 | 蕭向涵 | |
指導老師: Jarey | |||
開發時程 | |||
課程學習訓練: | Java程式設計課程-30小時 + Android應用程式開發課程-45小時 | ||
實作開發時間: | 3週半(含專題規劃討論與文件撰寫) |
專題摘要:
本專題主要用意在取代傳統建置大型KTV所需的伴唱機台、點歌本、搖控器和電視TV等復雜的組合。當PAD與外掛盒(底座)結合時(透過USB),即為一台完整之KTV系統,PAD與外接盒(底座)分離時,即轉換為一般的PAD應用。為達到上述的目的我們將使用Arduino Mega2560 搭配Google ADK(Android Open Accessory Development Kit),透過USB為做為我們底座與Android平版的通訊管道,而整個KTV系統將會為為Android平版的一個USB週邊裝置。
※ Pure Java MIDI decode
Android本身函式庫中並未包含Midi Node的解碼器,因此我們自行參考Midi檔案規格文件(高達五百多頁),以純Java的方式自動撰寫開發解碼器。
Midi SPEC下載
Midi解碼的難度在於,除了必須要撰寫解碼程式去分析二進位資料外,你還必須得有一些基本的音樂概念你才能了解解出來的資料所代表的函義,例如tempo、拍子、拍式、樂章、曲調....,此外除了標準的Mdidi Node要解之外,還有包含了一些特別的System Exclusive Message需要進行處理,這些message通常是與midi IC控制有關,可以藉此去控制升降Key,曲調變化...等等。
上圖為其中一小段Midi的Head檔結構,由此可以看出自行開發解碼器必須要有相當程度的耐心,我們每天必須與這些二進位資料奮戰,以確認每個區塊解出的資料是正確的。另外解出正確的資料是一回事,要如何將這些資料依照正確的曲調與速度撥放出來又是另一回事,這將就需要有些音樂的概念才知道如何利用利用拍式、tempo與每小節的拍數,去換算出每一個midi node(一個音)所需要撥放出來的時間點與要放的時間長度。 因此midi的播放其實其實不像是外人認為直接呼叫midiplay直接play就好了,而是完全自己以程式碼去撰寫執行緒,一個個的音自行控制播放放出的速度,十六軌的音必須完全的同步,才不會在播放輸出時造成聲音delay或破音。
上圖我們在開發過程中所撰寫的一隻小型測試程式,一般傳統的midi檔案是不會有包含歌詞的軌道,只有KTV營業用的midi會包含了歌詞軌道。因此除了一般的Midi Node解碼外,必須另外在對歌詞的資料進行處理。其困難之處在於,一般歡唱時歌詞必需要預先能顯示下一行的歌詞,同時一次必須能顯示二行的歌詞在MV畫面上,因上在解碼時必須先解出下一行的詞,並將每一行的詞出現時間安置在前一行的最後一個音結束時。我們在此利用了類似video訊框解碼的演算技巧去解決了此一難題。
同時歌詞在播放時須要有走字渲染變色效果,一般的KTV在走字部份的顏色變化如下:
還未唱到的歌詞: 白字黑框
己唱過的歌詞: 藍字白框
而為字幕加上框並不如想像中的容易,一般人可能會想說重複二個一樣的字設定為不同顏色疊上去就好了,但實際試過後你會發現,字型中間會全都糊成一團,因為中間的細節線條會全都沾染在一起,經過我們不斷的改良測試後終於發現其中包含了一些特舒的技巧才能將字幕加上框線後依然可以看起來很清析。 另外走字的速度必須要搭配每一個Node 音送出的時間,要達到完全同步,需要使用到許多執行緒控制的技巧才能達到 : 字幕+走字渲染+Midi Node輸出 三者完全同步的境界。
2011年5月10 Google IO 2011大會發布Android3.1平版作業系統,同時間也正式放出了全新的Android USB週邊設備開發套件(Android Open Accessory Development Kit)。
本次專題將透Arduino Mega2560與Android 3.2平版連接,透過ADK開發套件,讓平版能透過USB線與Arduino溝通,整個KTV系統套件將會成為Android平版的一個USB週邊設備,開發商可以將其整合到喇叭之中就可以變成一個KTV Dock底座,使用者只需將平版的USB接頭與其底座連接,馬上就可以將平版升級為家廳KTV系統,甚至可以透過平版的HDMI介面將畫面轉播到家中大型LCD電視上顯示歡唱。
※ 紅外線接收
本專題為配合前一組專題(K歌 Bar)萬用KTV紅外線點歌器,因此在Arduino上接了一組紅外線接收器,使用者可以透過前一組的K歌Bar專題APP,搭配艾鍗自行開發的Audio to IR的H/W模組,讓你的手機馬上可以變身為點歌本,想要歡唱就在也不用大家搶著去翻傳統又厚又重的歌本,所有的歌曲資料全都會包K歌Bar APP資料庫中,隨時可以輕鬆的查出你想歡唱的歌曲,K歌Bar同時也支援好樂迪與錢櫃的點歌系統,你也可以帶著K歌Bar去錢櫃、好樂迪直接透過手機點歌,在也不用和人搶點歌機了(目前己內建一千多首歌曲編號記錄)。
影片:開發技術與過實際運作流程詳細介紹
展場當天展示影片:
完整曲目Demo播放(音效品質與字幕渲染同步評比)
專題報告
系統架構補充說明
MIDI Decode 解說
Demo 給廠商看
向廠商解說系統
向廠商解說系統
開發時期-學員一邊練唱一邊調校系統
更多Android專題
想了解更多Android相關產業應用專題? 請依以下連結至Android專題總覽精華區。