thaiall logomy background

กระดานแสดงความคิดเห็น

my town
รูปแบบแฟ้ม .cur และ .lyr
ข้อมูลจาก 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

// จะได้มีกำลังใจลองทำซักทีโปรแกรมคาราโอเกะ ฮา ฮา ฮ่า

จากคุณ : บุรินทร์ .
12:15am (1/01/08)
ทความเกี่ยวกับไอทีในชีวิตประจำวัน (Information Technology in Life) ถูกเขียนลงในหนังสือพิมพ์ฅนเมืองเหนือ เป็นหนังสือพิมพ์รายสัปดาห์ เริ่มเขียนปลายปีพ.ศ. 2549 จนถึงมิถุนายน พ.ศ.2560 รวมได้ 611 บทความมีโฮมเพจอยู่ที่ http://www.thaiall.com/itinlife และ http://www.thaiall.com/opinion เพื่อเป็นแหล่งแบ่งปันเรื่องราวที่ได้พบ ได้อ่าน ได้ปฏิบัติ แล้วนำมาเรียบเรียงแบ่งปันแก่เพื่อนชาวไทย และส่งให้กองบรรณาธิการนำไปตีพิมพ์ลงในหนังสือพิมพ์ท้องถิ่นของจังหวัดลำปาง
Opinion แปลว่า ความคิดเห็น วาทะ ความเชื่อ ที่สามารถสะท้อนออกมาให้อยู่ในรูปของวรรณกรรม หรืองานเขียน ที่เรื่องราวจะถูกร้อยเรียงเป็นตัวอักษร ไล่เรียงตามลำดับให้ได้รู้และเข้าใจความคิดความเห็น ที่ไม่เลือนหายไปตามเวลาเหมือนความทรงจำ
version 1.3 (15 ตุลาคม 2566)
Thaiall.com
Thaiall.com