設計一個卡拉ok軟體,用戶能連上server選擇自己想唱的歌曲,開心的唱 ε٩(๑> ₃ <)۶з
還能分享引以為豪的錄音檔給其他用戶聆聽 (*´∀`)~♥
(用戶們自己要小心"胖虎"( ´థ౪థ)σ)
This app is like a box of chocolates. You never know what you're gonna listen.
- SoundTouch
- 音訊編輯C++ library,提供調整pitch、播放速度等功能
- 本專題用於調整音訊的pitch,達到升降key功能
- Install Reference
- Apache Net
- 提供網路連線相關功能
- 本專題用於和FTPS server建立連線、抓取音訊檔
Android Studio 3.3
- Android 版本: 8.0.0
- API: 26
- Ubuntu 18.04.2 LTS (Bionic Beaver)
- Memory:5100MB
- Disk:10GB
- 安裝套件:
- MySQL
- vsftpd
- python-flask
- 作為整個專案儲存資料地方
- 主要使用三張表格
- KaraokeUsers
- 存放使用者資料、帳號與密碼等設定
- 未來會將密碼做hash來增強安全性
- PersonalMusic
- 提供個人錄製音檔建檔與檔案連結
- 搭配FTP來達成雲端存放功能
- PublicMusic
- 提供可以演唱的歌曲
- 包含歌曲相關資訊
- 使用資料庫讓搜尋更加便利
- 搭配FTP來達成手機端的音樂載入
- KaraokeUsers
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
UID | int(11) | NO | PRI | NULL | auto_increment |
Username | varchar(20) | NO | UNI | NULL | |
Passwd | varchar(20) | NO | NULL | ||
ModTime | timestamp | NO | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
PMID | int(11) | NO | PRI | NULL | auto_increment |
PersonalMusicName | varchar(255) | NO | MUL | NULL | |
Path | varchar(255) | NO | NULL | ||
Timestamp | timestamp | NO | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | |
UID | int(11) | NO | NULL | ||
MID | int(11) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
MID | int(11) | NO | PRI | NULL | auto_increment |
MusicName | varchar(255) | NO | NULL | ||
Path | varchar(255) | NO | NULL | ||
Path2 | varchar(255) | YES | NULL | ||
Path3 | varchar(255) | YES | NULL | ||
Artist | varchar(20) | YES | NULL | ||
Gender | varchar(10) | YES | NULL | ||
Language | varchar(10) | YES | NULL | ||
Count | int(11) | YES | NULL |
- 專案儲存音檔地方
- 主要搭配資料庫來達成雲端建置
- 有助於減輕手機端的使用空間,龐大的音樂資料中找尋所需音樂再進行下載
- 使用TLS加密來增強其傳輸安全性
- 主要為串接MySQL資料庫接口
- 提供常用資料庫新增、修改、刪除指令封裝成Restful API方便手機端程式連接
- 連結Server為https://serverIP:port/Function
Function | 輸入參數 | 輸出參數 | 功能介紹 |
---|---|---|---|
Login | username,passwd | UID | UID為-1時登入失敗 |
CreateAccount | username,passwd | UID | UID作為使用者獨一無二編號 |
ChangePasswd | UID,oldpw,newpw | 0:失敗, 1:成功 |
更改密碼 |
QuerySongListByArtist | Artist | Table of PublicMusic | 以演唱者來搜尋相關音樂資訊 |
QuerySongListByGender | Gender | Table of PublicMusic | 以演唱者性別或團體來搜尋相關音樂資訊 |
QuerySongListByLanguage | Language | Table of PublicMusic | 以演唱語言來搜尋相關音樂資訊 |
QuerySongListByCount | Count | Table of PublicMusic | 以點播率來搜尋相關音樂資訊 |
check | NULL | Table of PublicMusic | Debug用途:dump所有音樂 |
QuerySong | MusicName | Only one row of table of PublicMusic | 指定歌曲資訊 |
UploadPersonalSong | PersonalMusicName,UID,MusicName | Path | 上傳個人錄製音樂資訊 |
QueryPersonalSong | UID,PersonalMusicName | Path | 獲取個人錄製音樂資訊檔案位置 |
QueryAllRecords | NULL | Table of PersonalMusic | Debug用途:dump所有音樂 |
RemovePersonalSong | UID,PersonalMusicName | 0:失敗, 1:成功 |
移除個人錄製音樂 |
QueryPersonalSongList | UID | Table of PersonalMusic | 獲取個人錄製音樂列表 |
- 提供用戶以語言、歌手性別、熱門等分類的音樂
- 畫面右上有用戶介面
- 登入前人頭為黑色、登入後會變綠色
- 畫面正下方能選擇是要唱歌還是聽別人存在Server上的錄音檔
- 以上傳時間排序,可以看到是哪個用戶唱的什麼歌
- 用戶未登入前點擊人頭會展示此頁面,用戶可以在此登入或註冊新帳號
- 用戶登入後點擊人頭會展示用戶資訊
- Check upload會列出所有用戶曾上傳過的錄音檔
- 用戶可以播放自己的錄音檔
- 系統會在本地端檢查錄音檔和歌詞是否還在,若否再連FTPS Server下載
- 用戶可以刪除錄音檔(本地端、server都會刪除)
- 在主畫面選擇分類後會列出所有符合分類的歌,依序為歌名、歌手、唱歌次數
- 在剛進唱歌頁面時會檢查網路是連WIFI或是其他網路(4G),若是其他網路會跳出詢問視窗確認是否要下載音訊檔
- 使用動態歌詞,讓用戶能邊看邊唱,不怕忘詞
- 設置多個功能按鈕,如切換原唱/去人聲版音樂、升降半音調、重唱、停止錄音等,可以長壓按鈕看該按鈕的功能
- 錄音停止後會進到本頁面,用戶可以在這對錄音檔和音樂的聲音大小做調整後再存檔
- 用戶可以將錄音檔上傳到Server,分享給其他用戶
- 未登入用戶沒有上傳功能
- 在個人錄音檔或聽其他人的錄音檔頁面選擇音訊後,都會開啟此頁面播放
- 播放錄音的同時,提供動態歌詞觀看
- 加入評分機制
- 可以加入如音準(使用short FFT偵測人聲頻率)、咬字等評分項目
- 讓用戶能使用本地端的音樂,在手機上做人聲分離
- 目前有做出利用android內建的MediaCodec將mp3解碼成PCM,將右聲道聲波反轉加上左聲道聲波達到簡易的去人聲功能
- 一首4分多鐘音樂,需要花個30~40秒在解碼上
- 加入歌曲搜尋、多重篩選功能
- 勞宏斌 P66065011(25%):負責主頁面、用戶資訊頁面、登入註冊頁面、歌曲列表頁面 & 用戶資訊設定
- 王俞婷 P78071507(25%):負責動態歌詞抓取和顯示、設計唱歌頁面UI、程式美化(字體、圖片)
- 方鈞麒 P76074046(25%):負責音訊處理和歌唱頁面功能(eg. 錄音、升降key、音量比例調整...)
- 陳俊佑 P76074436(25%):負責錄音檔頁面、架伺服器(MySQL、FTPS server),設計server和手機端溝通的API