ข้อกำหนดและสถาปัตยกรรม KMID / KLyr XML: เนื้อเพลงสอดไส้ในไฟล์ MIDI
1. ฟอร์แมต KMID / KLyr คืออะไร?
KMID (KAR / KLyr Embedded Format) คือข้อกำหนดไฟล์คาราโอเกะขั้นสูงที่ทำการสอดไส้ข้อมูลรายละเอียดเพลง (Metadata), คีย์เพลง และแทร็กเนื้อร้องพร้อมเวลาแบบลงลึกระดับคำในรูปแบบ XML เข้าไปไว้ภายในไฟล์ MIDI (.mid) ไฟล์เดียวโดยตรง ซึ่งแก้ปัญหาความยุ่งยากของระบบ NCN ยุคดั้งเดิมที่ต้องใช้ไฟล์แยกถึง 3 ไฟล์ (.mid + .lyr + .cur) หากขาดไฟล์ใดไฟล์หนึ่งเพลงจะเล่นไม่ได้หรือไม่มีเนื้อร้อง
2. กระบวนการสกัดและคลายการบีบอัดข้อมูลไบนารี
ภายในลำดับแทร็ก MIDI ข้อมูล KLyr จะถูกซ่อนไว้ใน Meta Text Event (Meta Type 0x01) โดยมีกระบวนการถอดรหัส 4 ขั้นตอนสำคัญดังนี้:
ขั้นตอนการสกัดข้อมูล KLyr จาก MIDI
- 11. ตรวจหา Header Identifier: สแกนหาข้อความใน Meta Event Type 0x01 ที่ขึ้นต้นด้วย
KLyrHdr1(หรือK1LyrHdr) - 22. ถอดรหัส Base64: ดึงข้อความต่อจาก Header และถอดรหัส Base64 ออกมาเป็นไบต์
Uint8Array - 33. คลายการบีบอัด zlib: คลายการบีบอัดข้อมูลด้วยอัลกอริทึม zlib Inflation (pako.inflate) เพื่อให้ได้ไฟล์ไบนารี XML บริสุทธิ์
- 44. แปลงรหัสอักขระภาษาไทย (Windows-874): แปลงไบต์ XML ด้วยการถอดรหัสอักขระ Windows-874 / TIS-620 เพื่อให้แสดงผลสระและวรรณยุกต์ไทยได้อย่างถูกต้อง 100%
3. โครงสร้างผัง XML (XML Schema) ของ KLyr
เมื่อคลายการบีบอัดแล้ว โครงสร้างไฟล์ XML ของ KLyr จะแบ่งออกเป็น 2 โหนดหลัก ได้แก่ <INFO> สำหรับรายละเอียดเพลง และ <LYRIC> สำหรับแทร็กเวลาเนื้อร้อง:
ตัวอย่างโครงสร้างไฟล์ XML ของ KLyr
ตัวอย่างโครงสร้างไฟล์ XML ของ KLyr
<?xml version="1.0" encoding="TIS-620"?>
<SONG>
<INFO>
<VERSION>1.1</VERSION>
<TITLE>ชื่อเพลง</TITLE>
<ARTIST>ชื่อศิลปิน</ARTIST>
<ARTIST_TYPE>M</ARTIST_TYPE> <!-- M: ชาย, F: หญิง, MF: ร้องคู่ -->
<KEY>Cm</KEY>
<TEMPO>120</TEMPO>
<ALBUM>ชื่ออัลบั้ม</ALBUM>
<AUTHOR>ผู้แต่งคำร้อง/ทำนอง</AUTHOR>
<GENRE>Pop</GENRE>
<RHYTHM>Disco</RHYTHM>
<CREATOR>NEXT_SYSTEM</CREATOR>
<COMPANY>ค่ายเพลง</COMPANY>
<LANGUAGE>THAI</LANGUAGE>
<YEAR>2026</YEAR>
<VOCAL_CHANNEL>9</VOCAL_CHANNEL>
</INFO>
<LYRIC>
<LINE>
<WORD>
<TIME>1920</TIME>
<TEXT>เนื้อ</TEXT>
<VOCAL>M</VOCAL>
</WORD>
<WORD>
<TIME>2160</TIME>
<TEXT>ร้อง</TEXT>
<VOCAL>M</VOCAL>
</WORD>
</LINE>
</LYRIC>
</SONG>4. เจาะลึกความหมายของแต่ละแท็กและบล็อก XML
รายละเอียดคุณสมบัติและหน้าที่ของแท็กแต่ละตัวภายในบล็อก <INFO> และ <LYRIC>:
รายละเอียดองค์ประกอบในโหนด <INFO>
<TITLE> และ <ARTIST>
บันทึกชื่อเพลงและชื่อศิลปินผู้ร้อง รองรับภาษาไทยและภาษาอังกฤษสมบูรณ์
<KEY> และ <TEMPO>
ระบุคีย์ดนตรีเริ่มต้น (เช่น C, Cm, Dm, F#m) และค่าความเร็ว BPM เพื่อให้เครื่องเล่นปรับคีย์ขึ้นลงได้ถูกต้อง
<ARTIST_TYPE> และ <VOCAL_CHANNEL>
ARTISTTYPE ระบุเพศผู้ร้อง M (ชาย), F (หญิง), MF (คู่) ส่วน VOCALCHANNEL ระบุแทร็กเสียงร้องนำแนวทาง (เช่น 9 สำหรับ MIDI Channel 10)
ข้อกำหนดโหนด <LYRIC>, <LINE> และ <WORD>
- 1<LINE>: บล็อกรวบรวมพยางค์/คำในบรรทัดเนื้อร้อง 1 ท่อน
- 2<WORD> -> <TIME>: เวลาเริ่มต้นของพยางค์บนฐาน 24 PPQ นำมาแปลงเป็นเวลา MIDI Tick จริงด้วยสูตร:
realTick = Math.round((time * ticksPerBeat) / 24) - 3<WORD> -> <TEXT>: ข้อความพยางค์หรือคำร้องภาษาไทย/อังกฤษ (เช่น 'รัก', 'เธอ', ' Heart')
- 4<WORD> -> <VOCAL>: เพศผู้ร้องในระดับพยางค์ (M/F) ช่วยให้ระบบคาราโอเกะเปลี่ยนสีตัวอักษรปาดสีตามเพศผู้ร้อง (เช่น ชายสีฟ้า หญิงสีชมพู) ในเพลงร้องคู่ได้อย่างสมบูรณ์แบบ!