1. ข้อกำหนดไฟล์เนื้อเพลง NCN (.lyr)
ไฟล์เนื้อเพลง NCN .lyr เป็นไฟล์ข้อความแบบแบ่งบรรทัดสำหรับระบบเพลงคาราโอเกะไทย ไฟล์นี้ **ต้องถอดรหัสด้วยรหัสอักขระ Windows-874 (TIS-620)** เพื่อให้แสดงผลสระและวรรณยุกต์ภาษาไทยได้อย่างถูกต้องโดยไม่ล้มหรือเพี้ยนเป็นตัวต่างดาว
โครงสร้างบรรทัดในไฟล์ .lyr
- 1บรรทัดที่ 0 (ชื่อเพลง): บันทึกชื่อเพลง
- 2บรรทัดที่ 1 (ศิลปิน): บันทึกชื่อศิลปินหรือผู้ขับร้อง
- 3บรรทัดที่ 2 (คีย์เพลง): บันทึกคีย์ดนตรีเริ่มต้น
- 4บรรทัดที่ 3 เป็นต้นไป (เนื้อร้อง): ข้อความเนื้อร้องแบ่งตามท่อนเพลง โดยเนื้อร้องจริงที่จะนำไปเรนเดอร์บนหน้าจอจะเริ่มต้นตั้งแต่บรรทัด Index 3 เป็นต้นไป
2. อัลกอริทึมการเชื่อมโยง: .mid, .lyr และ .cur มาสร้างเนื้อร้องพร้อมเวลาได้อย่างไร
คำถามสำคัญในการพัฒนาระบบคาราโอเกะคือ: ไฟล์แยก 3 ไฟล์ (.mid, .lyr, .cur) มาเชื่อมโยงกันอย่างไรให้กลายเป็นเนื้อร้องที่ปาดสีตรงตามจังหวะดนตรี? นี่คืออัลกอริทึมทีละขั้นตอนที่ใช้อยู่ในระบบ:
ขั้นตอนการแมปปิ้งตัวอักษรเข้ากับเวลา MIDI Tick
- 11. อ่านความละเอียดเวลา PPQ: เครื่องเล่นถอดรหัส Header ของไฟล์ MIDI (
MThd) เพื่อดึงค่าความละเอียดเวลาticksPerBeat(เช่น 480 PPQ) - 22. แปลงเคอร์เซอร์เป็นเวลาจริง: อ่านไบนารีจากไฟล์
.curแล้วแปลงเป็นเวลา MIDI Ticks จริงด้วยสูตร:ticks[i] = Math.round((cursor[i] * ticksPerBeat) / 24) - 33. แยกเนื้อร้องจริงออกจาก Header: แยกบรรทัด 0-2 เก็บเข้า Metadata แล้วนำบรรทัดตั้งแต่ Index 3 เป็นต้นไปมาเป็นข้อความเนื้อร้อง
- 44. จับคู่ตัวอักษรทีละตัวแบบ 1-ต่อ-1: นำเนื้อร้องแต่ละท่อนมาเติมช่องว่างปิดท้ายและแยกตัวอักษรทีละตัว จากนั้นดึงค่าเวลาจากอาร์เรย์
ticksมาเข้าคู่กับตัวอักษรทุกตัว (รวมสระ วรรณยุกต์ และช่องว่าง) แบบเรียงลำดับต่อเนื่อง 1-ต่อ-1 - 55. ไฮไลท์เรียลไทม์บนหน้าจอ: ขณะดนตรีเล่น ระบบเรนเดอร์จะเปรียบเทียบเวลา
currentTick >= event.tickเพื่อเปลี่ยนสีตัวอักษรบนหน้าจอแบบเรียลไทม์