Seite 1 von 1

Ordner mithilfe von MP3 Tags erstellen

Verfasst: 30.07.2009 16:57
von Joel
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:
  • Autor>Album>Dateiname+".mp3"
Der Dateiname wird so definiert:
  • Autor - Album - Track - Titel - .mp3
Bitte unten alle Dlls etc Downloaden, dasshier sit nur die Source:

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
Download