ข้อมูลจาก  http://sukoom2001.exteen.com/20050216/cur-nick-karaoke 
โดย sukoom2001 
------------------------------------- 
รูปแบบไฟล์ CUR ของ nick karaoke 
posted on 16 Feb 2005 00:23 by sukoom2001 อยากเขียนโปรแกรมสำหรับร้องเพลงคาราโอเกะบนลีนุกมานานแย้ว 
แต่พบว่า ไฟล์ cur ของ nick karaoke นี่มัน มัน มัน 
มันไม่เป็นมาตรฐาน คือ เมืองนอกเขามักใช้ไฟล์ .kar กัน 
แต่ใน nick ใช้ .cur กับ .lyr แทน 
หาแทบตายว่า cur มันเก็บข้อมูลยังไง โชคดีไปเจอมา 
จดไว้ จดไว้ 
//////////// ข้อความจากเว็บของ Nick karaoke  
 
How to Read .CUR, .LYR, .MID 
 
.CUR เป็น MIDI Time Step ที่ผมออกแบบไว้เอง เป็น ข้อมูลแบบ WORD ( 2 Byte ) ต่อกันในแบบ Binary ไฟล์ เป็น Step ที่มีการลาก หรือ ปาดเนื้อเพลง เวลาอ่านค่าจาก ไฟล์ ต้องอ่าน มา 2 Byte ต่อกัน  
โปรแกรมตัวอย่างข้างล่างนี้ จะดึงข้อมูลมาทีละ Byte แล้วมาต่อกัน เป็นค่าเวลา แล้วเก็บในตัวแปร ที่เตรียมไว้ในแบบ Array  
ท ุกครั้งที่มีการเลื่อนของตัวอักษร ที่เลือกว่าปาดเนื้อเพลง โปรแกรม Karaoke จะเก็บค่าเวลาลงใน File นี้ ดดยดูว่า ณขณะนั้น MIDI Time เป็นเท่าไร  
เวลาที่โปรแกรม karaoke เล่นเพลง ก็จะคอย ตรวจเวลาใน MCI ว่าถึงเวลาที่ต้องปาดเนื้อไปที่ตัวอักษรต่อไปหรือยัง โดยเปรัยบเทียบกับค่าใน CUR นี้  
การปาดเนื้อจะนัดทุกตัวอักษร สระ และรวมนับการขึ้นบรรทัดด้วย เช่นมีเพลงที่เนื้อเพลง 10 บรรทัด 250 ตัวอักษร จะมี CUR ประมาณ 250+10 ( ไม่รวม 4 บรรทัดแรก )  
.LYR เป็o Text ไฟล์ธรรมดา บรรทัดที่ 1 เก็บชื่อเพลง, บรรทัดที่ 2 เก็บชื่อศิลปิน , บรรทัดที่ 3 เก็บ Key เพลง , บรรทัดที่ 4 ไม่ใช้, บรรทัดที่ 5 - บรรทัดสุดท้าย เป็นเนื้อเพลง เมื่อประกอบกับ MIDI ก็จะเป็น KARAOKE , MIDI ไม่ต้องทำอะไรมาก ใช้ WINMCI เปิดก็จะใช้ได้เลยครับ สำหรับวิธีเปิด .CUR, .LYR ผมได้คัดลอก Code ให้มาลองดูเป็นตัวอย่างข้างล่างนี้แล้ว เพื่อจะได้เป็นประโยชน์กับ บางท่านที่สนใจในการเปิดอ่านไฟล์เหล่านี้ เขียนไว้เป็น VB นะครับ เป็นตัวอย่างเล็กๆ ที่ ใช้อ่านไฟล์ มาเก็บไว้ในตัวแปร Array ไว้  
 
 
Indent อาจจะไม่ดีนะครับ เพราะผมไม่ได้ใส่ Space ให้  
 
Sub LoadCursor()  
'--- Load Cursor  
'ตัวแปร Tmpb1, Tmpb1 เป็น Byte อ่าน Data จาก CUR ที่ละ Byte มาประกอบกันเป็น WORD  
'  
Dim Tmpb1 as byte, tmpb2 as Byte  
ReDim Cursor(0) 'เตรียม Array สำหรับเก็บค่าเวลา  
filenum = FreeFile 'เตรียมเปิด File ดดยกำหนดเลขที่ไฟล์ว่าง  
 
Open CursorPath & "\" & SongStr & ".cur" For Random As filenum Len = 1  
totalLine = 0  
If Err = 0 Then  
Do Until EOF(filenum)  
 
Get filenum, , tmpb1 'Byte ที่ 1  
Get filenum, , tmpb2 'Byte ที่ 2  
If Not (Asc(tmpb2) = 255) Then 'ท้ายไฟล์ Byte ที่เป็นเลขคู่ จะมีค่าเป็น &HFF  
ReDim Preserve Cursor(totalLine + 1) 'ขยาย Array สำหรับเก็บค่าเวลา  
'ใส่ ASC เพื่อถอดค่าที่อ่านมาได้เป็นตัวเลข เพราะค่า Byte ที่อ่านมาได้จะเป็น ตัวอักษรขนาด 1 Byte แล้วคูณด้วย 256 หรือ Shift 16 Bit  
Cursor(totalLine) = Asc(tmpb1) + Asc(tmpb2) * 256  
totalLine = totalLine + 1  
End If  
Loop  
Close #filenum  
 
End If  
 
End Sub  
 
Sub LoadLyrics()  
'--- Load Lyrics  
'  
'  
 
filenum = FreeFile  
 
Open LyricPath & "\" & SongStr & ".lyr" For Input As filenum  
totalLine = 0  
repi = -1  
If Err = 0 Then  
Do Until EOF(filenum)  
 
ReDim Preserve Lyric(totalLine + 1)  
Line Input #filenum, tmpstr  
Lyric(totalLine) = tmpstr  
totalLine = totalLine + 1  
 
Loop  
Close #filenum  
End If  
End Sub 
  
// จะได้มีกำลังใจลองทำซักทีโปรแกรมคาราโอเกะ ฮา ฮา ฮ่า
 
   |