| ข้อมูลจาก 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
 
 // จะได้มีกำลังใจลองทำซักทีโปรแกรมคาราโอเกะ ฮา ฮา ฮ่า
 
 
 |