playliste aus tabelle erstellen

  • hi @all wie kann ich aus dieser tabelle eine playliste bauen?

    Spoiler anzeigen
    [autoit]

    $hListView = GUICtrlCreateListView('Dateiname|Pfad', 10, 375, 350, 200)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
    $return = IniRead(@ScriptDir &"\INRadio.ini","Load","BIB","")
    If $return = "" Then
    $return = 'C:\Users\' & @UserName & '\Desktop'
    Endif
    $returnputin = _GetFilesFolder_Rekursiv($return, "mp3", 0)
    For $i = 1 To $returnputin[0]
    $dateiname = StringSplit($returnputin[$i], "\")
    GUICtrlCreateListViewItem($dateiname[$dateiname[0]] & "|" & $returnputin[$i], $hListView)
    Next

    [/autoit]
  • hier das ganze script er soll die ganze tabelle nacheinander abbarbeiten

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <Bass.au3>
    #include <_GetFilesFolder_Rekursiv.au3>
    #include <GuiListView.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #include <BassConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    ;===================================================================================================
    ; INRadio-Localtuner by JuraX
    ;===================================================================================================

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

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_Field=INR|Jurax-Multimedia
    #AutoIt3Wrapper_Res_Field=ProductVersion|1.3
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    Opt("MouseCoordMode", 0)

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

    #Region StartUp
    Local $progress_slider, $slots, $hwnd
    Global $gaDropFiles[1]
    Global Const $WM_DROPFILESplay = 0x0233
    Global Const $WM_DROPFILES = 0x0233
    Global $playing_state = -1
    Global $aItem[2]
    Global $musichandle

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

    ;Bass StartUp
    _BASS_STARTUP(@ScriptDir & "\BASS.dll")
    _BASS_Init(0, -1, 44100, 0, "")
    If @error Then
    MsgBox(0, "Error", "Sound konnte nicht Initialisiert werden!")
    Exit
    EndIf

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

    $fftstruct = DllStructCreate("float[128]")
    #EndRegion StartUp

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

    #Region GUI
    $width = 380
    $height = 650
    $hwnd = GUICreate("INRadio-Localtuner", $width, $height, -1, -1, Default, $WS_EX_ACCEPTFILES)
    $Close = GUICtrlCreateButton("Close", 296, 160, 75, 25, 0)
    $Play = GUICtrlCreateButton("Play", 216, 160, 75, 25, 0)
    $Stop = GUICtrlCreateButton("Stop", 136, 160, 75, 25, 0)
    $newfile = GUICtrlCreateButton("Andere Datei", 36, 160, 75, 25, 0)
    $progress_slider = GUICtrlCreateProgress(8, 32, 236, 20)
    $slots = GUICtrlCreateLabel(GUICtrlRead($progress_slider) & "%", 8, 8, 150, 17)
    $ordner = GUICtrlCreateButton("Neue Bibliothek",136,330)

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

    GUICtrlCreateLabel("Lautstärke", 8, 190, 80, 20)
    $Volume_slider2 = GUICtrlCreateSlider(8, 250, 366, 80)
    GUICtrlSetData($Volume_slider2, 50)
    GUICtrlSetLimit(-1, 100, 0)
    SoundSetWaveVolume(50)

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

    $hListView = GUICtrlCreateListView('Dateiname|Pfad', 10, 375, 350, 200)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
    $return = IniRead(@ScriptDir &"\INRadio.ini","Load","BIB","")
    If $return = "" Then
    $return = 'C:\Users\' & @UserName & '\Desktop'
    Endif
    $returnputin = _GetFilesFolder_Rekursiv($return, "mp3", 0)
    For $i = 1 To $returnputin[0]
    $dateiname = StringSplit($returnputin[$i], "\")
    GUICtrlCreateListViewItem($dateiname[$dateiname[0]] & "|" & $returnputin[$i], $hListView)
    Next

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

    $rightVol = GUICtrlCreateProgress(8, 88, 236, 17)
    GUICtrlSetLimit(-1, 100, 0)
    GUICtrlCreateLabel("Right Channel Volume Level", 8, 112, 150, 17)
    $LeftVol = GUICtrlCreateProgress(8, 136, 236, 17)
    GUICtrlSetLimit(-1, 100, 0)
    GUICtrlCreateLabel("Left Channel Volume Level", 8, 64, 150, 17)

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

    GUISetState(@SW_SHOW)
    #EndRegion GUI

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

    ;GUICtrlCreateListViewItem(StringRegExpReplace($file, '.*\\(.*)\..*', '$1')& "|" & $file, $hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE)

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

    _GDIPlus_Startup()
    $iX = 120
    $iY = 145
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($iX, $iY, $graphics)
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsClear($backbuffer)
    $pen1_size = 4
    $pen1 = _GDIPlus_PenCreate(0, $pen1_size)
    $pen2_size = 4
    $pen2 = _GDIPlus_PenCreate(0, $pen2_size)
    $pen3_size = 3
    $pen3 = _GDIPlus_PenCreate(0, $pen3_size)

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

    $fall_speed_l_threshold = 0
    $fall_speed_r_threshold = 0
    $equalizer_width = 24
    $max_l = 0
    $max_r = 0
    $fall_speed = 5
    $fire_up = 15

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

    $fft_start = 7
    $fft_end = 127
    $fft_boost = 750
    $dy = Int($iY / ($fft_end - $fft_start)) + $pen3_size
    $dyy = Int($iY / $dy / 2)
    $eq = -1
    Dim $mpos[2]
    ;Sonstiges
    AdlibRegister("Aktualisieren", 100)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    #Region Loop
    While 1 ;* Sleep(20)
    If $playing_state = 1 Then
    $current = _BASS_ChannelGetPosition($MusicHandle, $BASS_POS_BYTE)
    $percent = Round(($current / $song_length) * 100, 0)
    GUICtrlSetData($progress_slider, $percent)
    $levels = _BASS_ChannelGetLevel($MusicHandle)
    $rightChLvl = _LoWord($levels)
    $rightChLvlper = Round(($rightChLvl / 32768) * 100, 0)
    $LeftChLvl = _HiWord($levels)
    $leftChLvlper = Round(($LeftChLvl / 32768) * 100, 0)
    Else
    $rightChLvlper = 0
    $leftChLvlper = 0
    EndIf
    GUICtrlSetData($rightVol, $rightChLvlper)
    GUICtrlSetData($LeftVol, $leftChLvlper)
    Display_Vis($eq)
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE, $Close
    _BASS_Stop()
    _BASS_Free()
    ProcessClose("Radiotuner.exe")
    AdlibUnRegister("Aktualisieren")
    _GDIPlus_PenDispose($pen1)
    _GDIPlus_PenDispose($pen2)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_Shutdown()
    $fftstruct = 0
    Exit
    Case $Play
    _BASS_ChannelPlay($MusicHandle, 1)
    $playing_state = 1
    Case $newfile
    _BASS_ChannelStop($MusicHandle)
    $file = FileOpenDialog("Open...", "", "MP3 Files (*.mp3)")
    $MusicHandle = _BASS_StreamCreateFile(False, $file, 0, 0, 0)
    _BASS_ChannelPlay($MusicHandle, 0)
    ;Case $Volume_slider1
    ; _BASS_SetVolume(GUICtrlRead($Volume_slider1) / 100)
    Case $Volume_slider2
    SoundSetWaveVolume(GUICtrlRead($Volume_slider2))
    Case $ordner
    $var = FileSelectFolder("Ordner wählen", "")
    IniWrite(@ScriptDir &"\INRadio.ini","Load","BIB",$var)

    Case $Stop
    _BASS_ChannelStop($MusicHandle)
    $playing_state = -1
    EndSwitch
    $mpos = MouseGetPos()
    If $mpos[0]>= $width - $iX - 10 And $mpos[0] <= $width - 10 And $mpos[1] > 8 And $mpos[1] <= $iY + 8 And _IsPressed("01", "user32.dll") And WinActive($hwnd) Then
    $eq *= -1
    EndIf
    WEnd
    #EndRegion Loop
    #EndRegion

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

    #Region Func's
    Func OnAutoItExit()
    ; _BASS_Free()
    EndFunc ;==>OnAutoItExit

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

    Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam) ; diese Funktion wird benötigt, damit man auch mehrere Dateien droppen kann
    Local $nSize, $pFileName ; Original von UEZ http://www.autoit.de/index.php?page…4119#post134119
    Local $nAmt = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', 0xFFFFFFFF, 'ptr', 0, 'int', 255)

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

    For $i = 0 To $nAmt[0]
    $nSize = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', 0, 'int', 0)
    $nSize = $nSize[0] + 1
    $pFileName = DllStructCreate('wchar[' & $nSize & ']')
    DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', DllStructGetPtr($pFileName), 'int', $nSize)
    $filename = DllStructGetData($pFileName, 1) ;Dateinamen holen
    ConsoleWrite($filename & @CRLF)
    ReDim $gaDropFiles[$i + 1]
    $gaDropFiles[$i] = $filename
    $pFileName = 0
    Next
    ;_ArrayDisplay($gaDropFiles)
    For $i = 0 To UBound($gaDropFiles) - 2 ;kommt derzeit immer noch ein leerer Eintrag am schluss
    GUICtrlCreateListViewItem(StringRegExpReplace($gaDropFiles[$i], '.*\\(.*)\..*', '$1')& "|" & $gaDropFiles[$i], $hListView)
    Next
    _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE) ;erst wenn alle eigefügt sind
    EndFunc ;==>WM_DROPFILES_FUNC

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

    Func Aktualisieren()
    $Sliderstatus = GUICtrlRead($progress_slider)
    GUICtrlSetData($slots, $Sliderstatus)
    EndFunc ;==>Aktualisieren

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

    Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam);<================== Benachrichtigung Doppelklick from Chaoskeks (in ChaosExecution)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $hListView And $code = -3 And _GUICtrlListView_GetSelectedCount($hListView) > 0 Then
    For $i = 0 To _GUICtrlListView_GetItemCount($hListView)
    IF _GUICtrlListView_GetItemSelected($hListView, $i) Then
    $aItem = _GUICtrlListView_GetItemTextArray($hlistview, $i)
    ;~ In aItem[1] steht der Dateiname und in $aItem[2] der Pfad zincl. Dateinamen
    _LeftDblClick()
    EndIf
    Next
    Endif
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIF

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

    Func _LeftDblClick()
    _BASS_ChannelStop($MusicHandle)
    $File = $aItem[2]
    $MusicHandle = _BASS_StreamCreateFile(False, $file, 0, 0, 0)
    _BASS_ChannelPlay($MusicHandle, 0)
    EndFunc

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

    Func Display_Vis($eq = 1)
    _GDIPlus_GraphicsClear($backbuffer, 0x80F0F0F0)
    If $eq > 0 Then
    $levels = _BASS_ChannelGetLevel($MusicHandle)
    $LeftChLvl = $leftChLvlper ;Round(_HiWord($levels) / $iY, 0)
    $RightChLvl = $rightChLvlper ;Round(_LoWord($levels) / $iY, 0)

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

    If $max_l <= $LeftChLvl Then ;fire up higest line
    $max_l = $LeftChLvl + $fire_up
    $fall_speed_l_threshold = 20
    Else
    If $fall_speed_l_threshold <= 0 Then ;increase fall speed of highest line faster until threshold is <= 0 (second fall part)
    If $max_l > $LeftChLvl + $pen2_size * 2 Then $max_l -= $fall_speed
    Else
    $fall_speed_l_threshold -= 1 ;increase fall speed of highest line by slower until threshold is <= 0 (first fall part)
    If $max_l > $LeftChLvl + $pen2_size * 2 Then $max_l -= $fall_speed / 3
    EndIf
    EndIf

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

    If $max_r <= $RightChLvl Then
    $max_r = $RightChLvl + $fire_up
    $fall_speed_r_threshold = 20
    Else
    If $fall_speed_r_threshold <= 0 Then
    If $max_r > $RightChLvl + $pen2_size * 2 Then $max_r -= $fall_speed
    Else
    $fall_speed_r_threshold -= 1
    If $max_r > $RightChLvl + $pen2_size * 2 Then $max_r -= $fall_speed / 3
    EndIf
    EndIf
    #cs
    _GDIPlus_PenSetColor($pen2, 0xFF505050)
    For $l = -$pen1_size - 2 To $leftChLvl Step $pen1_size * 2
    $r = $l / ($iY) * 224
    $g = 224 - $r
    $b = 0
    _GDIPlus_PenSetColor($pen1, "0xFF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2))
    _GDIPlus_GraphicsDrawLine($backbuffer, $iX / 5, $iY - $l, $iX / 5 + $equalizer_width, $iY - $l, $pen1)
    Next
    For $l = 0 To $RightChLvl
    $r = (-(Cos(1.7 * $l / 128) + 1) / 2) * 224
    $g = ((Cos(4 * $l / 256) + 1) / 2) * 224
    $b = 0
    _GDIPlus_PenSetColor($pen1, "0xFF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2))
    _GDIPlus_GraphicsDrawLine($backbuffer, 3 * $iX / 5, $iY - $l, 3 * $iX / 5 + $equalizer_width, $iY - $l, $pen1)
    Next
    _GDIPlus_GraphicsDrawLine($backbuffer, $iX / 5, $iY - $max_l, $iX / 5 + $equalizer_width, $iY - $max_l, $pen2)
    _GDIPlus_GraphicsDrawLine($backbuffer, 3 * $iX / 5, $iY - $max_r, 3 * $iX / 5 + $equalizer_width, $iY - $max_r, $pen2)
    #ce
    Else
    _BASS_ChannelGetData($MusicHandle, DllStructGetPtr($fftstruct), $BASS_DATA_FFT256)
    For $i = $fft_start To $fft_end Step $dy
    $fft = Round(DllStructGetData($fftstruct, 1, $i + 1) * $fft_boost)
    $r = (-(Cos(1.7 * $fft / 256) + 1) * 0.5) * 256
    $g = ((Cos(4 * $fft / 256) + 1) * 0.5) * 256
    $b = 0
    _GDIPlus_PenSetColor($pen3, "0xFF" & Hex($r, 2) & Hex($g, 2) & Hex($b, 2))
    _GDIPlus_GraphicsDrawLine($backbuffer, $iX / 5, $i + $dyy, $iX / 5 + $fft, $i + $dyy, $pen3)
    Next
    EndIf
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, $width - $iX - 10, 8, $iX, $iY)
    EndFunc

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

    Func _SoundGetWaveVolume()
    Local $WaveVol = -1, $p, $ret
    Const $MMSYSERR_NOERROR = 0
    $p = DllStructCreate ("dword")
    If @error Then
    SetError(2)
    Return -2
    EndIf
    $ret = DllCall("winmm.dll", "long", "waveOutGetVolume", "long", -1, "long", DllStructGetPtr ($p))
    If ($ret[0] == $MMSYSERR_NOERROR) Then
    $WaveVol = Round(Dec(StringRight(Hex(DllStructGetData ($p, 1), 8), 4)) / 0xFFFF * 100)
    Else
    SetError(1)
    EndIf
    $p=""
    Return $WaveVol
    EndFunc ;==>_SoundGetWaveVolume

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

    #EndRegion

    [/autoit]
  • Verschiedene Möglichkeiten:

    1. Ständig überwachen (Adlibregister oder so) ob sich der Playstate geändert hat.
    2. Einen eigenen Timer mitlaufen lassen und zum Wiedergabestart die Dauer ermitteln (geht per BASS.au3)
    3. Die Bass.dll gibt den aktuellen Playstate automatisch zurück und man kommt an die Info per autoit ran.

    Variante 3 wäre mein Favorit. Ohne Autoit am PC kann ichs dir aber nicht genau sagen.
    Bei Variante 1 & 2 musste aufpassen mit Pause, Stop, Next, Prev usw. da diese Aktionen Einfluss auf die Überwachung haben.

    edit \ Zum nächsten Titel kannst du ja einfach über den nächsten Arrayindex springen und bei aktivem Shuffle wird der Index über die Funktion Random bestimmt.

  • Kommt drauf an.
    Alle in der gleichen Dimension?
    Zu Fuß gehts ca. so:
    Größe jedes Arrays bestimmen, Gesamtarray deklarieren und das "große" Array in (einer) Schleife(n) befüllen.

    [autoit]


    $array1[10]
    $array2[20]
    $array_neu[30]
    for $i = 0 to 9
    $array_neu[$i]=$array1[$i]
    next
    for $i=0 to 19
    $array_neu[$i+ubound($array1)]=$array1[$i]
    next

    [/autoit]


    Ist jetzt ohne autoit etwas blöd zu skripten :whistling:

  • hm... hab ich dir nicht schon mal ein script aus deinem beispiel gebaut ?!

    naja ... um array zusammenzufassen:

    [autoit]

    dim $neuerarray[UBound($alterarray1)+UBound($alterarray2)]
    for $i=0 to UBound($alterarray1)
    $neuerarray[$i]=$alterarray1[$i]
    Next
    for $i=0 to UBound($alterarray2)
    $neuerarray[$i+UBound($alterarray1)]=$alterarray2[$i]
    Next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • bei mir klappt das hier nicht

    [autoit]

    dim $playarray[UBound($returnputin)+UBound($gaDropFiles)]
    for $i=0 to UBound($returnputin)
    $playarray[$i]=$returnputin[$i]
    Next
    for $i=0 to UBound($gaDropFiles)
    $playarray[$i+UBound($returnputin)]=$gaDropFiles[$i]
    Next

    [/autoit]
  • So müsste es gehen :)

    [autoit]

    dim $playarray[UBound($returnputin)+UBound($gaDropFiles)]
    for $i=0 to UBound($returnputin)-1
    $playarray[$i]=$returnputin[$i]
    Next
    for $i=0 to UBound($gaDropFiles)-1
    $playarray[$i+UBound($returnputin)]=$gaDropFiles[$i]
    Next

    [/autoit]