If frmId3.lblTest = "TAG" Then frmId3.cmdUpdate.Enabled = True
openstate:
Open selectedFile For Binary Access Read As #1
Position = FileLen(selectedFile) - 128
Get #1, Position + 1, test
frmId3.lblTest = test
Get #1, FileLen(selectedFile), Detect
lblDetect = Detect
If test = "TAG" Then
Check1.Value = 1
start = Position + 4
Get #1, start, Title
frmId3.txtTitle.Text = Trim(Title)
start = start + 30
Get #1, start, Artist
frmId3.txtArtist.Text = Trim(Artist)
start = start + 30
Get #1, start, Album
frmId3.txtAlbum.Text = Trim(Album)
start = start + 30
Get #1, start, Year
frmId3.txtYear.Text = Trim(Year)
Private Sub cmdUpdate_Click()
Update (cdlId3.FileName)
End Sub
Private Sub Command1_Click()
txtTitle.Text = LCase(txtTitle.Text)
txtAlbum.Text = LCase(txtAlbum.Text)
txtArtist.Text = LCase(txtArtist.Text)
End Sub
Private Sub cmdCancel_Click()
Unload Me
End Sub
Private Sub Command2_Click()
cdlId3.Filter = "Mpeg Layer III files (*.mp3)|*.mp3"
cdlId3.ShowOpen
If cdlId3.FileName <> "" Then
Id3v1 (cdlId3.FileName)
Check1.Enabled = True
Else: Exit Sub
End If
End Sub
Private Sub Form_Load()
genr
frmId3.Combo1.ListIndex = 148
End Sub
Private Sub Check1_Click()
If Check1.Value = 1 Then
If lblTest = "TAG" Then
cmdUpdate.Enabled = True
Exit Sub
Else
cmdUpdate.Enabled = True
Open selectedFile For Binary Access Write As #1
Position = FileLen(selectedFile)
Dim place As String * 3
place = "TAG"
Put #1, Position, place
Position = Position + 2
For i = 1 To 125
Put #1, Position + i, CByte(0)
Next i
Put #1, Position + 125, CByte(148)
End If
End If
txtTitle.Enabled = True
txtArtist.Enabled = True
txtAlbum.Enabled = True
txtYear.Enabled = True
Combo1.Enabled = True
txtTrck.Enabled = True
txtComm.Enabled = True
Dim Title As String * 30
Dim Artist As String * 30
Dim Album As String * 30
Dim Year As String * 4
Dim genre As Byte
Dim Comment As String * 29
Dim TrckNum As Byte
Public Sub Update(selectedFile As String)
Dim B As String
Dim A As String
On Error GoTo hell:
Open selectedFile For Binary Access Write As #1
savestate:
Position = FileLen(selectedFile) - 128
start = Position + 4
Title = Trim(frmId3.txtTitle.Text)
Put #1, start, Title
B = Len(frmId3.txtTitle.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i
start = start + 30
Artist = Trim(frmId3.txtArtist.Text)
Put #1, start, Artist
B = Len(frmId3.txtArtist.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i
start = start + 30
Album = Trim(frmId3.txtAlbum.Text)
Put #1, start, Album
B = Len(frmId3.txtAlbum.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i
start = start + 30
Year = frmId3.txtYear.Text
Put #1, start, Year
B = Len(frmId3.txtYear.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i
start = start + 4
Comment = Trim(frmId3.txtComm.Text)
Put #1, start, Comment
B = Len(frmId3.txtComm.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i
start = start + 29
If frmId3.txtTrck.Text = "" Then
Put #1, start, CByte(0)
Else
TrckNum = CByte(frmId3.txtTrck.Text)
Put #1, start, TrckNum
End If
start = start + 1
For i = 0 To 148
If Combo1.ListIndex = i Then
genre = i
End If
Next i
Put #1, start, genre
Close #1
Exit Sub
hell:
Dim mes
mes = MsgBox("You can not modify this file while is playing...")
Close #1
然后新建一个模块:
Option Explicit
Public Type mp3Tag
Artist As String 'Artist
Album As String 'Album
Title As String 'Title
Year As String 'Year
Comments As String 'Comments
Genre As Integer 'Genre
End Type
Public Const sGenreMatrix = "Blues|Classic Rock|Country|Dance|Disco|Funk|Grunge|" + _
"Hip-Hop|Jazz|Metal|New Age|Oldies|Other|Pop|R&B|Rap|Reggae|Rock|Techno|" + _
"Industrial|Alternative|Ska|Death Metal|Pranks|Soundtrack|Euro-Techno|" + _
"Ambient|Trip Hop|Vocal|Jazz+Funk|Fusion|Trance|Classical|Instrumental|Acid|" + _
"House|Game|Sound Clip|Gospel|Noise|Alt. Rock|Bass|Soul|Punk|Space|Meditative|" + _
"Instrumental Pop|Instrumental Rock|Ethnic|Gothic|Darkwave|Techno-Industrial|Electronic|" + _
"Pop-Folk|Eurodance|Dream|Southern Rock|Comedy|Cult|Gangsta Rap|Top 40|Christian Rap|" + _
"Pop/Punk|Jungle|Native American|Cabaret|New Wave|Phychedelic|Rave|Showtunes|Trailer|" + _
"Lo-Fi|Tribal|Acid Punk|Acid Jazz|Polka|Retro|Musical|Rock & Roll|Hard Rock|Folk|" + _
"Folk/Rock|National Folk|Swing|Fast-Fusion|Bebob|Latin|Revival|Celtic|Blue Grass|" + _
"Avantegarde|Gothic Rock|Progressive Rock|Psychedelic Rock|Symphonic Rock|Slow Rock|" + _
"Big Band|Chorus|Easy Listening|Acoustic|Humour|Speech|Chanson|Opera|Chamber Music|" + _
"Sonata|Symphony|Booty Bass|Primus|Porn Groove|Satire|Slow Jam|Club|Tango|Samba|Folklore|" + _
"Ballad|power Ballad|Rhythmic Soul|Freestyle|Duet|Punk Rock|Drum Solo|A Capella|Euro-House|" + _
"Dance Hall|Goa|Drum & Bass|Club-House|Hardcore|Terror|indie|Brit Pop|Negerpunk|Polsk Punk|" + _
"Beat|Christian Gangsta Rap|Heavy Metal|Black Metal|Crossover|Comteporary Christian|" + _
"Christian Rock|Merengue|Salsa|Trash Metal|Anime|JPop|Synth Pop"
Public Function GetMp3Tag(FName As String) As mp3Tag
Dim Artist As String
Dim Album As String
Dim Title As String
Dim Year As String
Dim Comments As String
Dim Genre As Integer
If FName = "" Then Exit Function
If Dir(FName) = "" Then Exit Function
Dim FileNum As Integer
FileNum = FreeFile
Dim strInput As String
Open FName For Binary Access Read As FileNum
If LOF(FileNum) < 128 Then
Close FileNum
Exit Function
End If
Seek FileNum, LOF(FileNum) - 127
strInput = Space(3)
Get FileNum, , strInput
If strInput <> "TAG" Then
Close FileNum
GoTo Done:
End If
strInput = Space(30)
Get FileNum, , strInput
Title = Trim(strInput)
strInput = Space(30)
Get FileNum, , strInput
Artist = Trim(strInput)
strInput = Space(30)
Get FileNum, , strInput
Album = Trim(strInput)
strInput = Space(4)
Get FileNum, , strInput
Year = Trim(strInput)
strInput = Space(30)
Get FileNum, , strInput
Comments = Trim(strInput)
strInput = Space(1)
Get FileNum, , strInput
Genre = Asc(strInput)
Done:
GetMp3Tag.Title = Title
GetMp3Tag.Artist = Artist
GetMp3Tag.Album = Album
GetMp3Tag.Year = Year
GetMp3Tag.Comments = Comments
If Genre < 0 Or Genre > 254 Then Genre = 12
GetMp3Tag.Genre = CInt(Genre)
Close FileNum
End Function
接下来在主窗体的Form_Load部分加入以下内容:
Dim i As Integer, GenreArray() As String
GenreArray = Split(sGenreMatrix, "|")
For i = LBound(GenreArray) To UBound(GenreArray)
Combo1.AddItem GenreArray(i)
Next i