mp3 Auswahl

  • Hallo zusammen,

    Ich habe in einem Ordner mehrere mp3 Dateien.
    Es gibt auch Unterordner...

    Folgendes möchte ich machen:

    Ich möchte die mp3 Dateien kurz anhören (z.B. 10 Sekunden)
    und dann sollte das nächste Lied angespielt werden.

    Drücke ich z.B. die Space-Taste, dann soll das aktuelle Lied
    in den Speicherordner "kopiert" werden.


    Hier meine Versuche

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <File.au3>
    #include <Array.au3>
    #include <Sound.au3>

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

    Dim $Array
    HotKeySet("{Space}", "_Copy")
    $Zeit = 10

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

    $Musikordner = FileSelectFolder("Musik", @ScriptDir)
    $Speicherordner = FileSelectFolder("Musik speichern in ", @ScriptDir, 1)

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

    $Array = _FileListToArray($Musikordner, "*.mp3")

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

    _ArrayDisplay($Array)

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

    For $i = 1 To UBound($Array) - 1
    ;MsgBox(0, "", $Array[$i])
    SplashTextOn("Titel",$Array[$i])
    Sleep(300)

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

    $Song = _SoundOpen($Musikordner & "\" & $Array[$i])

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

    _SoundPlay($Song, 0)

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

    Sleep(4000)

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

    _SoundClose($Song)
    SplashOff()
    Next

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

    Func _Copy()
    FileCopy($Musikordner & "\" & $Array[$i],$Speicherordner & "\" & $Array[$i])
    MsgBox(4096, "Kopiert", $Array[$i],1)
    EndFunc ;==>_Copy

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

    Die mp3 Dateien werden nacheinander angezeigt.
    Ich wollte das auch mit SplashText anzeigen
    solange das Lied läuft...


    Edit... läuft jetzt...

    2 Fragen habe ich noch:

    Weiß jemand wie man da einen Loop einbauen kann?

    Beispiel:

    Ich höre das Lied! Dann setze ich den 1. Punkt und später das Loop Ende.
    So daß eine Schleife läuft bis man abbricht!

    Wie kann man eine Pause einbauen?


    Liebe Grüße
    Ilse ;)

    4 Mal editiert, zuletzt von Ilse (3. November 2012 um 17:21)

  • Hallo Ilse,

    da wie du schreibst auch Unterordner mit durchsucht werden sollen benötogst du eine rekursive Suchfunktio z.B.: _RecursiveFileListToArray von Oscar .

    Die gefundenen MP3's würde ich in einer Listview mit Checkboxen anzeigen lassen und beim Testhören bei Gefallen anhacken. Danach auf Buttonklick alle angehackten kopieren.

    mfg autoBert

  • Hallo Autobert,

    merci für deine Hilfe.
    Huh... soweit bin ich noch nicht. Ob ich das schaffe...

    aber gute Idee...

    Weißt du vielleicht, wie ich das ganze pausieren lassen kann?
    Ich meine eine Pause im Loop!

    Liebe Grüße
    Ilse ;)

  • Hallo Ilse,

    hier das Grundgerüst meines Lösungsvrschlags:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>
    #include <Sound.au3>
    #include <Array.au3>

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

    If @AutoItVersion < '3.3.0.0' Then Exit MsgBox(16, 'Fehler', 'Funktioniert erst ab AutoIt-Version 3.3.0.0')

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

    Global $htoPlay, $iStart

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

    $Musikordner = FileSelectFolder("Musik", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")

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

    $timer = TimerInit()
    $aReturn = _RecursiveFileListToArray($Musikordner, '\.mp3\z', 1) ; Alle Dateien mit der Erweiterung ".mp3" (im ausgewählten Ordner und Unterordnern)
    ConsoleWrite(@error & @CRLF)
    ConsoleWrite($aReturn[0] & @TAB & Round(TimerDiff($timer) / 1000, 3) & ' sek.' & @CRLF)
    ;_ArrayDisplay($aReturn, 'Alle Dateien mit der Erweiterung ".,mp3"')

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

    $iWidth = @DesktopWidth
    $iHeight = @DesktopHeight - 60
    ConsoleWrite($iWidth & "/" & $iHeight)
    $hGui = GUICreate("Form1", $iWidth, $iHeight, 0, 0)
    $idMP3s = GUICtrlCreateListView(" |Pfad", 5, 5, $iWidth - 10, $iHeight - 50, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT, $LVS_SINGLESEL), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    $idNext = GUICtrlCreateButton("&Nächstes", 5, $iHeight - 30, 70)
    $idPauseResume = GUICtrlCreateButton("&Pause", $iWidth / 2 - 75, $iHeight - 30, 70)
    $idCopy = GUICtrlCreateButton("&Kopieren", $iWidth / 2 + 5, $iHeight - 30, 70)
    $idMarkIt = GUICtrlCreateButton("&Markieren", $iWidth - 75, $iHeight - 30, 70)
    For $i = 1 To $aReturn[0]
    GUICtrlCreateListViewItem("|" & $aReturn[$i], $idMP3s)
    ;Achtung 1. Spalte hat keinen Inhalt (nur CheckBox)
    Next
    GUISetState()

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

    $iAktuell = 1
    _PlayIt()

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

    While 1
    _EventHandler()
    WEnd

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

    Func _EventHandler()
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idNext, $idMarkIt
    if $msg = $idMarkIt Then _GUICtrlListView_SetItemChecked($idMP3s, $iAktuell-1)
    $iAktuell += 1
    If $iAktuell <= $aReturn[0] Then _PlayIt()
    Case $idPauseResume
    If GUICtrlRead($idPauseResume) = "&Pause" Then
    GUICtrlSetData($idPauseResume, "&Weiter")
    If IsArray($htoPlay) Then _SoundPause($htoPlay)
    While GUICtrlRead($idPauseResume) <> "&Pause"
    _MySleep(50)
    WEnd
    If IsArray($htoPlay) Then _SoundResume($htoPlay)
    Else
    GUICtrlSetData($idPauseResume, "&Pause")
    EndIf
    Case $idCopy
    $Speicherordner = FileSelectFolder("ausgewählte Musik speichern in ", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 1)
    For $i = 0 To _GUICtrlListView_GetItemCount($idMP3s) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($idMP3s, $i) Then ; wenn geChecked (angehakt) dann
    ;_GUICtrlListView_GetItemSelected ;wenn markiert
    $aItemText = _GUICtrlListView_GetItemTextArray($idMP3s, $i)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1]
    ;$aItemText[2] Qiellpfad der MP3
    ConsoleWrite($aItemText[2] & @CRLF)
    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($idMP3s, $i)
    Sleep(Random(50, 250, 1)) ;löschen und kopier Befehl einfügen
    EndIf
    Next

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

    EndSwitch
    EndFunc ;==>_EventHandler

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

    Func _PlayIt()
    If IsArray($htoPlay) Then _SoundStop($htoPlay)
    $htoPlay = _SoundOpen($aReturn[$iAktuell])
    $iStart = TimerInit()
    _GUICtrlListView_EnsureVisible($idMP3s, $iAktuell - 1)
    ;_GUICtrlListView_SetItemFocused($idMP3s, $iAktuell - 1)
    _GUICtrlListView_SetItemSelected($idMP3s, $iAktuell-1)
    _SoundPlay($htoPlay)
    AdlibRegister("_CheckTime")
    EndFunc ;==>_PlayIt

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

    Func _CheckTime()
    Do
    ConsoleWrite(Round(TimerDiff($iStart), 3) & @CRLF)
    _EventHandler()
    Until TimerDiff($iStart) >= 15000
    AdlibUnRegister()
    $iAktuell += 1
    If $iAktuell <= $aReturn[0] Then _PlayIt()
    EndFunc ;==>_CheckTime

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

    Func _MySleep($iMSec)
    Local $iStart = TimerInit()
    Do
    _EventHandler()
    Until TimerDiff($iStart) >= $iMSec
    EndFunc ;==>_MySleep

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

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    ; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
    ; einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

    [/autoit]

    eignetlich musst du nur noch die Kopierfunktion einfügen. Da ich nur wenige M3's habe konnte ich nicht ausgiebig testen. Ich fürchte dass bei grossen Musikarchiven ein Stackfehler kommt.

    mfg autoBert

  • Hallo Ilse,

    tausche die Func _PlayIt gegen diese:

    [autoit]

    Func _PlayIt()
    If IsArray($htoPlay) Then _SoundStop($htoPlay)
    $htoPlay = _SoundOpen($aReturn[$iAktuell])
    $iStart = TimerInit()
    _GUICtrlListView_EnsureVisible($idMP3s, $iAktuell - 1)
    _GUICtrlListView_SetItemSelected($idMP3s, $iAktuell-1)
    ControlFocus($hGui,"",$idMP3s) ;<========
    _SoundPlay($htoPlay)
    AdlibRegister("_CheckTime")
    EndFunc ;==>_PlayIt

    [/autoit]

    durch die eimgefügte Zeile erhält die LV den Focus und man kann besser erkennen was gerade gespielt wird.

    mfg autoBert

  • Hallo Autobert,

    danke habe ich gemacht.
    Ich hätte noch eine Frage zu dem Script.
    Ich habe den Button Liste eingebaut.

    Wie kann ich z.B. die Listview selbst füllen, also erweitern?
    Also so:

    1. ich öffne den ersten Ordner und lese files ein.
    2. dann öffne ich einen anderen Ordner und hänge Files an...

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>
    #include <Sound.au3>
    #include <Array.au3>

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

    If @AutoItVersion < '3.3.0.0' Then Exit MsgBox(16, 'Fehler', 'Funktioniert erst ab AutoIt-Version 3.3.0.0')

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

    Global $htoPlay, $iStart

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

    $Musikordner = FileSelectFolder("Musik", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")

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

    $timer = TimerInit()
    $aReturn = _RecursiveFileListToArray($Musikordner, '\.mp3\z', 1) ; Alle Dateien mit der Erweiterung ".mp3" (im ausgewählten Ordner und Unterordnern)
    ConsoleWrite(@error & @CRLF)
    ConsoleWrite($aReturn[0] & @TAB & Round(TimerDiff($timer) / 1000, 3) & ' sek.' & @CRLF)
    ;_ArrayDisplay($aReturn, 'Alle Dateien mit der Erweiterung ".,mp3"')

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

    $iWidth = @DesktopWidth
    $iHeight = @DesktopHeight - 60
    ConsoleWrite($iWidth & "/" & $iHeight)
    $hGui = GUICreate("Form1", $iWidth, $iHeight, 0, 0)
    $idMP3s = GUICtrlCreateListView(" |Pfad", 5, 5, $iWidth - 10, $iHeight - 50, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT, $LVS_SINGLESEL), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    $idNext = GUICtrlCreateButton("&Nächstes", 5, $iHeight - 30, 70)
    $idPrev = GUICtrlCreateButton("&Zurück", 100, $iHeight - 30, 70)
    $idopen = GUICtrlCreateButton("&Liste", 200, $iHeight - 30, 70)
    $idPauseResume = GUICtrlCreateButton("&Pause", $iWidth / 2 - 75, $iHeight - 30, 70)
    $idCopy = GUICtrlCreateButton("&Kopieren", $iWidth / 2 + 5, $iHeight - 30, 70)
    $idMarkIt = GUICtrlCreateButton("&Markieren", $iWidth - 75, $iHeight - 30, 70)
    For $i = 1 To $aReturn[0]
    GUICtrlCreateListViewItem("|" & $aReturn[$i], $idMP3s)
    ;Achtung 1. Spalte hat keinen Inhalt (nur CheckBox)
    Next
    GUISetState()

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

    $iAktuell = 1
    _PlayIt()

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

    While 1
    _EventHandler()
    WEnd

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

    Func _EventHandler()
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idNext, $idMarkIt
    if $msg = $idMarkIt Then _GUICtrlListView_SetItemChecked($idMP3s, $iAktuell-1)
    $iAktuell += 1
    If $iAktuell <= $aReturn[0] Then _PlayIt()

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

    Case $idPrev, $idMarkIt
    if $msg = $idMarkIt Then _GUICtrlListView_SetItemChecked($idMP3s, $iAktuell-1)
    $iAktuell -= 1
    If $iAktuell <= $aReturn[0] Then _PlayIt()

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

    Case $idopen
    $Musikordner = FileSelectFolder("Musik", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
    ;$aReturn = _RecursiveFileListToArray($Musikordner, '\.mp3\z', 1) ; Alle Dateien mit der Erweiterung ".mp3" (im ausgewählten Ordner und Unterordnern)

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

    Case $idPauseResume
    If GUICtrlRead($idPauseResume) = "&Pause" Then
    GUICtrlSetData($idPauseResume, "&Weiter")
    If IsArray($htoPlay) Then _SoundPause($htoPlay)
    While GUICtrlRead($idPauseResume) <> "&Pause"
    _MySleep(50)
    WEnd
    If IsArray($htoPlay) Then _SoundResume($htoPlay)
    Else
    GUICtrlSetData($idPauseResume, "&Pause")
    EndIf
    Case $idCopy
    $Speicherordner = FileSelectFolder("ausgewählte Musik speichern in ", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 1)
    For $i = 0 To _GUICtrlListView_GetItemCount($idMP3s) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($idMP3s, $i) Then ; wenn geChecked (angehakt) dann
    ;_GUICtrlListView_GetItemSelected ;wenn markiert
    $aItemText = _GUICtrlListView_GetItemTextArray($idMP3s, $i)
    ;Msgbox(4091,"",)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItemText zuweisen
    ;FileCopy($Musikordner & "\" & $Array[$i],$Speicherordner & "\" & $Array[$i])
    ;$aItemText[0] enthält die Anzahl der Spalten
    ;$aItemText[1]
    ;$aItemText[2] Qiellpfad der MP3
    ConsoleWrite($aItemText[2] & @CRLF)
    FileCopy($aItemText[2],$Speicherordner)
    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($idMP3s, $i)
    Sleep(Random(50, 250, 1)) ;löschen und kopier Befehl einfügen
    EndIf
    Next

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

    EndSwitch
    EndFunc ;==>_EventHandler

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

    Func _PlayIt()
    If IsArray($htoPlay) Then _SoundStop($htoPlay)
    $htoPlay = _SoundOpen($aReturn[$iAktuell])
    $iStart = TimerInit()
    _GUICtrlListView_EnsureVisible($idMP3s, $iAktuell - 1)
    _GUICtrlListView_SetItemSelected($idMP3s, $iAktuell-1)
    ControlFocus($hGui,"",$idMP3s) ;<========
    _SoundPlay($htoPlay)
    AdlibRegister("_CheckTime")
    EndFunc ;==>_PlayIt

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

    Func _CheckTime()
    Do
    ConsoleWrite(Round(TimerDiff($iStart), 3) & @CRLF)
    _EventHandler()
    Until TimerDiff($iStart) >= 12000
    AdlibUnRegister()
    $iAktuell += 1
    If $iAktuell <= $aReturn[0] Then _PlayIt()
    EndFunc ;==>_CheckTime

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

    Func _MySleep($iMSec)
    Local $iStart = TimerInit()
    Do
    _EventHandler()
    Until TimerDiff($iStart) >= $iMSec
    EndFunc ;==>_MySleep

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

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    ; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
    ; einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

    [/autoit]

    Geht das?

    Liebe Grüße
    Ilse ;)

  • Wie kann ich z.B. die Listview selbst füllen, also erweitern?
    Also so:

    1. ich öffne den ersten Ordner und lese files ein.
    2. dann öffne ich einen anderen Ordner und hänge Files an...

    So:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>
    #include <Sound.au3>
    #include <Array.au3>

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

    If @AutoItVersion < '3.3.0.0' Then Exit MsgBox(16, 'Fehler', 'Funktioniert erst ab AutoIt-Version 3.3.0.0')

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

    Global $htoPlay, $iStart, $aReturn[1], $Musikordner

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

    $iWidth = @DesktopWidth
    $iHeight = @DesktopHeight - 60
    ConsoleWrite($iWidth & "/" & $iHeight)
    $hGui = GUICreate("Form1", $iWidth, $iHeight, 0, 0)
    $idMP3s = GUICtrlCreateListView(" |Pfad", 5, 5, $iWidth - 10, $iHeight - 50, _
    BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT, $LVS_SINGLESEL), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) ;$LVS_SHOWSELALWAYS
    ; wichtig ist der Stil $LVS_Report und der eweiterte Stil $LVS_EX_Checkboxes
    $idNext = GUICtrlCreateButton("&Nächstes", 5, $iHeight - 30, 70)
    $idPrev = GUICtrlCreateButton("&Zurück", 100, $iHeight - 30, 70)
    $idopen = GUICtrlCreateButton("&Liste", 200, $iHeight - 30, 70)
    $idPauseResume = GUICtrlCreateButton("&Pause", $iWidth / 2 - 75, $iHeight - 30, 70)
    $idCopy = GUICtrlCreateButton("&Kopieren", $iWidth / 2 + 5, $iHeight - 30, 70)
    $idMarkIt = GUICtrlCreateButton("&Markieren", $iWidth - 75, $iHeight - 30, 70)
    _AddMP3s()
    _GUICtrlListView_SetColumnWidth($idMP3s,1,$iWidth-50)
    GUISetState()

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

    $iAktuell = 0
    _PlayIt()

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

    While 1
    _EventHandler()
    WEnd

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

    Func _EventHandler()
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idNext, $idMarkIt
    If $msg = $idMarkIt And $iAktuell > -1 Then _GUICtrlListView_SetItemChecked($idMP3s, $iAktuell)
    $iAktuell += 1
    If $iAktuell > _GUICtrlListView_GetItemCount($idMP3s)-1 Then $iAktuell = 0
    _PlayIt()

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

    Case $idPrev
    If $msg = $idMarkIt Then _GUICtrlListView_SetItemChecked($idMP3s, $iAktuell - 1)
    $iAktuell -= 1
    If $iAktuell <0 Then $iAktuell = _GUICtrlListView_GetItemCount($idMP3s)-1
    _PlayIt()

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

    Case $idopen
    _AddMP3s()

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

    Case $idPauseResume
    If GUICtrlRead($idPauseResume) = "&Pause" Then
    GUICtrlSetData($idPauseResume, "&Weiter")
    If IsArray($htoPlay) Then _SoundPause($htoPlay)
    While GUICtrlRead($idPauseResume) <> "&Pause"
    _MySleep(50)
    WEnd
    If IsArray($htoPlay) Then _SoundResume($htoPlay)
    Else
    GUICtrlSetData($idPauseResume, "&Pause")
    EndIf
    Case $idCopy
    $Speicherordner = FileSelectFolder("ausgewählte Musik speichern in ", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 1)
    For $i = 0 To _GUICtrlListView_GetItemCount($idMP3s) - 1
    ;Schleifenbeginn da das erste Item den Index 0 hat von 0 bis Anzahl -1

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

    If _GUICtrlListView_GetItemChecked($idMP3s, $i) Then ; wenn geChecked (angehakt) dann
    ;_GUICtrlListView_GetItemSelected ;wenn markiert
    $aItem = _GUICtrlListView_GetItemTextArray($idMP3s, $i)
    ;Msgbox(4091,"",)
    ;Inhalt aller Spalten dieser Zeile dem Array $aItem zuweisen
    ;FileCopy($Musikordner & "\" & $Array[$i],$Speicherordner & "\" & $Array[$i])
    ;$aItem[0] enthält die Anzahl der Spalten
    ;$aItem[1] leer nur CheckBox
    ;$aItem[2] Qiellpfad der MP3
    ConsoleWrite($aItem[2] & @CRLF)
    FileCopy($aItem[2], $Speicherordner)
    ; Automatisch an die Stelle hinscrollen
    _GUICtrlListView_EnsureVisible($idMP3s, $i)
    Sleep(Random(50, 250, 1)) ;löschen und kopier Befehl einfügen
    EndIf
    Next

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

    EndSwitch
    EndFunc ;==>_EventHandler

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

    Func _AddMP3s()
    $Musikordner = FileSelectFolder("Musik", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")

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

    $timer = TimerInit()
    $aReturn = _RecursiveFileListToArray($Musikordner, '\.mp3\z', 1) ; Alle Dateien mit der Erweiterung ".mp3" (im ausgewählten Ordner und Unterordnern)
    ConsoleWrite(@error & @CRLF)
    ConsoleWrite($aReturn[0] & @TAB & Round(TimerDiff($timer) / 1000, 3) & ' sek.' & @CRLF)
    ;_ArrayDisplay($aReturn, 'Alle Dateien mit der Erweiterung ".,mp3"')
    For $i = 1 To $aReturn[0]
    GUICtrlCreateListViewItem("|" & $aReturn[$i], $idMP3s)
    ;Achtung 1. Spalte hat keinen Inhalt (nur CheckBox)
    Next
    EndFunc ;==>_AddMP3s

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

    Func _PlayIt()
    Local $aItem = _GUICtrlListView_GetItemTextArray($idMP3s,$iAktuell)
    ConsoleWrite($aItem[2])
    If IsArray($htoPlay) Then _SoundStop($htoPlay)
    $htoPlay = _SoundOpen($aItem[2])
    $iStart = TimerInit()
    _GUICtrlListView_EnsureVisible($idMP3s, $iAktuell)
    _GUICtrlListView_SetItemSelected($idMP3s, $iAktuell)
    ControlFocus($hGui,"",$idMP3s)
    _SoundPlay($htoPlay)
    AdlibRegister("_CheckTime")
    EndFunc ;==>_PlayIt

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

    Func _CheckTime()
    Do
    ;ConsoleWrite(Round(TimerDiff($iStart), 3) & @CRLF)
    _EventHandler()
    Until TimerDiff($iStart) >= 12000
    AdlibUnRegister()
    $iAktuell += 1
    If $iAktuell <= _GUICtrlListView_GetItemCount($idMP3s)-1 Then _PlayIt()
    EndFunc ;==>_CheckTime

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

    Func _MySleep($iMSec)
    Local $iStart = TimerInit()
    Do
    _EventHandler()
    Until TimerDiff($iStart) >= $iMSec
    EndFunc ;==>_MySleep

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

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    ; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
    ; einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

    [/autoit]

    Dadurch bedingt hat sich vieles am Skript geändert, da jetzt ja nicht mehr gewährlestet ist dass das Array und die LV syncron sind.

    mfg autoBert