- ' กำหนดรูปแบบตัวแปร
- Dim MidiPath As String
- Dim LyricPath As String
- Dim CursorPath As String
- Dim Change As Integer
- Dim SongStr As String
- Dim StartTime As Long
- Dim TotalCur As Integer
- Dim Lyric() As String
- Dim Cursor() As Integer
- Dim AllPath As String
- Dim n As Integer
- Dim tTime As Long
- Dim txtMidi As String, Bpm As Single, ppqn, Num, Den, Quarter As Double, Timebase
- Dim nDen As Integer
- Dim SetFontSize As Integer
- Dim cn As Integer
- Dim TCount As Integer
- Private Declare Function GetTickCount Lib "kernel32" () As Long
- Sub Delay(D As Single)
- Dim TimeStart As Single
- 'Delay for D seconds
- TimeStart = Timer
- Do
- Loop While Timer - TimeStart < D
- End Sub
- ' เมื่อโหลดโปรแกรม
- Private Sub Form_Load()
- On Error Resume Next
- Form2.Show vbModal
- 'Text1.Text = "D:\Karaoke"
- Text1.Text = App.Path
- Picture1.Width = Me.Width ' กำหนดช่องแสดงเนื้อเพลงกว้างเท่ากับหน้าต่างปัจจุบัน
- Picture1.BackColor = &H80000001 ' สีพื้นของส่วนที่แสดงเนื้อร้อง
- AllPath = Text1.Text ' รับค่า Path ที่เก็บเพลงจาก Text1
- Change = 0 ' กำหนดค่าเริ่มต้นเป็น 0
- List2.Visible = False ' ซ่อน list2 ขณะเริ่มโปรแกรม
- Timer1.Enabled = True ' เริ่มนับเวลาทันทีของ Timer1
- Timer1.Interval = 200 ' ความเร็วในการเพิ่มตัวหนังสือ Title bar เลขน้อยยิ่งเร็ว
- Timer2.Enabled = False ' ปิดการนับเวลาของ Timer2
- Timer2.Interval = 1000 ' กำหนดการนับเวลา 1 เท่ากับ 1 วินาที
- Timer3.Interval = 1000 ' กำหนดการนับเวลา 1 เท่ากับ 1 วินาที
- Call CheckDate ' เรียกส่วนย่อย CheckDate มาทำงาน
- Call LoadFile ' เรียกส่วนย่อย LoadFile มาทำงาน
- Call PlayBreak ' เรียกส่วนย่อย PlayBreak มาทำงาน
- End Sub
- ' ตรวจสอบวัน , วันที่ , เดือน , พ.ศ.
- Sub CheckDate()
- ' ตรวจสอบวันภาษาไทย
- If Weekday(Now) = 1 Then nDay = "วันอาทิตย์"
- If Weekday(Now) = 2 Then nDay = "วันจันทร์"
- If Weekday(Now) = 3 Then nDay = "วันอังคาร"
- If Weekday(Now) = 4 Then nDay = "วันพุธ"
- If Weekday(Now) = 5 Then nDay = "วันพฤหัสบดี"
- If Weekday(Now) = 6 Then nDay = "วันศุกร์"
- If Weekday(Now) = 7 Then nDay = "วันเสาร์"
- ' ตรวจสอบเดือนภาษาไทย
- If Month(Now) = 1 Then Mon = "มกราคม"
- If Month(Now) = 2 Then Mon = "กุมภาพันธ์"
- If Month(Now) = 3 Then Mon = "มีนาคม"
- If Month(Now) = 4 Then Mon = "เมษายน"
- If Month(Now) = 5 Then Mon = "พฤษภาคม"
- If Month(Now) = 6 Then Mon = "มิถุนายน"
- If Month(Now) = 7 Then Mon = "กรกฎาคม"
- If Month(Now) = 8 Then Mon = "สิงหาคม"
- If Month(Now) = 9 Then Mon = "กันยายน"
- If Month(Now) = 10 Then Mon = "ตุลาคม"
- If Month(Now) = 11 Then Mon = "พฤศจิกายน"
- If Month(Now) = 12 Then Mon = "ธันวาคม"
- Label8.Caption = nDay & " ที่ " & Day(Now()) & " " & Mon & " " & Year(Now) + 543 ' แสดงวัน เดือน ปี
- End Sub
- ' ตั้งค่าเลือกคุณภาพเสียงของ sound card
- Private Sub cmdSetSound_Click() ' เมื่อคลิกปุ่ม
- Timer2.Enabled = False
- MMControl1.Command = "close" ' สั่งปิดไฟล์ก่อน
- Shell "control.exe" & " mmsys.cpl,,2" ' โหลดส่วนตั้งค่า sound ของ window
- End Sub
- ' ออกจากโปรแกรม
- Private Sub cmdExit_Click()
- MMControl1.Command = "close" ' สั่งปิดไฟล์ก่อน
- Unload Me ' หยุดการโหลดโปรแกรม
- End Sub
- ' โหลดรายชื่อเพลงทั้งหมด
- Private Sub LoadFile()
- Dim SongName As String ' กำหนดค่าตัวแปร
- On Error Resume Next
- Open App.Path & "\" & "List.txt" For Input As #1 ' เปิดไฟล์ที่เก็บข้อมูลเพลง list.txt
- Do While Not EOF(1) ' ตรวจดูจนจบไฟล์
- Line Input #1, SongName ' นำคำที่ได้ไปเก็บใน SongName
- List1.AddItem " " & Mid(SongName, 10, Len(SongName) - 9) ' โหลดชื่อเพลงและนักร้องไปเก็บใน List1 โดยตัดตัวเลขชื่อไฟล์ออก
- List2.AddItem Left(SongName, 8) ' โหลดชื่อไฟล์เพลงไปเก็บใน List2 โดยตัดชื่อเพลงและนักร้องออก
- Loop ' ทำซ้ำ
- Close #1 ' ปิดไฟล์ที่เก็บข้อมูลเพลง
- End Sub
- Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- List1.Visible = False ' ซ่อน list1
- Frame1.Visible = False ' ซ่อน Frame1
- End Sub
- Private Sub Label10_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- List1.Visible = True ' แสดง list1
- End Sub
- Private Sub Label6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Frame1.Visible = True ' แสดง Frame1
- End Sub
- Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- List1.Visible = False ' ซ่อน List1
- Frame1.Visible = False ' ซ่อน Frame1
- End Sub
- ' เมื่อคลิก list1
- Private Sub List1_Click()
- List2.ListIndex = List1.ListIndex ' กำหนดการเลือก list2 เหมือน list1
- SongStr = RTrim(List2.Text) ' ชื่อไฟล์ midi
- MidiPath = AllPath & "\Song\" & Left(SongStr, 1) ' ตำแหน่งที่เก็บเพลง midi
- LyricPath = AllPath & "\Lyrics\" & Left(SongStr, 1) ' ตำแหน่งที่เก็บเนื้อเพลง
- CursorPath = AllPath & "\Cursor\" & Left(SongStr, 1) ' ตำแหน่งที่เก็บ cursor
- Call PlayMidi ' เรียกส่วนย่อย PlayMidi มาทำงาน
- End Sub
- ' เล่นเพลง midi
- Private Sub PlayMidi()
- n = 3 ' ตัวนับเพื่อตรวจสอบบรรทัดของเนื้อร้อง
- cn = 0 ' ตัวนับเพื่อตรวจสอบตำแหน่งปัจจุบัน
- TCount = 0 ' ตัวนับเพื่อตรวจสอบค่าเวลาที่ผ่านไป
- Timer2.Enabled = True ' เริ่มจับเวลา timer2
- MMControl1.Command = "close" ' สั่งปิดไฟล์ที่โหลดไว้
- MMControl1.FileName = MidiPath & "\" & SongStr & ".mid" ' ที่เก็บเพลงและชื่อเพลงที่จะเล่น
- MMControl1.Command = "open" ' สั่งเปิดไฟล์ที่จะเล่น
- MMControl1.Command = "play" ' สั่งเล่นเพลงที่เปิดไว้
- MMControl1.TimeFormat = 0 ' กำหนดรูปแบบการแสดงเวลาเพลง
- MidiTime = MMControl1.TrackLength
- Min = Int(MidiTime / 1000 / 60) ' ความยาวเพลงที่เป็นนาที
- Sec = Int(MidiTime / 1000 - Min * 60) ' ความยาวเพลงที่เป็นวินาที
- StartTime = GetTickCount ' ตรวจสอบค่าเวลาที่นับได้
- tTime = 0
- Call Read_Midi
- Call Read_Cursor
- Call Read_Lyrics
- ' Call ChangeCursor
- On Error Resume Next
- Label2.Caption = MMControl1.FileName
- Label3.Caption = List1.Text
- n = 4
- Timer2.Interval = Int(ppqn / (768000 / Timebase)) * Quarter
- Label9.Caption = " Tempo = " & Int(Bpm) & " " & Num & "/" & nDen & " Time = " & Format(Min, "00") & ":" & Format(Sec, "00")
- Call Lyrics_Show
- End Sub
- ' เมื่อเล่นจบเพลง
- Private Sub MMControl1_Done(NotifyCode As Integer)
- If ProgressBar1.Value = 100 Then
- Timer2.Enabled = False
- Timer3.Enabled = True
- ProgressBar1.Value = 0
- End If
- End Sub
- ' เมื่อคลิกปุ่มหยุด
- Private Sub MMControl1_StopClick(Cancel As Integer)
- Timer2.Enabled = False
- ProgressBar1.Value = 0
- End Sub
- Private Sub Text1_Change()
- AllPath = Text1.Text ' กำหนด path ใหม่
- Call LoadFile ' เรียกส่วนย่อยมาทำงาน
- End Sub
- ' เล่นเพลง break
- Private Sub PlayBreak()
- Dim NumBreak As String
- Randomize ' กำหนดเป็นแบบสุ่มตัวเลข
- NumBreak = Int(9 * Rnd + 1) ' สุ่มหาค่าตัวเลข 1 ถึง 10
- MMControl1.Command = "close" ' ปิดไฟล์เพลง
- MMControl1.FileName = App.Path & "\Break\" & "Break" & NumBreak & ".mid" ' ชื่อไฟล์ที่กำลังเล่น
- MMControl1.Command = "open" ' เปิดไฟล์เพลง
- MMControl1.Command = "play" ' เล่นไฟล์เพลง
- Label2.Caption = MMControl1.FileName ' แสดงชื่อไฟล์ที่กำลังเล่น
- End Sub
- ' แสดงเนื้อเพลงขณะเล่น
- Sub Lyrics_Show()
- Picture1.Cls ' ลบภาพข้อความเดิมทั้งหมด
- Picture1.FontSize = 70 ' ขนาดตัวอักษรเนื้อเพลง
- Picture1.BackColor = &H80000001 ' สีพื้นของส่วนที่แสดงเนื้อร้อง
- ' ลดขนาดตัวอักษรให้พอดีกับบรรทัดบน
- If Picture1.TextWidth(Lyric(n)) > Picture1.Width - 100 Then
- Picture1.FontSize = Picture1.FontSize - 2
- End If
- ' ลดขนาดตัวอักษรให้พอดีกับบรรทัดล่าง
- If Picture1.TextWidth(Lyric(n + 1)) > Picture1.Width - 100 Then
- Picture1.FontSize = Picture1.FontSize - 2
- End If
- ' ขอบตัวอักษรแถวบน
- Picture1.ForeColor = &H800000 ' กำหนดสีขอบเนื้อร้อง
- For i = 170 To 190 Step 5
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n)) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n) ' แสดงเนื้อเพลง
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n)) / 2) - 30 ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n) ' แสดงเนื้อเพลง
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n)) / 2) + 30 ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n) ' แสดงเนื้อเพลง
- Next i
- For i = 210 To 220 Step 5
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n)) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n) ' แสดงเนื้อเพลง
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n)) / 2) - 30 ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n) ' แสดงเนื้อเพลง
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n)) / 2) + 30 ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n) ' แสดงเนื้อเพลง
- Next i
- ' ตัวอักษรหลักแถวบน
- Picture1.ForeColor = &HFFFFFF ' กำหนดสีเนื้อร้องเป็นสีฟ้าสว่าง
- Picture1.CurrentY = 200 ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n)) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n) ' แสดงเนื้อเพลง
- ' ขอบตัวอักษรแถวล่าง
- Picture1.ForeColor = &H800000 ' กำหนดสีขอบเนื้อร้อง
- For i = 1570 To 1590 Step 5
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n + 1)) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n + 1) ' แสดงเนื้อเพลง
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n + 1)) / 2) - 30 ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n + 1) ' แสดงเนื้อเพลง
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n + 1)) / 2) + 30 ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n + 1) ' แสดงเนื้อเพลง
- Next i
- For i = 1610 To 1630 Step 5
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n + 1)) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n + 1) ' แสดงเนื้อเพลง
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n + 1)) / 2) - 30 ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n + 1) ' แสดงเนื้อเพลง
- Picture1.CurrentY = i ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n + 1)) / 2) + 30 ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n + 1) ' แสดงเนื้อเพลง
- Next i
- ' ตัวอักษรหลักแถวล่าง
- Picture1.ForeColor = &HFFFFFF ' กำหนดสีเนื้อร้องเป็นสีขาว
- Picture1.CurrentY = 1600 ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n + 1)) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Lyric(n + 1) ' แสดงตำแหน่งปัจจุบันเนื้อเพลง
- End Sub
- ' ตัวจับเวลา 1
- Private Sub Timer1_Timer()
- Change = Change + 1 ' นับเพิ่มขึ้นที่ละ 1
- Form1.Caption = Mid("Thai Midi Karaoke V:1.0 Beta โดย ?????????? ????????@????????", 1, Change) ' แสดงข้อความแบบเพิ่มตัวอักษร
- If Change = 85 Then Form1.Caption = " ": Change = 0 ' ลบข้อความ และเริ่มนับใหม่
- End Sub
- ' ตัวจับเวลา 2
- Private Sub Timer2_Timer()
- Dim CurrentTime As Long
- Dim MidiTime As Long
- 'Determine elapsed and total times
- CurrentTime = GetTickCount
- TCount = TCount + 1
- 'Display times
- On Error Resume Next
- ' ตัวอักษรแสดงตำแหน่งขณะเล่น
- If cn = Len(Lyric(n)) Then ' ตรวจสอบจำนวนตัวหนังสือในบรรทัด
- n = n + 1 ' เพิ่มค่าจำนวนตัวอักษรเนื้อร้องขึ้นครั้งละ 1
- cn = 0 ' ตำแหน่งเนื้อร้องปัจจุบัน
- Call Lyrics_Show ' เรียกส่วนย่อยเพื่อขึ้นบรรทัดเนื้อร้องใหม่
- End If
- ' MidiTime = .................... <== ตรงนี้ให้ใส่การตรวจสอบค่า midi time ปัจจุบัน (ผมยังทำไม่เสร็จ)
- ' If MidiTime = Cursor(n) Then cn = cn + 1 ' ถ้าค่า Midi Time ตรงกับค่าที่ได้จากไฟล์ *.cur ให้เพิ่มตำแหน่งตัวอักษร
- If TCount Mod 5 = 0 Then cn = cn + 1 ' ตรงนี้ผมแสดงให้ดูว่าตัวหนังสือเริ่มวิ่ง (ยังไม่ใช่คำสั่งที่ถูกต้อง)
- Picture1.ForeColor = &H100FFF ' สีแสดงเนื้อร้องขณะเล่นเพลง
- Picture1.CurrentY = 200 ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(Lyric(n)) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print Left(Lyric(n), cn) ' แสดงตำแหน่งเนื้อร้องปัจจุบัน
- If n = TotalCur Then
- Picture1.Cls ' ลบข้อความที่แสดงทั้งหมด
- Picture1.FontSize = 48 ' กำหนดขนาดตัวหนังสือ
- dload = "ดาวน์โหลดโปรแกรมและ VB Code ได้ที่" ' ข้อความที่แสดงแถวบน
- web = "www.????????????" ' ข้อความที่แสดงแถวล่าง
- ' ตัวอักษรหลักแถวบน
- Picture1.ForeColor = &H100FFFF ' กำหนดสีบรรทัดบน
- Picture1.CurrentY = 200 ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(dload) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print dload ' แสดง dload
- ' ตัวอักษรหลักแถวล่าง
- Picture1.ForeColor = &H100FFFF ' กำหนดสีบรรทัดล่างเป็นสี......
- Picture1.CurrentY = 1000 ' กำหนดตำแหน่งแนวดิ่งเนื้อเพลง
- Picture1.CurrentX = (Picture1.Width / 2) - (Picture1.TextWidth(web) / 2) ' กำหนดตำแหน่งแนวนอนเนื้อเพลง
- Picture1.Print web ' แสดง web site
- End If
- ProgressBar1.Value = Int((CurrentTime - StartTime) * 100 / MMControl1.TrackLength + 0.5)
- End Sub
- ' หน่วงเวลาระหว่างเพลงที่จบกับเพลงต่อไป
- Private Sub Timer3_Timer()
- Dim WaitTime As Integer
- WaitTime = 0 ' ค่าเริ่มนับจาก 0
- WaitTime = WaitTime + 1 ' เพิ่มการนับขึ้นที่ละ 1
- If WaitTime = 3 Then ' ถ้าค่าที่นับเป็น 3 วินาที
- Timer3.Enabled = False ' หยุดการนับเวลา timer3
- List1.ListIndex = List1.ListIndex + 1 ' เลื่อนตำแหน่งใน list1 ลงไป
- Call PlayMidi ' เรียกส่วนย่อยเล่นเพลง
- End If
- End Sub
- ' ตรวจสอบเวลา
- Private Sub Timer4_Timer()
- Dim TimeNow As String
- TimeNow = Timeʹเวลาปัจจุบัน
- Label1.Caption = TimeNow ' แสดงเวลาปัจจุบัน
- End Sub
- Private Sub cmdChangeCur_Click()
- List3.AddItem TCount
- End Sub
- ' เปลี่ยนข้อความในบรรทัดแสดงเนื้อเพลง
- Sub ChangeCursor()
- On Error Resume Next ' ถ้าเกิดข้อผิดพลาดให้ข้ามไป
- n = n + 1 ' กำหนดการนับเพิ่มที่ละ 1
- Call Lyrics_Show
- End Sub
- ' ตรวจสอบตำแหน่งเนื้อร้อง
- Sub Read_Cursor()
- On Error Resume Next
- ' ตัวแปร Tmpb1, Tmpb2 เป็น 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
- TotalCur = 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(TotalCur + 1) ' ขยาย Array สำหรับเก็บค่าเวลา
- ' ใส่ ASC เพื่อถอดค่าที่อ่านมาได้เป็นตัวเลข เพราะค่า Byte ที่อ่านมาได้จะเป็น ตัวอักษรขนาด 1 Byte แล้วคูณด้วย 256 หรือ Shift 16 Bit
- Cursor(TotalCur) = Asc(Tmpb1) + Asc(Tmpb2) * 256
- List3.AddItem Asc(Tmpb1) + Asc(Tmpb2) * 256
- TotalCur = TotalCur + 1
- End If
- Loop
- Close #filenum
- End If
- End Sub
- ' ตรวจสอบเนื้อเพลง
- Sub Read_Lyrics()
- On Error Resume Next
- filenum = FreeFile
- Open LyricPath & "\" & SongStr & ".lyr" For Input As filenum
- TotalCur = 0
- If Err = 0 Then
- Do Until EOF(filenum)
- ReDim Preserve Lyric(TotalCur + 1)
- Line Input #filenum, tmpstr
- Lyric(TotalCur) = tmpstr
- TotalCur = TotalCur + 1
- Loop
- Close #filenum
- End If
- End Sub
- ' ตรวจสอบคุณสมบัติของไฟล์ midi
- Sub Read_Midi()
- On Error Resume Next ' เมื่อเกิดผิดพลาดให้ข้ามไป
- Open MidiPath & "\" & SongStr & ".mid" For Binary As #1 ' เปิดไฟล์เพื่อตรวจสอบ
- txtMidi = Space(LOF(1)) ' ตรวจสอบข้อความ
- Get #1, , txtMidi ' เก็บข้อความที่อ่านไว้
- Close #1 ' ปิดไฟล์ที่อ่าน
- ' ตรวจสอบอัตราส่วนจังหวะ
- k = InStr(1, txtMidi, Chr(255) & Chr(88))
- If k = 0 Then Exit Sub
- Num = Asc(Mid(txtMidi, k + 3, 1))
- Den = Asc(Mid(txtMidi, k + 4, 1))
- If Den = 1 Then nDen = 2
- If Den = 2 Then nDen = 4
- If Den = 3 Then nDen = 8
- If Den = 4 Then nDen = 16
- If Den = 5 Then nDen = 32
- If Den = 6 Then nDen = 64
- If Den = 7 Then nDen = 128
- If Den = 8 Then nDen = 256
- If Den = 9 Then nDen = 512
- If Den = 10 Then nDen = 1024
- ' ตรวจสอบ tempo
- k = InStr(1, txtMidi, Chr(&HFF) & Chr(&H51))
- If k = 0 Then Exit Sub
- n1 = Hex(Asc(Mid(txtMidi, k + 3, 1)))
- If Len(n1) = 1 Then n1 = "0" & n1
- n2 = Hex(Asc(Mid(txtMidi, k + 4, 1)))
- If Len(n2) = 1 Then n2 = "0" & n2
- n3 = Hex(Asc(Mid(txtMidi, k + 5, 1)))
- If Len(n3) = 1 Then n3 = "0" & n3
- t1 = Hex(Asc(Mid(txtMidi, 13, 1)))
- If Len(t1) = 1 Then t1 = "0" & t1
- t2 = Hex(Asc(Mid(txtMidi, 14, 1)))
- If Len(t2) = 1 Then t2 = "0" & t2
- ppqn = CDec("&H" & n1 & n2 & n3)
- Bpm = 60000000 / ppqn ' ความเร็วจังหวะ tempo
- Timebase = CDec("&H" & t1 & t2) / 4
- Quarter = (ppqn / Timebase) / 4000
- Label12.Caption = "ppqn = " & ppqn & " Timebase = " & Timebase & " Quarter = " & Quarter

