1. พื้นฐานไฟล์ SoundFont 2 (SF2) คืออะไร?
SoundFont 2 (.sf2) คือมาตรฐานไฟล์ไบนารีสำหรับคลังเสียงดนตรีสังเคราะห์ (Sound Bank) อ้างอิงตามสเปก RIFF ซึ่งบรรจุไฟล์เสียงบันทึกจริงของเครื่องดนตรีชนิดต่างๆ (PCM Waveform Samples) พร้อมพารามิเตอร์สังเคราะห์เสียง เพื่อให้ซอฟต์แวร์สังเคราะห์เสียง (Web Audio Synthesizer) นำไปใช้บรรเลงโน้ตดนตรีจากไฟล์ MIDI
องค์ประกอบหลักภายในไฟล์ SoundFont 2
ตัวอย่างเสียง PCM
ไฟล์บันทึกสัญญาณเสียงจริงของเครื่องดนตรีชนิดต่างๆ (เช่น เปียโน, เบส, กีตาร์, กลองชุด, เครื่องลมม้วน)
Keyzones และ Velocity Layers
การกำหนดช่วงโน้ตบนคีย์บอร์ด 88 คีย์ และเลเยอร์น้ำหนักการกด (น้ำหนักเบาไปหนัก) เข้ากับคลื่นเสียงที่เหมาะสม
ADSR Envelopes และ General MIDI Presets
ควบคุมจังหวะการสั่นและค่อยๆ ดับของเสียง (Attack, Decay, Sustain, Release) และจัดกลุ่มเครื่องดนตรีตามหมายเลขโปรแกรมมาตรฐาน General MIDI (0-127)
2. สถาปัตยกรรม Preload และการดึงข้อมูลเฉพาะเครื่องดนตรี (Smart Slicing)
ไฟล์ SoundFont 2 แบบสมบูรณ์มักมีขนาดใหญ่ตั้งแต่ 100MB ไปจนถึงมากกว่า 1GB การโหลดไฟล์ขนาดใหญ่เข้าสู่หน่วยความจำหลักของเว็บบราวเซอร์พร้อมกันทั้งหมดจะทำให้หน้าจอค้างและสิ้นเปลือง RAM มหาศาล Next Karaoke จึงใช้ยุทธศาสตร์การ Preload และดึงข้อมูล 2 ชั้นดังนี้:
กระบวนการ Preload และตัดดึงข้อมูลเฉพาะ Preset
- 11. ประมวลผลเบื้องหลังผ่าน Web Worker: การอ่านไบนารี SF2, การสแกนดรรชนี RIFF Chunk และการสกัดตัวอย่างเสียงจะถูกส่งไปทำใน **Background Web Worker** เพื่อไม่ให้กระทบการทำงานของหน้าจอหลัก (Main Thread) ทำให้ UI ลื่นไหล 60 FPS
- 22. การตัดดึงเฉพาะเครื่องดนตรีที่ใช้ (Smart Preset Slicing): เมื่อเปิดเพลง ระบบจะสแกนหาเฉพาะเบอร์เครื่องดนตรีที่เพลงนั้นใช้อยู่จริง (Used Programs & Drum Notes) จากนั้น Web Worker จะใช้เทคนิค Binary Slicing (
Blob.slice()) เพื่อตัดดึงเฉพาะตัวอย่างเสียงของเครื่องดนตรีเหล่านั้นออกมาเท่านั้น โดยไม่ต้องโหลดไฟล์ SF2 ทั้งหมด - 33. การบันทึกแคช (IndexedDB / Cache Storage): แพ็กเกจเสียงเครื่องดนตรีที่ถูกตัดดึงออกมาแล้วจะถูกบันทึกเก็บไว้ในระบบจัดเก็บไฟล์ความเร็วสูงของบราวเซอร์ (IndexedDB / Cache Storage) ทำให้เพลงถัดไปที่ใช้เครื่องดนตรีชุดเดียวกันสามารถดึงเสียงมาบรรเลงได้ทันทีโดยไม่ต้องโหลดหรือประมวลผลไฟล์ SF2 ซ้ำ