Chơi file Chiptune trong VB.NET

Standard

Chiptune (XM, MOD, IT…) là định dạng file thường dùng trong các keygen, có lợi thế về dung lượng nhưng âm thanh rất sống động (có phần vượt trội so với định dạng .MID). Để chơi một file chiptune trong VB.NET, chúng ta sẽ cần có:
  1. File thư viện BASSMOD.DLL (download tại đây).
  2. Một file chiptune (đuôi là XM, MOD…), ở đây tôi ví dụ với file MUSIC.MOD (download tại đây).
Ý tưởng là chúng ra sẽ đặt cả 2 file trên vào Resources (BASSMODMUSIC) sau đó lấy ra khi khởi động ứng dụng. Sau khi đã add vào Resources thì chúng ta sẽ dùng hàm sau để lấy ra khỏi Resources:

Private Sub ExtractRES(ByVal resname As String, ByVal output As String)
        Dim bfile() As Byte
        Dim writer As BinaryWriter
        Dim intIndex As Integer
        Try

            bfile = My.Resources.ResourceManager.GetObject(resname)
            writer = New BinaryWriter(File.Open(output, FileMode.OpenOrCreate))
            For intIndex = 0 To (bfile.Length - 1)

                writer.Write(bfile(intIndex))
            Next
            writer.Close()
        Catch
        End Try
End Sub

Ứng với từng file, ta đặt vào các thư mục sao cho hợp lý (add vào sự kiện Form_Load):

ExtractRES("BASSMOD", Mid(My.Computer.FileSystem.SpecialDirectories.Desktop.ToString, 1, 3) & "WINDOWSSYSTEM32BASSMOD.DLL")
ExtractRES("MUSIC", My.Computer.FileSystem.SpecialDirectories.Temp.ToString & "MUSIC.MOD")

Chúng ta có 2 lựa chọn về việc export file BASSMOD.DLL, đó là vào thư mục System32 hoặc vào thư mục chứa chương trình của ta. Tuy nhiên với tiêu chí viết một ứng dụng chỉ có file .exe duy nhất nên để tránh phản cảm chúng ta sẽ export vào thư mục System32 (có thể sẽ gặp trục trặc với một vài antivirus). Còn về file MUSIC.MODcác bạn muốn đặt vào đâu cũng được (nhưng phải nhớ để sau gọi đến).Bây giờ vào phần chính là viết chương trình. Đầu tiên chúng ta khai báo các biến toàn cục:

Private Declare Function BASSMOD_Init Lib "bassmod.dll" (ByVal device As Integer, ByVal freq As Integer, ByVal flags As Integer) As Short
Private Declare Function BASSMOD_MusicLoad Lib "bassmod.dll" (ByVal mem As Short, ByVal pfile As String, ByVal offset As Integer, ByVal Length As Integer, ByVal flags As Integer) As Short
Private Declare Function BASSMOD_MusicPlay Lib "bassmod.dll" () As Short
Private Declare Function BASSMOD_MusicStop Lib "bassmod.dll" () As Short
Private Declare Function BASSMOD_MusicGetPosition Lib "bassmod.dll" () As Short
Private Declare Function BASSMOD_MusicIsActive Lib "bassmod.dll" () As Short
Private Declare Function BASSMOD_MusicSetPosition Lib "bassmod.dll" (ByVal Posição As Integer) As Integer
Private Declare Function BASSMOD_MusicGetLength Lib "bassmod.dll" (ByVal Tamanho As Integer) As Integer
Private Declare Function BASSMOD_MusicPause Lib "bassmod.dll" () As Short
Ở sự kiện Form_Load, chúng ta tiến hành chơi file MUSIC.MOD (các bạn thay đường dẫn đến file chiptune giống với đường dẫn bạn export file MUSIC.MOD ban nãy):

BASSMOD_Init(-1, 44100, 0)
BASSMOD_MusicLoad(0, My.Computer.FileSystem.SpecialDirectories.Temp.ToString & "MUSIC.MOD", 0, 0, 2 Or 512)
BASSMOD_MusicPlay()

Cuối cùng, ở sự kiện Form_Closing chúng ta cần dừng chơi với câu lệnh:

e.Cancel = True
BASSMOD_MusicStop()
BASSMOD_Free()

Vậy là xong Nháy mắt Lưu ý rằng nếu bạn làm đúng như trên thì file chiptune sẽ được chơi ở chế độ lặp Cười to

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s