Jeg har ikke lige kigget på de givne links, så det kan godt være, jeg gentager de andre; men:
Et ID3 tag er placeret i de sidste 128 bytes af en MP3 fil, og det er således disse 128 bytes, du ønsker at læse og derefter behandle for at få oplysninger om kunstner, titel osv. Se på
http://www.id3.org/id3v1.html for nærmere oplysninger.
Jeg har selv arbejdet med ID3 tags i et VB program engang, og jeg brugte flg. kode til at læse og skrive ID3 tags. (Sæt koden ind i et nyt modul). Jeg går ud fra, at du kan gennemskue, hvordan funktionerne bruges, og hvad de gør:
\' All Code Copyright © Dennis Riis 2000-2001.
\' Email: driis@mobilixnet.dk
Public Type ID3
Title As String
Artist As String
Album As String
Yr As String
Comment As String
Genre As Byte
Success As Boolean
End Type
Dim L As Double
Dim Pos As Double
Dim I As Integer
Dim Test As String
Dim T As Byte
Dim TAG As String
Public Genres(125) As String
Public Sub GetGenres()
On Error GoTo GenreMissing
Open App.Path + \"\\genres.dat\" For Input As 1
For I = 0 To 125
Input #1, Genres(I)
Input #1, Genres(I)
Genres(I) = UCase(Left(Genres(I), 1)) + Right$(Genres(I), Len(Genres(I)) - 1)
Next I
Close
On Error GoTo 0
Exit Sub
GenreMissing:
On Error GoTo 0
For I = 0 To 125
Genres(I) = \"Genre #\" + Str(I)
Next I
MsgBox \"Filen \" + App.Path + \"\\genres.dat blev ikke fundet, eller indeholder fejl. Denne fil indeholder navnene på alle genrer, som Song Name Workshop genkender. Derfor vil alle genrer i denne session blive betegnet som \'Genre # x\'.\" + vbCrLf + vbCrLf + \"Dette problem kan løses ved at geninstallere programmet eller placere den originale \'genres.dat\' i programbiblioteket.\", vbExclamation, \"Genrer kunne ikke indlæses!\"
End Sub
Public Function GetID3(File As String) As ID3
Open File For Binary As 1
Test = \"\"
L = LOF(1)
Pos = L - 127
For I = 0 To 2
Get #1, Pos + I, T
Test = Test + Chr(T)
Next I
\'test om tag findes
If Not Test = \"TAG\" Then
GetID3.Success = False
Exit Function
End If
\' Læs titel
Pos = Pos + 3
For I = 0 To 29
Get #1, Pos + I, T
If Chr(T) = vbNullChar Then Exit For
GetID3.Title = GetID3.Title + Chr(T)
Next I
\' læs artist
Pos = Pos + 30
For I = 0 To 29
Get #1, Pos + I, T
If Chr(T) = vbNullChar Then Exit For
GetID3.Artist = GetID3.Artist + Chr(T)
Next I
\'læs Album
Pos = Pos + 30
For I = 0 To 29
Get #1, Pos + I, T
If Chr(T) = vbNullChar Then Exit For
GetID3.Album = GetID3.Album + Chr(T)
Next I
\'læs år
Pos = Pos + 30
For I = 0 To 3
Get #1, Pos + I, T
If Chr(T) = vbNullChar Then Exit For
GetID3.Yr = GetID3.Yr + Chr(T)
Next I
\' læs comment
Pos = Pos + 4
For I = 0 To 29
Get #1, Pos + I, T
If Chr(T) = vbNullChar Then Exit For
GetID3.Comment = GetID3.Comment + Chr(T)
Next I
\'læs Genre
Pos = Pos + 30
Get #1, Pos, GetID3.Genre
GetID3 = TrimID3(GetID3)
Close 1
GetID3.Success = True
End Function
Public Function TrimID3(ToTrim As ID3) As ID3
For I = 1 To 30
S = Right$(ToTrim.Title, I)
If Not Left$(S, 1) = \" \" Then
ToTrim.Title = Left$(ToTrim.Title, Len(ToTrim.Title) - I + 1)
Exit For
End If
Next I
For I = 1 To 30
S = Right$(ToTrim.Album, I)
If Not Left$(S, 1) = \" \" Then
ToTrim.Album = Left$(ToTrim.Album, Len(ToTrim.Album) - I + 1)
Exit For
End If
Next I
For I = 1 To 30
S = Right$(ToTrim.Comment, I)
If Not Left$(S, 1) = \" \" Then
ToTrim.Comment = Left$(ToTrim.Comment, Len(ToTrim.Comment) - I + 1)
Exit For
End If
Next I
For I = 1 To 30
S = Right$(ToTrim.Artist, I)
If Not Left$(S, 1) = \" \" Then
ToTrim.Artist = Left$(ToTrim.Artist, Len(ToTrim.Artist) - I + 1)
Exit For
End If
Next I
TrimID3 = ToTrim
End Function
Public Function WriteID3(File As String, ToWrite As ID3) As Boolean
Open File For Binary As 1
Test = \"\"
L = LOF(1)
Pos = L - 127
For I = 0 To 2
Get #1, Pos + I, T
Test = Test + Chr(T)
Next I
If Not Test = \"TAG\" Then Pos = L
\'Klargør tag
TAG = \"TAG\" + ToWrite.Title + String(30 - Len(ToWrite.Title), vbNullChar) _
+ ToWrite.Artist + String(30 - Len(ToWrite.Artist), vbNullChar) _
+ ToWrite.Album + String(30 - Len(ToWrite.Album), vbNullChar) + ToWrite.Yr + ToWrite.Comment _
+ String(30 - Len(ToWrite.Comment), vbNullChar) + Chr(ToWrite.Genre)
On Error Resume Next
Put #1, Pos, TAG
On Error GoTo 0
Close
WriteID3 = True
End Function