• Offizieller Beitrag

    HI,

    ich sollte für eine Kollegin ein Skript schreiben, dass die Titelnummern von MP3 Dateien durchnummerieren kann, damit ihr proprietäres Navigationssystem die Dateien in der richtigen Reihenfolge abspielt.

    Dabei habe ich folgende Funktion gebaut. Vielleicht kann sie ja jemand nutzen.

    Sollten sie für nützlich empfunden werden, dann mache ich richtige UDFs draus.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $file = "C:\Downloads\Musik\Chris De Burg - Lady in Red.mp3"

    [/autoit] [autoit][/autoit] [autoit]

    _DLLstartup()
    $re = _getID3Tag($file)
    If @error Then MsgBox(0, 'Error', 'Error - no array returned', 5)
    _ArrayDisplay($re)
    _setID3Tag($file, 'TrackPosition', 100)
    If @error Then MsgBox(0, 'Error', 'Error - setID3Tag', 5)
    _setID3Tag($file, 'TitleAlbum', 'Mega')
    If @error Then MsgBox(0, 'Error', 'Error - setID3Tag', 5)
    $re = _getID3Tag($file)
    If @error Then MsgBox(0, 'Error', 'Error - no array returned', 5)
    _ArrayDisplay($re)
    _DLLshutdown()

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================================================
    ; 'TitleAlbum', 'Movie', 'Title', 'CopyrightYear', 'CopyrightHolder', 'Comments', 'Label', 'BeatsPerMinute',
    ; 'LeadArtist', 'PartOfSet', 'TrackPosition', 'Year', 'Genre', 'FileId', 'ISRC'
    ;================================================================================================================
    Func _setID3Tag($h_file, $detail, $value)
    Local $oId3 = ObjCreate("CDDBControl.CddbID3Tag")
    If Not IsObj($oId3) Then
    SetError(1)
    Return 0
    EndIf
    ; False means open for read-write
    $oId3.LoadFromFile ($h_file, False)

    [/autoit] [autoit][/autoit] [autoit]

    Switch $detail
    Case 'TitleAlbum'
    $oId3.Album = $value
    Case 'LeadArtist'
    $oId3.LeadArtist = $value
    Case 'Title'
    $oId3.Title = $value
    Case 'TrackPosition'
    $oId3.TrackPosition = $value
    Case 'Year'
    $oId3.Year = $value
    Case 'Genre'
    $oId3.Genre = $value
    Case 'Comments'
    $oId3.Comments = $value
    Case 'Label'
    $oId3.Label = $value
    Case 'FileID'
    $oId3.FileId = $value
    Case 'IRSC'
    $oId3.ISRC = $value
    Case 'CopyrightHolder'
    $oId3.CopyrightHolder = $value
    Case 'CopyrightYear'
    $oId3.CopyrightYear = $value
    Case 'PartOfSet'
    $oId3.PartOfSet = $value
    Case 'Movie'
    $oId3.Movie = $value
    Case 'BeatsPerMinute'
    $oId3.BeatsPerMinute = $value
    Case Else
    SetError(2)
    Return 0
    EndSwitch
    $oId3.SaveToFile ($h_file)
    Return 1
    EndFunc ;==>_setID3Tag

    [/autoit] [autoit][/autoit] [autoit]

    Func _getID3Tag($h_file)
    Local $oId3 = ObjCreate("CDDBControl.CddbID3Tag")
    If Not IsObj($oId3) Then
    SetError(1)
    Return 0
    EndIf
    $oId3.LoadFromFile ($h_file, False)
    Local $idTag_A[15][2]
    $idTag_A[0][0] = 'Title'
    $idTag_A[0][1] = $oId3.Title
    $idTag_A[1][0] = 'LeadArtist'
    $idTag_A[1][1] = $oId3.LeadArtist
    $idTag_A[2][0] = 'Album'
    $idTag_A[2][1] = $oId3.Album
    $idTag_A[3][0] = 'TrackPosition'
    $idTag_A[3][1] = $oId3.TrackPosition
    $idTag_A[4][0] = 'Year'
    $idTag_A[4][1] = $oId3.Year
    $idTag_A[5][0] = 'Genre'
    $idTag_A[5][1] = $oId3.Genre
    $idTag_A[6][0] = 'Comments'
    $idTag_A[6][1] = $oId3.Comments
    $idTag_A[7][0] = 'Label'
    $idTag_A[7][1] = $oId3.Label
    $idTag_A[8][0] = 'FileId'
    $idTag_A[8][1] = $oId3.FileId
    $idTag_A[9][0] = 'ISRC'
    $idTag_A[9][1] = $oId3.ISRC
    $idTag_A[10][0] = 'CopyrightHolder'
    $idTag_A[10][1] = $oId3.CopyrightHolder
    $idTag_A[11][0] = 'CopyrightYear'
    $idTag_A[11][1] = $oId3.CopyrightYear
    $idTag_A[12][0] = 'PartOfSet'
    $idTag_A[12][1] = $oId3.PartOfSet
    $idTag_A[13][0] = 'Movie'
    $idTag_A[13][1] = $oId3.Movie
    $idTag_A[14][0] = 'BeatsPerMinute'
    $idTag_A[14][1] = $oId3.BeatsPerMinute
    Return $idTag_A
    EndFunc ;==>_getID3Tag

    [/autoit] [autoit][/autoit] [autoit]

    Func _DLLstartup($DLLpath = '')
    If $DLLpath = Default Or $DLLpath = '' Then $DLLpath = @ScriptDir & '\cddbcontrol.dll'
    ShellExecuteWait('regsvr32', '/s /i ' & $DLLpath, @WindowsDir, 'open', @SW_HIDE)
    EndFunc ;==>_DLLstartup

    [/autoit] [autoit][/autoit] [autoit]

    Func _DLLshutdown($DLLpath = '')
    If $DLLpath = Default Or $DLLpath = '' Then $DLLpath = @ScriptDir & '\cddbcontrol.dll'
    ShellExecuteWait('regsvr32', ' /s /u ' & $DLLpath, @WindowsDir, 'open', @SW_HIDE)
    EndFunc ;==>_DLLshutdown

    [/autoit]

    So long,

    Mega

  • schreibt das id3 version 1 oder 2?
    aber wenns fürs navi ist wirds wohl mindestens 1 sein, da das gerät 2 sicher nicht lesen kann

    wenns beides lesen und schreiben kann denke ich, ist das schon intertessant

    mfg