Kilem-Midi 是個線上共同編輯音樂平台網站。
目前只支援 Chrome 瀏覽器
URL: 使用預設帳號進入
房間系統能夠創建共同編輯的房間,供以加入房間的人一起共同編輯。
- 使用關聯式資料庫處理人與房間互動關係,已加入房間、自己創建的房間以及公開的房間
- 簡易斷句搜尋引擎,快速查找已存在的公開房間
在編輯器裡能夠新增、刪除、及編輯音樂的音符。
- 畫面上的位置與時間的關係轉換邏輯處理
- 函式處理 midi 物件音軌內所紀錄的音符
- 編輯拖拉的邊界與重複音符邏輯處理
- 編輯後即時儲存於資料庫
提供選擇初始音符長度及格線對位基準的功能。
- 使用svg繪出格線
- 函式計算處理音符對位格線機制
循環播放播放選擇指定區間。
- 設定合適的播放解析度防止一個音符播多次的狀況。 ( 最後設定為64分音符 )
- 確認播放的速度符合 bpm 下的預期 ( bpm 120的狀況 1秒2個四分音符 )
- 判斷 loop 的開關及時間的開始及結束時間。
支持四種樂器的切換及使用。
- 利用 class 管理多個樂器的生成與使用,提高程式可維護性與共用性。
- 可儲存版本,提供版本回溯的服務。
- 利用 socket 以同步新儲存版本的更新成果。
- 關聯資料庫紀錄音軌、使用者的明細。
編輯 bpm 即時控制曲目速度與播放速度 ( 僅房主可使用 )
- 用函式處理循環區間位置、播放時間位置及播放解析度的重新計算。
- 用 socket 同步所有參加者的 bpm ,同時也重新計算以上項目。
操作上鎖機制與人協作音樂,透過聊天室系統互相溝通,避免音樂編輯上的衝突狀況。
- 考慮編輯衝突問題設計出來的機制。
- race condition問題,先鎖先贏的功能實現
匯出成果成midi檔,並使用其他軟體進行混音。
- 利用 Tone.js 將軌道及音符處理成midi檔案。
- 使儲存的音樂結構符合於 Tone.js 的輸出格式。
- Node.js
- Express.js
- RESTful
- socket io
- MySQL
- Redis
- Javascriopt / HTML / CSS
- jQuery
- AJAX
- Audio Context
- Tone.js
- EC2
- RDS
- S3
- CloudFront
- ELB
- Auto Scaling
- HTTP & HTTPS
- DNS
- Nginx
- SSL Certificate (Cloudflare)
- Mocha
- Supertest
- Chai
- Sinon
- Docker
- Jenkins
- Google Oauth third party login
- MVC design pattern