Wie viel Stunden Musik (mp3) habe ich?

  • Mit diesem kleinen program kan man seinen Musikordner auswählen und bekommt angezeigt, wie viele Stundne, Minuten und Sekunden Musik sich in dem Ordner befinden.

    Es ist eigentlich nur aus langeweile entstanden.....wenn es bei windows XP zu problemen kommt, liegt das an $test=_GetExtProperty($hFilesFolders[$r], 21) dort müsst ihr eventuell einen anderen Parameter als 21 eintragen.

    Spoiler anzeigen
    [autoit]

    #include<array.au3>

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

    local $path = FileSelectFolder("Wähle einen Ordner aus.", "")

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

    $hFilesFolders = FileListToArrayX($path)

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

    $sekunden=0

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

    for $r=1 to ubound($hFilesFolders)-1
    if stringright($hFilesFolders[$r],4) = ".mp3" then

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

    $test=""
    if @OSVersion = "WIN_VISTA" then
    $test=_GetExtProperty($hFilesFolders[$r], 27)
    Else
    $test=_GetExtProperty($hFilesFolders[$r], 21)
    endif

    $zeit=stringsplit($test,":",1)

    $sekunden=$sekunden+$zeit[3]
    $sekunden=$sekunden+$zeit[2]*60
    $sekunden=$sekunden+$zeit[1]*3600
    endif
    Next

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

    $stunden=int($sekunden/3600)
    $sekunden=$sekunden- $stunden*3600

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

    $minuten=int($sekunden/60)
    $sekunden=$sekunden- $minuten*60

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

    msgbox(0,"Die Länge ist:",$stunden &":"& $minuten &":"& $sekunden)

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

    ;===============================================================================
    ; Function Name: GetExtProperty($sPath,$iProp)
    ; Description: Returns an extended property of a given file.
    ; Parameter(s): $sPath - The path to the file you are attempting to retrieve an extended property from.
    ; $iProp - The numerical value for the property you want returned. If $iProp is is set
    ; to -1 then all properties will be returned in a 1 dimensional array in their corresponding order.
    ; The properties are as follows:
    ; Name = 0
    ; Size = 1
    ; Type = 2
    ; DateModified = 3
    ; DateCreated = 4
    ; DateAccessed = 5
    ; Attributes = 6
    ; Status = 7
    ; Owner = 8
    ; Author = 9
    ; Title = 10
    ; Subject = 11
    ; Category = 12
    ; Pages = 13
    ; Comments = 14
    ; Copyright = 15
    ; Artist = 16
    ; AlbumTitle = 17
    ; Year = 18
    ; TrackNumber = 19
    ; Genre = 20
    ; Duration = 21
    ; BitRate = 22
    ; Protected = 23
    ; CameraModel = 24
    ; DatePictureTaken = 25
    ; Dimensions = 26
    ; Width = 27
    ; Height = 28
    ; Company = 30
    ; Description = 31
    ; FileVersion = 32
    ; ProductName = 33
    ; ProductVersion = 34
    ; Requirement(s): File specified in $spath must exist.
    ; Return Value(s): On Success - The extended file property, or if $iProp = -1 then an array with all properties
    ; On Failure - 0, @Error - 1 (If file does not exist)
    ; Author(s): Simucal ([email='Simucal@gmail.com'][/email])
    ; Note(s):
    ;
    ;===============================================================================
    Func _GetExtProperty($sPath, $iProp)
    Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
    $iExist = FileExists($sPath)
    If $iExist = 0 Then
    SetError(1)
    Return 0
    Else
    $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
    $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))
    $oShellApp = ObjCreate ("shell.application")
    $oDir = $oShellApp.NameSpace ($sDir)
    $oFile = $oDir.Parsename ($sFile)

    If $iProp = -1 Then
    Local $aProperty[35]
    For $i = 0 To 34
    $aProperty[$i] = $oDir.GetDetailsOf ($oFile, $i)
    Next
    Return $aProperty
    Else
    $sProperty = $oDir.GetDetailsOf ($oFile, $iProp)
    If $sProperty = "" Then
    Return 0
    Else
    Return $sProperty
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_GetExtProperty

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

    Func FileListToArrayX($FLTAXstartDir)
    Local $FLTAXstring = ""

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

    ;Retrieve array of all folders
    $folderArray = RecursiveFolderSearch ($FLTAXstartDir)

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

    ;Loop through all folders
    For $X = 1 To $folderArray[0]
    $search = FileFindFirstFile($folderArray[$X] & "\*.*")
    If @error Then ContinueLoop

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

    ;Search through all files and folders in directory
    While 1
    $next = FileFindNextFile($search)
    If @error Then ExitLoop

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

    ;Skip folders, append to strin of all filenames
    If Not StringInStr(FileGetAttrib($folderArray[$X] & "\" & $next), "D") Then $FLTAXstring &= $folderArray[$X] & "\" & $next & "*"
    WEnd
    FileClose($search)
    Next

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

    ;Split string into array and return it
    Return StringSplit(StringTrimRight($FLTAXstring, 1), "*")
    EndFunc;==>FileListToArrayX

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

    Func RecursiveFolderSearch ($startDir, $depth = 0)
    If $depth = 0 Then Global $RFSstring = $startDir & "*"

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

    $search = FileFindFirstFile($startDir & "\*.*")
    If @error Then Return

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

    ;Search through all files and folders in directory
    While 1
    $next = FileFindNextFile($search)
    If @error Then ExitLoop

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

    ;If folder, recurse
    If StringInStr(FileGetAttrib($startDir & "\" & $next), "D") Then

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

    ;Append foldername to string
    $RFSstring &= $startDir & "\" & $next & "*"

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

    ;Recurse
    RecursiveFolderSearch ($startDir & "\" & $next, $depth + 1)
    EndIf
    WEnd
    FileClose($search)

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

    If $depth = 0 Then Return StringSplit(StringTrimRight($RFSstring, 1), "*")
    EndFunc;==>RecursiveFolderSearch

    [/autoit]
  • Schön, aber er gibt einen Fehler, wenn ein Unterordner keine Musik enthält.
    Deshalb statt:

    [autoit]


    $sekunden=$sekunden+$zeit[3]
    $sekunden=$sekunden+$zeit[2]*60
    $sekunden=$sekunden+$zeit[1]*3600

    [/autoit]


    besser:

    [autoit]


    If $zeit[0]=3 Then
    $sekunden=$sekunden+$zeit[3]
    $sekunden=$sekunden+$zeit[2]*60
    $sekunden=$sekunden+$zeit[1]*3600
    EndIf

    [/autoit]


    Dann funktionierts auch bei mir (hab Win_XP, also stimmt die 21 wohl)
    /edit: OT: Übrigens: Ich Hab magere 15:03:39

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Ich habe 23:11:19 Musik die ich gut finde und insgesammt gammelt Musik mit der Länge 57:24:53 Sekunden auf der Festplatte rum

  • Also wenn ich meine ganzen MP3's zusammen zähle, würde ich auf paar Monate kommen.

    Zahlreiche DVD's voller MP3 Dateien von zahlreichen Radiosendern, dazu eine große Sammlung Lieblingsmusik und dann noch die Musik, die ich für Nichten und Neffen und andere Familienmitglieder auf dem PC habe, da würde ich nie zur Ruhe kommen, diese alle zu hören. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Code
    F:\Programme\AutoIt\Sammlung\Wie viel Musik habe ich.au3 (23) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $sekunden=$sekunden+$zeit[3]
    $sekunden=$sekunden+^ ERROR
    >Exit code: 1	Time: 20.940

    Will irgendwie nicht, warum ?

    • Offizieller Beitrag

    Hallo

    1426:35:23 - Alles natürlich legal ;)
    keksi: Das Problem hatte ich auch. Liegt daran, das manchne mp3s korrupt sind oder er die Zeit einfach nicht lesen kann.
    So kann man es fixen (ab zeile 20)

    [autoit]

    If $test Then
    $zeit = StringSplit($test, ":", 1)

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

    $sekunden = $sekunden + $zeit[3]
    $sekunden = $sekunden + $zeit[2] * 60
    $sekunden = $sekunden + $zeit[1] * 3600
    EndIf

    [/autoit]

    Mfg Spider

  • Ich muss sagen ein tolles Script einfach genial.

    Hat mich schon immer interessiert wie Viel stunden Musik ich habe THX.

    Bei mir sind es 68:28:57.