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