Ordner mithilfe von MP3 Tags erstellen
Verfasst: 30.07.2009 16:57
Hi,
Hier ein kleines Programm, dass MP3s mithilfe der ID3 Tags einordnet.
Beispiel: Ihr wählt als erstes einen Ordner aus, der 1000 Musikstücke enthält (ohne Unterordner). Dannach "Eigene Musik".
Die Ordnerstruktur in Eigene Musik ist dann so:
Download
Hier ein kleines Programm, dass MP3s mithilfe der ID3 Tags einordnet.
Beispiel: Ihr wählt als erstes einen Ordner aus, der 1000 Musikstücke enthält (ohne Unterordner). Dannach "Eigene Musik".
Die Ordnerstruktur in Eigene Musik ist dann so:
- Autor>Album>Dateiname+".mp3"
- Autor - Album - Track - Titel - .mp3
Code: Alles auswählen
; PB 4.30
; Version 1.0
; Joel Th. (Deutsches Forum)
EnableExplicit
XIncludeFile "ID3-Tagger-pbi.pbi"
Procedure.s MyMusicDirectory()
Protected sPath.s = Space(#MAX_PATH)
SHGetSpecialFolderPath_(#Null, @sPath, #CSIDL_MYMUSIC, 0)
PathAddBackslash_(@sPath)
ProcedureReturn sPath
EndProcedure
Procedure.s TimeString(Time, Sep$ = ":")
If Time > 0
Protected sTimeString.s
Protected iHours.i, iMinutes.i, iSeconds.i
Time / 1000: iSeconds = Time % 60
Time / 60: iMinutes = Time % 60
Time / 60: iHours = Time % 60
sTimeString + RSet(Str(iHours), 2, "0") + Sep$ + RSet(Str(iMinutes), 2, "0") + Sep$ + RSet(Str(iSeconds), 2, "0")
ProcedureReturn sTimeString
Else
ProcedureReturn "00:00:00"
EndIf
EndProcedure
Structure _Tag
title.s
artist.s
album.s
year.i
comment.s
track.i
genre.s
bitrate.i
samplerate.i
channels.i
length.i
EndStructure
Global Tag._Tag
Procedure.i TagLib_ReadTag(File$)
Protected iResult.i
If Trim(File$) = "" Or FileSize(File$) < 1
iResult = 0
Else
Protected iFile.i
iFile = taglib_file_new(File$)
If iFile
Protected *Tag, *Proberties
*Tag = taglib_file_tag(iFile)
If *Tag
Tag\title = Trim(PeekS(taglib_tag_title(*Tag) ,-1, #PB_UTF8))
Tag\artist = Trim(PeekS(taglib_tag_artist(*Tag) ,-1, #PB_UTF8))
Tag\album = Trim(PeekS(taglib_tag_album(*Tag) ,-1, #PB_UTF8))
Tag\year = taglib_tag_year(*Tag)
Tag\comment = Trim(PeekS(taglib_tag_comment(*Tag), -1, #PB_UTF8))
Tag\track = taglib_tag_track(*Tag)
Tag\genre = Trim(PeekS(taglib_tag_genre(*Tag) ,-1, #PB_UTF8))
EndIf
*Proberties = taglib_file_audioproperties(iFile)
If *Proberties
Tag\bitrate = taglib_audioproperties_bitrate(*Proberties)
Tag\samplerate = taglib_audioproperties_samplerate(*Proberties)
Tag\channels = taglib_audioproperties_channels(*Proberties)
Tag\length = taglib_audioproperties_length(*Proberties)
EndIf
taglib_tag_free_strings()
taglib_file_free(iFile)
iResult = 1
EndIf
EndIf
ProcedureReturn iResult
EndProcedure
;Test
Define.s sFolder = PathRequester("Ordnerwahl", "C:\Users")
Define.s sSave = PathRequester("Speichern", "C:\Users")
Delay(1000)
If sFolder
If ExamineDirectory(0, sFolder, "*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
If TagLib_ReadTag(sFolder + DirectoryEntryName(0)) = 1
If Tag\artist
If FileSize(sSave+Tag\artist) <> -2
CreateDirectory(sSave+Tag\artist)
EndIf
Else
MessageRequester("Fehler", "Der Artist von "+sSave+DirectoryEntryName(0)+"konnte nicht ermittelt werden", 0)
EndIf
If Tag\album
If FileSize(sSave+Tag\artist+"\"+Tag\album) <> -2
CreateDirectory(sSave+Tag\artist+"\"+Tag\album)
EndIf
Else
MessageRequester("Fehler", "Das Album von "+sSave+DirectoryEntryName(0)+"konnte nicht ermittelt werden", 0)
Tag\album = "Unbekannt"
CreateDirectory(sSave+Tag\artist+"\"+Tag\album)
EndIf
If CopyFile(sFolder+DirectoryEntryName(0), sSave+Tag\artist+"\"+Tag\album+"\"+Tag\artist+"-"+Tag\album+"-"+Str(0)+Str(Tag\track)+"-"+Tag\title+".mp3")
Else
MessageRequester("Fehler", "Das Artist, Album, Tracknummer oder Titel von "+sSave+DirectoryEntryName(0)+" konnte nicht ermittelt werden. ID ist gleich "+sSave+Tag\artist+"\"+Tag\album+"\"+Tag\artist+"-"+Tag\album+"-"+Str(0)+Str(Tag\track)+"-"+Tag\title+".mp3", 0)
EndIf
Else
Debug "Open Failed"
EndIf
EndIf
Wend
FinishDirectory(0)
EndIf
EndIf