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
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>
Opt("TrayAutoPause",0)
Opt("TrayMenuMode",1)
Opt("TrayOnEventMode",1)
Opt("WinTitleMatchMode",2)
$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
Global $sFileList,$szDrive, $szDir, $szFName, $szExt,$aFName,$file,$aFiles,$sSourceDir,$sVLC,$sTitle = "Musik-Manager Version 2.0"
Dim $aFName[1]
Dim $aFiles[1]
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")
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")
$var = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", $sTitle)
If $var = @ScriptFullPath Then
TrayItemSetState($autostart, 65)
ElseIf $var Then
_DeleteAutoRun()
EndIf
While 1
WEnd
Func _PlaySong()
$file = InputBox("Audiotitel eingeben","Titel oder Teil eines Titles eingeben:","","",100,130)
if @error = 1 Then Return -1
;~ 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
Select
[/autoit][autoit][/autoit][autoit];~ Case StringRegExp($file,"([a-z])(?x);\z",0)
;~ $aSongs = StringSplit($file,";",1)
;~ 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
;~ TCPSend($Socket,"play" & @CRLF)
[/autoit][autoit][/autoit][autoit]; ### Play same song n-times
Case StringRegExp($file,"(.+)\\[0-9]",0)
$intPlayTimes = 1
While StringIsDigit(StringRight($file,$intPlayTimes)) AND (StringLen($file)+1) > $intPlayTimes
$intPlayTimes += 1
WEnd
$intPlayTimes -= 1
Global $iTimesToPlay = StringRight($file,$intPlayTimes)
$file = StringTrimRight($file,$intPlayTimes + 1)
For $i = 1 To (UBound($aFName) - 1) Step 1
if StringInStr($aFName[$i],$file,0) <> 0 AND NOT @error Then
For $iPlayed = 0 To $iTimesToPlay
TCPSend($Socket,"enqueue " & $aFiles[$i] & @CRLF)
Next
TCPSend($Socket,"play" & @CRLF)
ExitLoop
EndIf
Next
; ### Play random songs n-times
Case StringRegExp($file,"\\[0-9]",0)
$intPlayTimes = 1
While StringIsDigit(StringRight($file,$intPlayTimes)) AND (StringLen($file)+1) > $intPlayTimes
$intPlayTimes += 1
WEnd
$intPlayTimes -= 1
Global $iTimesToPlay = StringRight($file,$intPlayTimes)
$file = StringTrimRight($file,$intPlayTimes + 1)
For $i = 1 To (UBound($aFName) - 1) Step 1
if StringInStr($aFName[$i],$file,0) <> 0 AND NOT @error Then
For $iPlayed = 0 To $iTimesToPlay
TCPSend($Socket,"enqueue " & $aFiles[Random(1,(UBound($aFName) - 1))] & @CRLF)
Next
TCPSend($Socket,"play" & @CRLF)
ExitLoop
EndIf
Next
; ### 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
; ## Play random song once
Case StringLen($file) = 0
TCPSend($Socket,"enqueue " & $aFiles[Random(1,(UBound($aFName) - 1))] & @CRLF)
TCPSend($Socket,"play" & @CRLF)
EndSelect
[/autoit][autoit][/autoit][autoit]EndFunc
func _Exit()
Exit
EndFunc
func _SetSourceDir()
TrayItemSetState(@TRAY_ID,68)
$sNewFolder = FileSelectFolder("Quell Ordner festlegen",$sSourceDir)
if not @error Then _RefreshMusic($sNewFolder)
EndFunc
func _ToggleHotkeys()
Switch TrayItemGetState(@TRAY_ID)
Case 65
HotKeySet("{HOME}")
HotKeySet("!{END}")
Case Else
HotKeySet("{HOME}","_PlaySong")
HotKeySet("!{END}","_Exit")
EndSwitch
EndFunc
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
EndFunc ;==>_Autostart
[/autoit][autoit][/autoit][autoit]Func _DeleteAutoRun()
RegDelete("HKCU\Software\Microsoft\Windows\CurrentVersion\Run",$sTitle)
EndFunc ;==>_DeleteAutoRun
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
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
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)
$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
FileDelete($sRandomFileName)
ProgressOff()
EndFunc
[/autoit][autoit][/autoit][autoit][/autoit]PS: Die Autostartfunktion funktioniert nur, wenn man das Skirpt mit der BETA-Version von AutoIT kompeiliert!