• Hi leute,

    hab mir aus fun einen Musikmanager geschrieben, hat aber keine GUI.

    Funktionsweise:

    Das Skript holt sich alle Titel(.mp3) aus deinem Ordner 'Eigene Musik' und indiziert sie.
    Anschließend drückst du einfach POS1 und gibts den Teil eines Liednamens ein und er spielt ihn ab (mit VLC, muss installiert sein)

    Hab dann noch ein paar Features geadded zb Lied öfters abspielen, zufälliges Lied abspielen, mehrere zufällige Lieder abspielen!

    Ich hoffe es kann jemand gebrauchen, ist ganz nützlich unterm zocken oder sonst wo ;)

    Man kann außerdem einstellen, dass das Programm automatisch mit Windows startet (Tray-Menü).
    Auch kann man den zu indizierenden Ordner wählen, aber nicht standardmäßig, d.h. man muss es nach jedem Start wieder machen, außerdem lassen sich die Hotkeys(Pos1 - Inputbux; ALT+Ende - Exit) deaktivieren, ebenfalls über das Traymenü.

    Und ich weiß, der Quellcode ist nicht aufgeräumt ;)

    Für Bugmeldungen, Verbesserungsvorschläge, konstruktive Kritik etc bin ich jederzeit offen :D

    Kennt jemand eine Möglichkeit OHNE BATCH ALLE Dateien inkl Unterverzeichnisse aufzulisten, hab es derzeit durch Batch gelöst => Bug, Umlaute bringen ne Fehlermeldung beim Abpspielen mit sich!

    Also wie gesagt,

    hf ;)

    EDIT: Hab noch die .exe angehängt!

    [autoit]


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

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

    Opt("TrayAutoPause",0)
    Opt("TrayMenuMode",1)
    Opt("TrayOnEventMode",1)
    Opt("WinTitleMatchMode",2)

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

    $sVLC = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC","")
    if $sVLC = "" Then
    Msgbox(48,"Error","VLC Media Player nicht gefunden!" & @LF & "Bitte installieren sie VLC Media Player und starten sie die Anwendung erneut!")
    Exit
    EndIf

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

    Global $sFileList,$szDrive, $szDir, $szFName, $szExt,$aFName,$file,$aFiles,$sSourceDir,$sVLC,$sTitle = "Musik-Manager Version 2.0"
    Dim $aFName[1]
    Dim $aFiles[1]

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

    TraySetToolTip("Hotkeys:" & @LF & "HOME => InpuxBox" & @LF & "ALT + END => Exit")

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

    MsgBox(48,"INFO - WICHTIG!","Hotkeys: " & @LF & "'HOME' (POS1) zum Aufrufen der Inputbox" & @LF & "'ALT' + 'END' (ALT & ENDE) zum Beenden des Programms")

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

    _RefreshMusic(@MyDocumentsDir & "\Eigene Musik")

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

    HotKeySet("{HOME}","_PlaySong")
    HotKeySet("!{END}","_Exit")

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

    TrayCreateItem("Quell Ordner setzen")
    TrayItemSetOnEvent(-1,"_SetSourceDir")
    TrayCreateItem("Disable Hotkeys")
    TrayItemSetOnEvent(-1,"_ToggleHotkeys")
    $autostart = TrayCreateItem("Autostart")
    TrayItemSetOnEvent(-1,"_Autostart")
    TrayCreateItem("Help")
    TrayItemSetOnEvent(-1,"_Help")
    TrayCreateItem("")
    TrayCreateItem("Exit")
    TrayItemSetOnEvent(-1,"_Exit")

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

    $var = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", $sTitle)
    If $var = @ScriptFullPath Then
    TrayItemSetState($autostart, 65)
    ElseIf $var Then
    _DeleteAutoRun()
    EndIf

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

    While 1
    WEnd

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

    Func _PlaySong()
    $file = InputBox("Audiotitel eingeben","Titel oder Teil eines Titles eingeben:","","",100,130)
    if @error = 1 Then Return -1

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

    ;~ if WinGetTitle("VLC media player") AND WinExists(WinGetTitle("VLC media player")) Then ProcessClose(WinGetProcess(WinGetTitle("VLC media player")))

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

    if TCPConnect("127.0.0.1",2150) <> -1 AND StringRight($file,1) <> "+" Then
    TCPSend(TCPConnect("127.0.0.1",2150),"clear" & @CRLF)
    Else
    Global $Socket = _ConnectVLC()
    EndIf

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

    Select

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

    ;~ Case StringRegExp($file,"([a-z])(?x);\z",0)
    ;~ $aSongs = StringSplit($file,";",1)

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

    ;~ For $iGlob = 0 To $aSongs[0]

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

    ;~ For $i = 1 To (UBound($aFName) - 1) Step 1
    ;~ if StringInStr($aFName[$i],$aSongs[$iGlob],0) <> 0 AND NOT @error Then
    ;~ TCPSend($Socket,"enqueue " & $aFiles[$i] & @CRLF)
    ;~ ExitLoop
    ;~ EndIf
    ;~ Next
    ;~ Next

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

    ;~ TCPSend($Socket,"play" & @CRLF)

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

    ; ### Play same song n-times
    Case StringRegExp($file,"(.+)\\[0-9]",0)

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

    $intPlayTimes = 1
    While StringIsDigit(StringRight($file,$intPlayTimes)) AND (StringLen($file)+1) > $intPlayTimes
    $intPlayTimes += 1
    WEnd
    $intPlayTimes -= 1

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

    Global $iTimesToPlay = StringRight($file,$intPlayTimes)
    $file = StringTrimRight($file,$intPlayTimes + 1)

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

    For $i = 1 To (UBound($aFName) - 1) Step 1
    if StringInStr($aFName[$i],$file,0) <> 0 AND NOT @error Then

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

    For $iPlayed = 0 To $iTimesToPlay
    TCPSend($Socket,"enqueue " & $aFiles[$i] & @CRLF)
    Next
    TCPSend($Socket,"play" & @CRLF)

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

    ExitLoop
    EndIf
    Next

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

    ; ### Play random songs n-times
    Case StringRegExp($file,"\\[0-9]",0)

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

    $intPlayTimes = 1
    While StringIsDigit(StringRight($file,$intPlayTimes)) AND (StringLen($file)+1) > $intPlayTimes
    $intPlayTimes += 1
    WEnd
    $intPlayTimes -= 1

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

    Global $iTimesToPlay = StringRight($file,$intPlayTimes)
    $file = StringTrimRight($file,$intPlayTimes + 1)

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

    For $i = 1 To (UBound($aFName) - 1) Step 1
    if StringInStr($aFName[$i],$file,0) <> 0 AND NOT @error Then

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

    For $iPlayed = 0 To $iTimesToPlay
    TCPSend($Socket,"enqueue " & $aFiles[Random(1,(UBound($aFName) - 1))] & @CRLF)
    Next
    TCPSend($Socket,"play" & @CRLF)

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

    ExitLoop
    EndIf
    Next

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

    ; ### Play searched song once
    Case StringLen($file) > 0 AND NOT StringRegExp($file,"\\[0-9]",0) AND NOT StringRegExp($file,"(.+)\\[0-9]",0)
    For $i = 1 To (UBound($aFName) - 1) Step 1
    if StringInStr($aFName[$i],$file,0) <> 0 AND NOT @error Then
    ;~ Run(@ComSpec & " /c " & $sVLC & " """ & $aFiles[$i] & "","",@SW_HIDE)
    TCPSend($Socket,"enqueue " & $aFiles[$i] & @CRLF)
    TCPSend($Socket,"play" & @CRLF)
    EndIf
    Next

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

    ; ## Play random song once
    Case StringLen($file) = 0
    TCPSend($Socket,"enqueue " & $aFiles[Random(1,(UBound($aFName) - 1))] & @CRLF)
    TCPSend($Socket,"play" & @CRLF)

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

    EndSelect

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

    EndFunc
    func _Exit()
    Exit
    EndFunc

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

    func _SetSourceDir()
    TrayItemSetState(@TRAY_ID,68)
    $sNewFolder = FileSelectFolder("Quell Ordner festlegen",$sSourceDir)
    if not @error Then _RefreshMusic($sNewFolder)
    EndFunc

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

    func _ToggleHotkeys()
    Switch TrayItemGetState(@TRAY_ID)
    Case 65
    HotKeySet("{HOME}")
    HotKeySet("!{END}")

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

    Case Else
    HotKeySet("{HOME}","_PlaySong")
    HotKeySet("!{END}","_Exit")
    EndSwitch
    EndFunc

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

    Func _Autostart() ; funzt nur mit BETA version

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

    If TrayItemGetState($autostart) = 65 Then
    $var = RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Run",$sTitle,"REG_SZ",@ScriptFullPath)
    Else
    _DeleteAutoRun()
    EndIf

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

    EndFunc ;==>_Autostart

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

    Func _DeleteAutoRun()
    RegDelete("HKCU\Software\Microsoft\Windows\CurrentVersion\Run",$sTitle)
    EndFunc ;==>_DeleteAutoRun

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

    func _Help()
    TrayItemSetState(@TRAY_ID,68)
    MsgBox(48,"Hilfe","Parameters:" & @LF & "Leere Inputbox: Zufälliges Lied" & @LF & "Liedname\\3: 'Liedname' wird 3mal in Folge abgespielt" & @LF & "\\3: 3 zufällige Lieder werden nacheinander abgespielt" & @LF & "Coming soon:" & @LF & "'Liedname'+: 'Liedname' wird zur derzeitigen Playlist hinzugefügt!" & @LF & "'Liedname1;Liedname2;Liedname3;...;LiednameN': 'Liedname1' bis 'LiednameN' werden abgespielt!")
    EndFunc

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

    func _ConnectVLC()
    ShellExecute($sVLC,"--rc-host=""127.0.0.1:2150"" --extraintf ""rc"" --rc-quiet")
    WinWaitActive("VLC media player")
    TCPStartup()
    $Socket = TCPConnect("127.0.0.1",2150)
    If $Socket = -1 Then
    MsgBox(0,"Error","Fehler beim Verbinden mit VideoLan Client über das TCP-Protokoll!")
    Return -1
    Else
    Return $Socket
    EndIf
    EndFunc

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

    func _RefreshMusic($sSourceDir)

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

    $sVLC = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC","")
    $sRandomFileName = _TempFile("","",".txt",4)
    RunWait(@ComSpec & " /c " & "dir /B /O:E /S /A:-S-D-H > " & $sRandomFileName,$sSourceDir,@SW_HIDE)
    _FileReadToArray($sRandomFileName,$sFileList)

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

    $perc = 100 / $sFileList[0]

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

    ProgressOn("Processing...","Getting filenames")
    Local $cPerc
    For $i = 1 To $sFileList[0] Step 1
    $cPerc = $cPerc + $perc
    ProgressSet($cPerc,$sFileList[$i],"Getting filenames [" & Round($cPerc,1) & " %]")
    $sPath = _PathSplit($sFileList[$i],$szDrive, $szDir, $szFName, $szExt)
    ;~ MsgBox(0,"Test",$szExt)
    if StringInStr($szExt,".mp3") <> 0 Then
    _ArrayAdd($aFName,StringLower($sPath[3]))
    _ArrayAdd($aFiles,$sPath[0])
    EndIf
    Next

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

    FileDelete($sRandomFileName)
    ProgressOff()

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

    EndFunc

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

    PS: Die Autostartfunktion funktioniert nur, wenn man das Skirpt mit der BETA-Version von AutoIT kompeiliert!