- 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
#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()
;===============================================================================================================
; '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)
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
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
Func _DLLstartup($DLLpath = '')
If $DLLpath = Default Or $DLLpath = '' Then $DLLpath = @ScriptDir & '\cddbcontrol.dll'
ShellExecuteWait('regsvr32', '/s /i ' & $DLLpath, @WindowsDir, 'open', @SW_HIDE)
EndFunc ;==>_DLLstartup
Func _DLLshutdown($DLLpath = '')
If $DLLpath = Default Or $DLLpath = '' Then $DLLpath = @ScriptDir & '\cddbcontrol.dll'
ShellExecuteWait('regsvr32', ' /s /u ' & $DLLpath, @WindowsDir, 'open', @SW_HIDE)
EndFunc ;==>_DLLshutdown
So long,
Mega