MusikPlayer mit Equalizer,Playlist, etc.

  • :thumbup:
    sind aber noch einige Bugs drin

    1. Beim Doppelklick eines Songs in der Liste wählt sich der Song in beide Player gleichzeitig und unterbricht somit den Song
    2. Man kann ein Titel nur in die rechte Liste mit der Maus ziehen, in die linke übernimmt er den Song nicht

  • zu 1:
    Jo. Das kam durch das schieben... hatte da noch Die Fensterhöhe, statt Fensterhöhe/3*2 als erlaubtes feld zum reinschieben aus der playlist.
    Hab dabei auch gleich behoben, dass das Verschieben in der Listview einfluss auf das Lied nimmt, dass oben reingeschoben wird. (werde das demnächst mit ein paar anderen erweiterungen hochladen)
    zu 2:
    Wie meinst du das? Es gibt nur eine Playlist, welche von dem Linken Player abgespielt wird. Nur auf den rechten Player können einzelne Songs gezogen werden.
    Die Listen unten sind so: links eine Ordner(/Playlist-)auswahl. In der Mitte sind die Dateien angezeigt, die sich in dem ganz links ausgewählten Ordner befinden. Dort sollen keine Lieder eingefügt werden. (Mein Programm ist schließlich kein Dateikopier Programm ;D) In die Playlist (rechte Liste) können Lieder gezogen werden.

  • es wäre viel besser wenn ich eine Datei unten aus dem Ordner in den linken Player ziehe dass der Song dort sofort geladen wird und automatisch in die Playlist hinzugefügt wird.
    Mann sollte aber auch so einstellen dass ein Lied nur einmal drin ist. Also wenn ein Lied schon drin ist, soll die Playlist zum Lied springen und meinetwegen zweimal aufblinken lassen oder so.

  • So. Neues Update.
    Ich hab die Bugs behoben, die @turbobaby nannte (danke dafür)
    Ich hab einen Equalizer für Streams hinzugefügt
    Man kann nun Lieder aus der mittleren Liste auf die Linke Seite zeihen, die werden dann der Liste hinzugefügt und das oberste wird abgespielt.
    Man kann nun Lieder aus der Playlist auf die Linke Seite ziehen, die werden dann direkt abgespielt

    turbobaby:
    Ich lasse es so, dass Lieder mehrfach hinzugefügt werden können. Ich denke, das ist eine Änderung, die eher subjektiv ist und ich habe ein Lied gerne auch mehr als 1x in meiner Playlist.
    (Außerdem würde das wieder einiges an Zeit kosten beim Einfügen, jenachdem, wie viele Lieder in der Playlist sind.)

  • Kanashius: Schon gar nicht schlecht der Player. Hut ab dafür, auch an ProgrammingDonkey.

    Ein kleinen Schönheitsfehler habe ich beim Testen gesehen: Wenn der Titel für die Anzeige im Player zu lang wird, zeigt er den Rest in einer zweiten Zeile an. Von dieser ist aber nur die obere Hälfte sichbar.

    Was mir jetzt hauptsächlich noch fehlt (ich suche einen Player für die Party, zur Zeit DSD-Jukebox wenn Autobetrieb und Winamp wenn ich selber reagieren und abspielen will) sind folgende Funktionen:
    - zweite Playlist
    - Auto-Crossfader (je Einstellung wird der nächste Titel immer aus einer [zweite dient z.B. für Jingles] oder abwechseln aus den Playlisten geholt und x-Sekunden sanft aus-/eingeblendet). Ich wollte mir immer mal den alten AutoIt-Player 'CrapDJ' an Drag'nDrop anpassen. Bei diesem kann Du dir auch das Crossfaden ansehen!

    und

    - Abspeichern von Einstellungen beim Beenden. Z.B. Position, Musikarchiv-Ordner für den TreeView (wenn der Ordner noch vorhanden ist), Lautstärke, Equalizer-Settings und Audio-Output-Devices.

    Das wären so meine Ideen / Anregungen...

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Crossfader wollte ich eh noch einbauen. AutoCrossfader sollte auch drin sein.
    Wobei das "sanfte" ein/ausblenden ja schon drin ist. Der wird ja langsam leiser/lauter. (Je nach Lautstärke dauert es unterschiedlich lang)
    (Wenn das so weitergeht bau ich noch ne CommandoZeile ein, die dann auf events wartet und man spezielleres einstellen kann ;D)

    Was die Anzeige angeht: Ich hab nen 1920 Pixel Breiten Monitor... bei mir war noch kein Titel zu groß, weshalb mir das garnicht auffiel... Eigentlich wollte ich nur eine Zeile...
    Muss mal überlegen, ob man den Titel so hin und her bewegen könnte... Das Problem ist dabei ja nur, dass die Buchstaben unterschiedlich groß sind. Ich werds mir aber demnächst mal ansehen

  • Ich habe den Player testweise auf dem dafür vorbereiteten älteren Musik-Notebook genutzt. Das hat natürlich keine 1920er Größe...

    Eine Lösung wäre vielleicht, das man ermittelt wie groß der Text ist (da gab es mal eine Funktion für MsgBox glaube ich) und bei Bedarf anfängt den Text zu scrollen.
    Hier die damals von mir archivierte Version 'TextMeter':

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <Misc.au3>
    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)
    Global $btChoose, $btMeasure, $cbBold, $cbItalic, $cbStrike, $cbUnderlined, $eText, $Group1, $gui, $inFont, $inHeight, $inSize
    Global $Label1, $Label2, $Label3, $Label4, $Label5, $Label6, $Label7, $Label8, $inWidth, $1stChoose = 1
    Global $bkCol = 0x1E90FF, $LemonChiffon = 0xFFFACD, $Salmon = 0xFA8072
    Global $aFont[8] = [8,0,'Courier New',10,400,0,0,0]

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

    $gui = GUICreate("TextMeter", 452, 367)
    GUISetOnEvent($GUI_EVENT_CLOSE, "guiClose")
    GUISetBkColor($bkCol)
    $Group1 = GUICtrlCreateGroup(" Font ", 15, 16, 420, 121)
    $inSize = GUICtrlCreateInput("", 331, 56, 35, 21, BitOR($ES_CENTER,$ES_READONLY))
    GUICtrlSetBkColor(-1, $LemonChiffon)
    $inFont = GUICtrlCreateInput("", 65, 56, 204, 21, BitOR($ES_CENTER,$ES_READONLY))
    GUICtrlSetBkColor(-1, $LemonChiffon)
    $Label1 = GUICtrlCreateLabel("Name", 30, 59, 32, 17)
    $btChoose = GUICtrlCreateButton("...", 388, 57, 20, 20, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "btChooseClick")
    GUICtrlSetBkColor(-1, $Salmon)
    $Label2 = GUICtrlCreateLabel("PointSize", 280, 59, 48, 17)
    $Label4 = GUICtrlCreateLabel("FontAttribute", 30, 98, 64, 17)
    $cbItalic = GUICtrlCreateCheckbox("", 195, 96, 17, 17)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("Italic", 215, 98, 40)
    $cbUnderlined = GUICtrlCreateCheckbox("", 265, 96, 17, 17)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("Underlined", 285, 98, 60, 17)
    $cbStrike = GUICtrlCreateCheckbox("", 360, 96, 17, 17)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("Strike", 380, 98, 40, 17)
    $Label5 = GUICtrlCreateLabel("Auswahl", 379, 33, 44, 17)
    $cbBold = GUICtrlCreateCheckbox("", 120, 96, 17, 17)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlCreateLabel("Bold", 140, 98, 40, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $eText = GUICtrlCreateEdit("", 15, 171, 420, 105)
    GUICtrlSetBkColor(-1, $LemonChiffon)
    $btMeasure = GUICtrlCreateButton("Ausmessen", 335, 288, 100, 20, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "btMeasureClick")
    GUICtrlSetBkColor(-1, $Salmon)
    $Label3 = GUICtrlCreateLabel("Dein Text", 15, 152, 50, 17)
    $Label6 = GUICtrlCreateLabel("Benötigter Platz", 40, 322, 78, 17)
    $inWidth = GUICtrlCreateInput("", 140, 320, 60, 21, BitOR($ES_CENTER,$ES_READONLY))
    GUICtrlSetBkColor(-1, $LemonChiffon)
    $Label7 = GUICtrlCreateLabel("X", 220, 324, 11, 17)
    $inHeight = GUICtrlCreateInput("", 250, 320, 60, 21, BitOR($ES_CENTER,$ES_READONLY))
    GUICtrlSetBkColor(-1, $LemonChiffon)
    $Label8 = GUICtrlCreateLabel("pt", 330, 323, 26, 17)
    GUISetState(@SW_SHOW)

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

    setFont()

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

    While 1
    Sleep(100)
    WEnd

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

    Func btChooseClick()
    Local $aTmp
    If $1stChoose Then
    $aTmp = _ChooseFont()
    Else
    Local $weight = 400
    If BitAND($aFont[1], 1) Then $weight = 600
    $aTmp = _ChooseFont($aFont[2], $aFont[3], 0, $weight, BitAND($aFont[1], 2), BitAND($aFont[1], 4), BitAND($aFont[1], 8))
    EndIf
    If $aTmp = -1 Then Return
    $aFont = $aTmp
    $1stChoose = 0
    setFont()
    EndFunc

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

    Func setFont()
    If BitAND($aFont[1], 2) Then
    GUICtrlSetState($cbItalic, $GUI_CHECKED)
    Else
    GUICtrlSetState($cbItalic, $GUI_UNCHECKED)
    EndIf
    If BitAND($aFont[1], 4) Then
    GUICtrlSetState($cbUnderlined, $GUI_CHECKED)
    Else
    GUICtrlSetState($cbUnderlined, $GUI_UNCHECKED)
    EndIf
    If BitAND($aFont[1], 8) Then
    GUICtrlSetState($cbStrike, $GUI_CHECKED)
    Else
    GUICtrlSetState($cbStrike, $GUI_UNCHECKED)
    EndIf
    If $aFont[4] > 400 Then
    GUICtrlSetState($cbBold, $GUI_CHECKED)
    $aFont[1] = BitOR($aFont[1], 1)
    Else
    GUICtrlSetState($cbBold, $GUI_UNCHECKED)
    EndIf
    GUICtrlSetData($inFont, $aFont[2])
    GUICtrlSetData($inSize, $aFont[3])
    EndFunc

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

    Func btMeasureClick()
    Local $nText = GUICtrlRead($eText)
    If $nText = '' Then Return
    _GDIPlus_Startup()
    Local $hFormat = _GDIPlus_StringFormatCreate(0)
    Local $hFamily = _GDIPlus_FontFamilyCreate($aFont[2])
    Local $hFont = _GDIPlus_FontCreate($hFamily, $aFont[3], $aFont[1], 3)
    Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($gui)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
    Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
    Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ShutDown()
    GUICtrlSetData($inHeight, $iHeight)
    GUICtrlSetData($inWidth, $iWidth)
    EndFunc

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

    Func guiClose()
    Exit
    EndFunc

    [/autoit]

    Unglücklich ist u.a. auch folgende Situation: Abspielen tue ich mit einem externen Device auf die Lautsprecher, vorhören des zweiten Player mit dem Kopfhörer am lokalen Sounddevice. Nachdem Beenden muss ich alles neu konfigurieren, da bei Devices wieder leer (=Std) sind. Hatte ich aber schon bei meiner Aufzählung der abzuspeichernden Settings genannt.

    Auf das 'sanfte' Überblenden habe ich nun mal genauer drauf geachtet: Ist kaum (gar nicht) zu bemerken! Die meisten Lieder werden am Ende sowieso leiser, da fällt das wohl nicht ins Gewicht. Auf dem bisherigen Party-Player nutze ich hier die Möglichkeit ca. 20s (war einstellbar) werden der aktuelle und der neue parallel gespielt und langsam übergeblendet.
    Dagegen ist mir bei den Titel die 'am Ende nicht leiser werden' ! aufgefallen, das teilweise der Player zu schnell (ca. 1s) vor Ende des Titels abbricht/wechselt. Da fehlt dann sogar etwas vom Ende !

    Noch zwei Verbesserungsideen:
    - Ausblendbare Objekte wie z.B. den Equalizer. Schafft Platz für andere Objekte (zweite Playlist) oder längere Playlistanzeige. Der Equalizer wird doch meist sowieso nur einmal eingestellt und verbleibt dann so (was er ja z.Zt. noch nicht kann).
    - Multi-Select in der Playlist wenn mann z.B. mal 10-15 Titel in einem Rutsch löschen möchte (Löschfunktionen sollte sich aber in einem später möglichen 'sicheren Modus' abschalten lassen, damit der nächste meine Titelwahl nicht jedesmal wieder revidiert).

    Edit: Noch eine Idee zur Verbesserung - Ordner und Dateien in einem Fenster. Oscar hatte u.a. mal eine Funktion, die einen kompletten Explorer nachgebildet hat. Schau einmal ob Du sie ggf. verwenden kannst:

    Spoiler anzeigen
    [autoit]

    ; Autor: [email='oscar@autoit.de'][/email]
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiTreeView.au3>
    #include <StructureConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

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

    $hGui = GUICreate('FileExplorer', 400, 400)
    $hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360)
    $hWndTreeview = GUICtrlGetHandle($hTreeview)
    $hOk = GUICtrlCreateButton('Ok', 240, 375, 60, 22)
    $hCancel = GUICtrlCreateButton('Cancel', 320, 375, 60, 22)

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

    $hImage = _GUIImageList_Create(16, 16, 5, 1)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 3) ; Verzeichnis-Icon
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 110) ; Verzeichnis-Icon mit Haken
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1) ; Datei-Icon
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 5) ; Diskette
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 7) ; Wechseldatenträger
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 8) ; Festplatte
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 11) ; CDROM
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 12) ; Netzwerklaufwerk
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 53) ; Unbekannt
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage)

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

    GUISetState()
    GUICtrlSetStyle($hTreeview, Default, $WS_EX_COMPOSITED + $WS_EX_CLIENTEDGE)

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

    $aDrives = DriveGetDrive('ALL')
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    For $i = 1 To $aDrives[0]
    $iLWindex = 0
    Switch DriveGetType($aDrives[$i])
    Case 'Fixed'
    $iLWindex = 5
    Case 'CDROM'
    $iLWindex = 6
    Case 'RAMDisk'
    $iLWindex = 7
    Case 'Removable'
    $iLWindex = 4
    If StringLeft($aDrives[$i], 2) = 'a:' Or StringLeft($aDrives[$i], 2) = 'b:' Then $iLWindex = 3
    Case Else
    $iLWindex = 8
    EndSwitch
    $hRoot = _GUICtrlTreeView_Add($hTreeview, $hTreeview, StringUpper($aDrives[$i]), $iLWindex, $iLWindex)
    If DriveStatus($aDrives[$i]) <> 'READY' Then ContinueLoop
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hRoot, $aDrives[$i], 1)
    _GUICtrlTreeView_EndUpdate($hTreeview)
    Next
    ToolTip('')

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

    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hCancel
    Exit
    Case $hOk
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $iSelect), '|', '\')
    MsgBox(0, 'Selected Path/File', $sTree)
    EndSwitch
    WEnd

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    GUIRegisterMsg($WM_NOTIFY, '')
    Local $hWndFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    $iCode = DllStructGetData($tNMHDR, 'Code')
    If $hWndFrom = $hWndTreeview And $iCode = $NM_CLICK Then
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    ToolTip('')
    EndIf
    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    Local $aTVPos, $aPos, $hItem, $hChild, $sTree
    $aTVPos = ControlGetPos($hGui, '', $hTreeview)
    $aPos = GUIGetCursorInfo($hGui)
    $hItem = _GUICtrlTreeView_HitTestItem($hTreeview, $aPos[0], $aPos[1] - $aTVPos[1])
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hItem)
    If $hChild <> 0 Then
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    Do
    $hChild = _GUICtrlTreeView_GetNextChild($hTreeview, $hChild)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    $iTimer = TimerInit()
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    Until $hChild = 0
    _GUICtrlTreeView_EndUpdate($hTreeview)
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorer

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

    Func _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
    Local $aDirList, $aFileList, $tmp
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $iRec -= 1
    $aDirList = _MyFileListToArray($sPath, 2)
    If IsArray($aDirList) Then
    For $sDir In $aDirList
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sDir, 0, 1)
    If $iRec > 0 Then _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $tmp, $sPath & $sDir, $iRec)
    Next
    EndIf
    $aFileList = _MyFileListToArray($sPath, 1)
    If IsArray($aFileList) Then
    For $sFile In $aFileList
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 2, 2)
    Next
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorerRecursive

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

    Func _MyFileListToArray($sPath, $iFlag)
    Local $sFileList = '', $hSearch, $sFile
    $hSearch = FileFindFirstFile($sPath & '*')
    If @error Then Return
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If ($iFlag + @extended = 2) Then ContinueLoop
    $sFileList &= $sFile & '|'
    WEnd
    FileClose($hSearch)
    If $sFileList = '' Then Return
    Return StringSplit(StringTrimRight($sFileList, 1), '|', 2)
    EndFunc ;==>__FileListToArray

    [/autoit]

    Ein Problem was mir noch auffiel:
    Der Player greift beim Start immer auf die CD im Laufwerk zurück (welches erst hochfahren muss) und das obwohl ich sogar einen 'festen' Startordner angegeben habe. Dies verzögert jedesmal den Start...

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    4 Mal editiert, zuletzt von Micha_he (7. März 2015 um 10:27)

  • Das TextMeter werd ich mir genauer ansehen. Erste eEindruck sieht aber gut aus.
    Das Speichern der Einstellungen werd ich auch umsetzen. (Hatte vergessen, das zu schreiben)
    Das mit dem Abbrechen werd ich mir auch nochmal ansehen. (fehlt ja vermutlich nur ein +1 beim Ende der Länge oder so)
    Multiselect hatte ich auch schon überlegt, werd auch mal versuchen, das umzusetzen.

    Was die Ordner und Dateien betrifft: Ich nutze eine von mir geschriebene UDF dafür. Als ich diese schrieb hab ich mir sogar das von Oscar angesehen. Ich fand es eher unpraktisch, Dateien und Ordner in der TreeView zu mischen. (Was meinen Player angeht orientiere ich mich auch ein bisschen an VDJ ;)) Ich habe Oft viele Dateien in einem Ordner (mehrere 100 Lieder). würde man diese alle in der Treeview auflisten wäre man dort beim Ordner wechseln fast nurnoch am Scrollen. (Daher würde ich das eher nicht umsetzen).

    Das mit dem CD-Laufwerk liegt daran, dass ich beim Laden einmal nachsehe, ob Ordner unter dem Pfad sind, und wenn ja wird ein + zum aufklappen hinzugefügt. Ich denke, es lässt sich aber einbauen, dass ich das bei CDLaufwerken verhindere und dort einfach so das + hinsetze.

    Danke für deine vielen Ideen, Micha_he.

  • Den Resetfehler hab ich schon bemerkt und behoben. Werde heute noch ein Update hochladen. Dort werden dann auch die Sound, EQ,Device Einstellungen gespeichert, sowie die bewegenden Texte eingefügt, wenn der Titel/Interpret zu lange ist.
    Was das Bild angeht: du meinst die Buttons links, oder? Da bin ich momentan Ratlos. Die werden genauso erstellt und bewegt wie die rechts, werden aber irgendwie nicht richtig dargestellt. Das tritt aber nur beim Resize auf. Wenn du das Programm neu startest dürfte das nicht mehr so sein. (Die aktuelle Größe wird ja gespeichert).
    Das Problem ist die _setSize($width,$height,$maximize=false) Funktion.

    Spoiler anzeigen
    [autoit]


    ;links
    GUICtrlSetPos($hGUITitle, 5, 5, $MainGui_Width/4-5)
    GUICtrlSetPos($hGUIArtist, $MainGui_Width/4+5, 5, $MainGui_Width/4,20)
    GUICtrlSetPos($hGUIPositionL, 5, 35, 150, 25)
    GUICtrlSetPos($hGUIPosition, 5, 65, $MainGui_Width/2-5, 25)
    GUICtrlSetPos($hGUIMode, 55, 95, 50, 22)
    GUICtrlSetPos($hGUIPlayPause, 55, 120, 50, 25)
    GUICtrlSetPos($hGUIBackwards, 5, 115, 50, 30)
    GUICtrlSetPos($hGUIForwards, 105, 115, 50, 30)
    GUICtrlSetPos($hGuiAudioOutput, 5, 150,100,20)
    ControlMove($hGUI,"",$hGUIDeviceCombo,5, 170, $MainGui_Width/4)
    ;rechts
    GUICtrlSetPos($hGUITitleR, $MainGui_Width/2+5, 5, $MainGui_Width/4-5)
    GUICtrlSetPos($hGUIArtistR, $MainGui_Width/4*3+5, 5, $MainGui_Width/4,20)
    GUICtrlSetPos($hGUIPositionLR, $MainGui_Width/2+5, 35, 150, 25)
    GUICtrlSetPos($hGUIPositionR, $MainGui_Width/2+5, 65, $MainGui_Width/2, 25)
    GUICtrlSetPos($hGUIPlayPauseR, $MainGui_Width/2+5+55, 100, 50, 25)
    GUICtrlSetPos($hGuiAudioOutputR, $MainGui_Width/2+5+5, 130)
    ControlMove($hGUI,"",$hGUIDeviceComboR,$MainGui_Width/2+5+5, 150, $MainGui_Width/4)

    [/autoit]

    Was die Mehrfachauswahl angeht bin ich auch auf ein Problem gestoßen... Ich hab sie nirgends verboten, sie ist aber nicht möglich...

    [autoit]

    $hGUIList = GUICtrlCreateListView("Path|Filename|Title|Artist|Album|Length", 0 + 310, $border[0] + 5, 480 + 5, 400, -1, BitOR($LVS_EX_INFOTIP, $LVS_EX_FULLROWSELECT))

    [/autoit]
  • Diese Einstellungen bietet mein Player größtenteils; Und dort nicht wegen dem optischen EQ ärgern, der neue mit Slidern ist schon fertig, und wird gerade mit Crossfade zum Geequalizeden bearbeitet :D

    Spoiler anzeigen

    Überraschung!


    MfG Donkey

  • So. Neues Update:
    Es gibt jetzt Crossfade (Mit Button fürs automatische Faden)
    Es gibt eine zweite Playlist und eine Checkbox, die Automatisch die beiden Playlists im Wechsel durchlaufen lässt. (Danke Micha :D)
    Im Modus mit beiden Playlists (Oben der Switch-Button) können Lieder nur noch über das obere drittel auf den jeweiligen Player gezogen werden, da im Mittleren drittel die Playlists sind.

  • So. Mit diesem Update ist das Projekt ist vorerst abgeschlossen. (Hab momentan keine Verbesserungsideen mehr :))

    Es wurde eine Suchfunktion hinzugefügt. Dabei wird in ein Input-Feld getippt und während des Tippens werden die Ergebnisse angezeigt. (Neuanwählen des Inputfeldes löscht den inhalt)
    Das ziehen/doppelklicken funktioniert bei der Suche genauso wie in der Listview (sitzt auch an der gleichen Stelle).
    Um Dateien der Suche hinzuzufügen muss der Ordner, in dem sich die Dateien befinden einmal angeklickt werden. Es gibt aber auch die Möglichkeit einen Rechtsklick auf einen Ordner zu machen und diesen durch klick auf "Der Suche hinzufügen" rekursiv (mit allen Unterordnern) in die Datenbank einzufügen. (Das anzeigen der Ordner dauert nur beim ersten mal länger. Sobald der Ordner eingelesen wurde geht es fast genauso schnell wie ohne die Suche. Nur bei vielen Änderungen kann es länger dauern.) Änderungen an Dateien/Ordnern werden erst beim neueinlesen, bzw. "Der Suche hinzufügen" übernommen.

    Natürlich sind auch wieder ein paar Bugfixes dabei.
    Falls ihr Fehler bemerkt: Bitte hier Posten!

    Viel Freude! (Die Suchfunktion war auch echt nötig :D)

    • Offizieller Beitrag
    Zitat von ProgrammingDonkey

    Da dieser Player auf meinem aufbaut fühle ich mich berechtigt, hier etwas Werbung einzubauen

    Hast du die Aufmerksamkeit so nötig? Bau doch deinen Player zum "SuperHyperVollgeilPlayer" aus und du mußt nicht in einem anderen Thread posten.
    Es reicht doch, wenn du deinen Thread benutzt. Ich finde das vollendeter Kindergarten .... atschibätsch meiner ist besser (größer) als deiner ||

  • @Raupi
    Ohne hiermit innerhalb eines Threads direkt eine Diskussion anfangen zu wollen:
    Ich habe nie gesagt, dass meiner besser ist, oder in irgendeinem Punkt damit angegeben; Kanashius Player bietet sogar mehr Funktionen. Allerdings ist mein Player simpler und Nutzer-freundlicher.

    Spoiler anzeigen

    Überraschung!


    MfG Donkey

    • Offizieller Beitrag

    Ob deiner besser ist oder nicht, das kannst du in deinem Thread machen und nicht in einem anderen. Sei froh das Gun-Food es noch nicht gebacken bekommen hat, die Moderation richtig einzustellen, sonst wäre dein Post längst in Ablage-P gewandert.