เปียโนตัวนี้ใช้ Web Audio API สร้างเสียง มี MIDI Parser ในตัวที่อ่านไฟล์ .mid โดยตรง
Standard MIDI File (SMF) ประกอบด้วย Header + Track Chunks ใช้ Variable Length Quantity ในการอ่าน delta time
function parseMidiFile(dataView) {
// "MThd" + header info → format, trackCount, division
// "MTrk" + events → deltaTime + status + data
// Note On (0x90) → note, velocity
// Note Off (0x80) → note, velocity
// Meta 0x51 → Set Tempo
// seconds = ticks / (ticksPerBeat * (bpm/60))
}
MIDI 21 (A0) ถึง 108 (C8) = 52 คีย์ขาว + 36 คีย์ดำ. กว้างปรับอัตโนมัติตามหน้าจอ
แบ่งคีย์บอร์ดเป็น 2 ส่วน แต่ละส่วนใช้ Instrument ต่างกัน คลิกที่คีย์เพื่อกำหนดจุด Split
| เครื่อง | Osc | Attack | Release |
|---|---|---|---|
| 🎹 Piano | Sine ×1 | 0.005s | 0.8s |
| 🎛️ E.Piano | Sine ×1 | 0.010s | 0.6s |
| 🎻 Strings | Sine ×1 | 0.050s | 1.0s |
| 🎼 Organ | Sine ×1 | 0.003s | 1.2s |
| 🪘 Harpsichord | Sine ×1 | 0.003s | 0.3s |
MIDI → Scheduler setInterval(50ms) → Max 8 notes/tick + 4ms stagger → Single oscillator + Linear ADSR (no click) → Compressor -26dB + Master Gain 0.40 → Polyphony cap 16