Jag försöker nu att leka lite granna med mp3. Jag hittade felet,låg under fel knapp (skäms). Du bör kontrolera om det finns en befintlig tag eller inte. Om en befintlig tag saknas ska du lägga tagen efter filen. Alltså inte ha -127. Vilken betydelse har det om man skriver TAG före eller efter filen? TAG ska ligga efter filen. Det verkar som om jag får problem i alla fall. Det verkar som om jag får problem i alla fall. Om du ska göra på "rätt" sätt bör du använd LOF istället för FileLen och ett filnummer från FreeFile istället för en konstant som 1.<br> Tack Andreas för ditt tålamod.MP3 och TAG
I koden som jag har luskat up, så skall det också finnas möjlighet att skriva om TAG, alltså information om titel artist osv.
Nu verkar det som om jag inte får det att fungera, ingenting händer, men datorn jobbar.
Så här ser koden ut:
<code>
Private Sub cmdWriteTag_Click()
If FileOpen Then
MsgBox "You can't save to an open file", _
vbCritical, "MP3 Tag Save Error"
Exit Sub
End If
If Right(Dir1.Path, 1) = "\" Then
FileName = Dir1.Path & File1.FileName
Else
FileName = Dir1.Path & "\" & File1.FileName
End If
With CurrentTag
.Tag = "TAG"
.Songname = txtTitle
.artist = txtArtist
.album = txtAlbum
.year = txtYear
.comment = txtComment
.genre = Chr(Combo1.ListIndex + 1)
Open FileName For Binary Access Write As #1
Seek #1, FileLen(FileName) - 127
Put #1, , .Tag
Put #1, , .Songname
Put #1, , .artist
Put #1, , .album
Put #1, , .year
Put #1, , .comment
Put #1, , .genre
Close #1
End With
If Err.Number <> 0 Then
'MsgBox Err.Description
eInfo.Caption = "FEL" & Err.Description
Else
'MsgBox "Nu sparat"
eInfo.Caption = "Nu skrivs TAGEN om"
End If
End Sub
</code>
Någon som hittar något fel???Sv: MP3 och TAG
Nu en annan fråga, kan man skriva om TAG(om det nu finns) när det gäller wav också?Sv: MP3 och TAG
Sv: MP3 och TAG
Om jag förstår dig rätt så är det helt olämpligt?Sv: MP3 och TAG
Lägger du info före filen så ska du inte använda dig av tag utan ID3.
Det finns en standard som tagits fram för detta, www.id3.org
ID3 är lite krångligare att använda sig av än TAG formatet som alltid är 128 Bytes.
Det finns både för och nackdelar med använda ID3.
Fördelar är att vid streaming av filen över nätet kan du hämta fil info direkt
då den kommer först. Det finns betydligt flera "fält" att lägga in metadata på.
Nackdelen är att hela filen skrivs om på disken om du lägger till eller uppdaterar en ID3.
Tror som max att ID3 kan vara 255MB, vilket kan leda till helt onödig info
läggs med som du kanske inte har någon nytta av, vid eventuell nedladdning.Sv: MP3 och TAG
När jag har ändrat till det här:
Get #1, FileLen(FileName), .TAG
istället för
Get #1, FileLen(FileName) - 127, .TAG
Så får jag som error:
RUNTIME ERROR '63'
Bad Record Number
Hur fixar jag det?Sv: MP3 och TAG
När jag har ändrat till det här:
Get #1, FileLen(FileName), .TAG
istället för
Get #1, FileLen(FileName) - 127, .TAG
Så får jag som error:
RUNTIME ERROR '63'
Bad Record Number
Hur fixar jag det?Sv: MP3 och TAG
<br>
När du läser tagen ska du alltid läsa 127 byte från slutet:
<code>
Get #1, LOF(#1) - 127, CurrentTag
If CurrentTag.Tag = "TAG" Then
Debug.Print "OK"
Else
Debug.Print "Filen saknar TAG"
End If
</code>
Med filnummer:
<code>
Get #FileNo, LOF(FileNo) - 127, CurrentTag
If CurrentTag.Tag = "TAG" Then
Debug.Print "OK"
Else
Debug.Print "Filen saknar TAG"
End If
</code>
Det är när du sparar som du ska kontrollera om det redan finns en tag. Gör du inte kollen kan du skriva över slutet av filen om det saknas en tag:
<code>
Private Sub cmdWriteTag_Click()
Dim FileNo As Long
Dim strTag As String * 3
If FileOpen Then
MsgBox "You can't save to an open file", _
vbCritical, _
"MP3 Tag Save Error"
Else
If Right(Dir1.Path, 1) = "\" Then
FileName = Dir1.Path & File1.FileName
Else
FileName = Dir1.Path & "\" & File1.FileName
End If
With CurrentTag
.Tag = "TAG"
.Songname = txtTitle
.Artist = txtArtist
.Album = txtAlbum
.Year = txtYear
.comment = txtComment
.Genre = Chr(Combo1.ListIndex + 1)
End With
FileNo = FreeFile
Open FileName For Binary Access Read Write As #FileNo
Get #FileNo, LOF(FileNo) - 127, strTag
If strTag = "TAG" Then
Put #FileNo, LOF(FileNo) - 127, CurrentTag
Else
Put #FileNo, LOF(FileNo), CurrentTag
End If
Close #FileNo
If Err.Number Then
'MsgBox Err.Description
eInfo.Caption = "FEL" & Err.Description
Else
'MsgBox "Nu sparat"
eInfo.Caption = "TAGEN har sparats"
End If
End If
End Sub
</code>Sv: MP3 och TAG
Jag fick pyssla lite granna, men jag har nu fått ihop det (tror jag).
Det verkar fungera bra nu.