• Offizieller Beitrag

    Die Random-Funktion arbeitet etwas anders. Wenn man den Button anklickt, wird die Playlist zufällig neu sortiert und dann von oben nach unten abgespielt. Deshalb braucht man dafür kein anderes Icon.
    Für "Repeat" bzw. "No Repeat" gibt es doch bereits zwei unterschiedliche Icons. Ich weiß jetzt nicht, ob man die zusätzlich auch noch in anderen Farben machen sollte!? :huh:

    Fernbedienung-Unterstützung hört sich ja ganz interessant an. Wobei: Kommt das nicht auf die verwendete Fernbedienung an? Irgendwo habe ich noch eine Funk-Fernbedieung rumliegen....muss die mal suchen...
    Aber dazu muss doch eigentlich nichts am Starplayer verändert werden, oder?

  • Aso, wieso hast du die Random-Funktion so gestaltet? Zufällig durch die Playlist springen ohne die Reihenfolge zu ändern wäre imho besser.

    Eventghost unterstützt sehr viele Fernbedienungen.
    Dabei wird erzeugt die Fernbedienungen in EG Events die dann einem Befehl zugeordnet werden können.
    Wenn jetzt der Starplayer z.B. 8 Funktionen hat, die sinnvollerweise per Fernbedienung gesteuert werden können müsste man nur die 8 Befehle (Plugin) dort hinterlegen.

    Der Starplayer müsste dann auf die erhaltenen Befehle reagieren, z.B. über WM_Commad sieht das ca.

    Spoiler anzeigen
    [autoit]


    Func EG_WM_Commad($hWnd, $msgID, $wParam, $lParam)
    switch $wParam
    case 1
    _Play()
    case 2
    _Stop()
    case 3
    _Next()
    case 4
    _Prev()
    EndSwitch
    endfunc

    [/autoit]

  • - Was hast Du für einen kleinen Desktop, dass die Fenster außerhalb geöffnet werden? ^^
    Das möchte ich auch nicht ändern, weil ich eben nicht drei einzelne Fenster haben will. Die sollen schon zusammenhängen.

    Nein keinen kleinen Desktop, sondern mein Musik-Player liegt meist links unten in der Ecke.
    Und wenn man beim Starplayer das Konfig-Fenster öffnet bzw. die Playlist aktiviert, sind die
    Fenster nun mal außerhalb des sichtbaren Bereiches.
    Und um nur mal eine Option umzuschalten muss man dann den Player hin und her schieben.

    Ist nun aber nicht weltbewegendes, sondern es fiel mir nur beim Handling auf.

    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"

  • bei mir werden in der playlist manchmal falsche zeiten angezeigt beim abspielen sind sie dann aber richtig

    und wäre es nicht besser wenn es ein bisschen pause zwischen den lieddern geben würde? weil wenn das so zusammengemixt wird das hört sich teilweise sehr schräg an^^

  • Hallo Oscar,

    ich habe dein Programm mal sogut wie es ging 'verdeutscht' :)
    Wenn du es nicht willst, Lösch es einfach ;)

    Deutsche Version
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=icons\prog.ico
    #AutoIt3Wrapper_outfile=Starplayer.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Description=Starplayer
    #AutoIt3Wrapper_Res_Fileversion=3.0.1.1
    #AutoIt3Wrapper_Res_LegalCopyright=Oscar (http://www.autoit.de)
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <Date.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <Math.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <StructureConstants.au3>
    #include <Timers.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    #include 'includes\ID3Tag.au3'
    #include 'includes\_RecursiveFileListToArray.au3'

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

    #include 'bass\BassConstants.au3'
    #include 'bass\Bass.au3'
    #include 'bass\BassTags.au3'

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

    Opt('GUIOnEventMode', 1)

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

    Global $sTitle = 'Starplayer v3'
    Global $sVersion = '3.0.1.1'
    Global $sDate = '2010-07-17'
    Global $iSelfPID = _WinAPI_GetCurrentProcessID()
    Global $aProcessList = ProcessList('Starplayer.exe')
    If $aProcessList[0][0] > 1 Then
    If $iSelfPID <> $aProcessList[1][1] Then WinWait('Starplayer Playlist')
    EndIf
    If WinExists('Starplayer Playlist') Then ; If Starplayer exists, then send Commandline to 1st instance.
    If $CmdLine[0] > 0 Then
    For $i = 1 To $CmdLine[0]
    If FileExists($CmdLine[$i]) Then
    Switch StringRight($CmdLine[$i], 4)
    Case '.mp3', '.m3u'
    ConsoleWrite($CmdLine[$i] & @CRLF)
    ControlCommand('Starplayer Playlist', '', '[CLASS:Edit; INSTANCE:1]', 'EditPaste', $CmdLine[$i] & @CRLF)
    ControlClick('Starplayer Playlist', '', '[CLASS:Button; INSTANCE:1]')
    EndSwitch
    EndIf
    Next
    EndIf
    Exit ; Only one instance. Exit the 2nd.
    EndIf

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

    _BASS_STARTUP(@ScriptDir & '\bass\bass.dll')
    _Bass_Tags_Startup(@ScriptDir & '\bass\BassTags.dll')
    _BASS_Init(0, -1, 44100, 0, '')
    If @error Then Exit MsgBox(16, $sTitle, 'Error!' & @CRLF & 'Cannot initialize Soundcard!')

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

    Global $sAppDir = IniRead(@ScriptDir & '\Starplayer.ini', 'Settings', 'AppDir', @AppDataDir & '\StarplayerV3\')
    If $sAppDir <> '' And Not FileExists($sAppDir) Then DirCreate($sAppDir)
    Global $sInifile = $sAppDir & 'Starplayer.ini'
    If Not IniWrite($sInifile, 'Settings', 'AppDir', $sAppDir) Then
    $sAppDir = @AppDataDir & '\StarplayerV3\'
    If Not FileExists($sAppDir) Then DirCreate($sAppDir)
    $sInifile = $sAppDir & 'Starplayer.ini'
    EndIf
    Global $iMainPosX = IniRead($sInifile, 'Settings', 'MainPosX', @DesktopWidth / 2 - 280)
    Global $iMainPosY = IniRead($sInifile, 'Settings', 'MainPosY', @DesktopHeight / 2 - 110)
    Global $iFadeTime = IniRead($sInifile, 'Settings', 'FadeTime', 10)
    Global $fTooltips = Execute(IniRead($sInifile, 'Settings', 'Tooltips', True))
    Global $fSoundinfos = Execute(IniRead($sInifile, 'Settings', 'Soundinfos', True))
    Global $fFadeOut = Execute(IniRead($sInifile, 'Settings', 'FadeOut', True))
    Global $fOnTop = Execute(IniRead($sInifile, 'Settings', 'OnTop', True))
    Global $fRepeat = Execute(IniRead($sInifile, 'Settings', 'Repeat', False))

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

    Global $iPeakL, $iPeakR, $iHigh = 32768, $iLength, $iSeconds, $iOld
    Global $iWidth = 500, $sPath, $hSoundOpen = -1, $hSoundFade = -1, $iFadeVol = 100, $iStart = 0, $iHover = -1
    Global $ahPlItem[1], $iPlCount = 0, $iPlayIndex = -1, $sID3Tags, $fPause = False
    Global $gaDropFiles[1]
    Global Const $WM_DROPFILES = 0x233
    Global $sIconDir = @ScriptDir & '\icons\'
    Global $iWinBorder = 2 * _WinAPI_GetSystemMetrics($SM_CYFRAME)

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

    ; --- Begin Main-GUI ---
    $hGui = GUICreate($sTitle, 560, 220, $iMainPosX, $iMainPosY, BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), $WS_EX_CONTROLPARENT)
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_SetPosition')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
    GUISetIcon(@ScriptDir & '\icons\prog.ico')
    GUISetBkColor(0x000000)

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

    GUICtrlCreatePic($sIconDir & 'backgr.jpg', 0, 0, 560, 160)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    $hStar = GUICtrlCreateIcon($sIconDir & 'about.ico', -1, 8, 8, 32, 32)
    GUICtrlSetTip(-1, $sTitle & @CR & 'Version: ' & $sVersion & @CR & 'Date: ' & $sDate & @CR & 'Author: Oscar (http://www.autoit.de)')

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

    $hMin = GUICtrlCreateIcon($sIconDir & 'min0.ico', -1, 509, 0, 24, 15)
    GUICtrlSetOnEvent(-1, '_Minimize')

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

    $hClose = GUICtrlCreateIcon($sIconDir & 'close0.ico', -1, 533, 0, 28, 15)
    GUICtrlSetOnEvent(-1, '_Exit')

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

    $hLabel = GUICtrlCreateLabel('MP3-Datei wählen...', 50, 22, 500, 28, $SS_LEFTNOWORDWRAP, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    GUICtrlCreateLabel('Position', 4, 51, 42, 20, $SS_RIGHT, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 9, 400, 0, 'Times New Roman')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; Classic-Style
    $hPosition = GUICtrlCreateProgress(50, 50, 500, 20, $PBS_SMOOTH)
    GUICtrlSetBkColor(-1, 0x222222)
    GUICtrlSetColor(-1, 0xFFBB55)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; Standard-Windows-Style

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

    $hDuration = GUICtrlCreateLabel('00:00 / 00:00', 220, 72, 130, 32, Default, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 14, 400, 0, 'Tahoma')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $hConfig = GUICtrlCreateIcon($sIconDir & 'config_close0.ico', -1, 0, 109, 14, 44)
    GUICtrlSetOnEvent(-1, '_ShowConfig')

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

    GUICtrlCreateLabel('L', 18, 108, 28, 20, $SS_RIGHT, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 9, 400, 0, 'Times New Roman')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    GUICtrlCreateLabel('R', 18, 138, 28, 20, $SS_RIGHT, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 9, 400, 0, 'Times New Roman')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $hPLShow = GUICtrlCreateIcon($sIconDir & 'playlist0.ico', -1, 4, 170, 48, 48)
    GUICtrlSetOnEvent(-1, '_ShowPlaylist')

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

    $hPrev = GUICtrlCreateIcon($sIconDir & 'prev0.ico', -1, 180, 170, 48, 48)
    GUICtrlSetOnEvent(-1, '_PrevSound')

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

    $hStop = GUICtrlCreateIcon($sIconDir & 'stop0.ico', -1, 230, 170, 48, 48)
    GUICtrlSetOnEvent(-1, '_StopSound')

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

    $hPlay = GUICtrlCreateIcon($sIconDir & 'play0.ico', -1, 280, 170, 48, 48)
    GUICtrlSetOnEvent(-1, '_StartSound')

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

    $hNext = GUICtrlCreateIcon($sIconDir & 'next0.ico', -1, 330, 170, 48, 48)
    GUICtrlSetOnEvent(-1, '_NextSound')
    ; --- End Main-GUI ---

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

    $aGuiPos = WinGetPos($hGui)

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

    ; --- Begin Playlist-GUI ---
    $hPLGui = GUICreate('Starplayer Playlist', 560, 380, $aGuiPos[0], $aGuiPos[1] + 220 + $iWinBorder, BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), $WS_EX_ACCEPTFILES + $WS_EX_CONTROLPARENT, $hGui)
    GUISetBkColor(0x161616)
    GUISetOnEvent($GUI_EVENT_DROPPED, '_DropEvent')

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

    $LV_Style = BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER)
    $LV_EX_STYLE = BitOR($WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER)
    $hPlaylist = GUICtrlCreateListView('Nr.|Interpret|Titel|Dauer|Bitrate|Pfad', 50, 10, 500, 300, $LV_Style, $LV_EX_STYLE)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlSetBkColor(-1, 0xDDDDDD)
    GUICtrlSendMsg($hPlaylist, $LVM_SETCOLUMNWIDTH, 0, 40)
    GUICtrlSendMsg($hPlaylist, $LVM_SETCOLUMNWIDTH, 1, 180)
    GUICtrlSendMsg($hPlaylist, $LVM_SETCOLUMNWIDTH, 2, 230)
    GUICtrlSendMsg($hPlaylist, $LVM_SETCOLUMNWIDTH, 3, 70)
    GUICtrlSendMsg($hPlaylist, $LVM_SETCOLUMNWIDTH, 4, 70)
    GUICtrlSendMsg($hPlaylist, $LVM_SETCOLUMNWIDTH, 5, 200)

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

    $hPLUp = GUICtrlCreateIcon($sIconDir & 'up0.ico', -1, 10, 110, 32, 32)
    GUICtrlSetOnEvent(-1, '_PlaylistUp')

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

    $hPLDown = GUICtrlCreateIcon($sIconDir & 'down0.ico', -1, 10, 160, 32, 32)
    GUICtrlSetOnEvent(-1, '_PlaylistDown')

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

    $hPLNew = GUICtrlCreateIcon($sIconDir & 'playlistnew0.ico', -1, 130, 320, 32, 32)
    GUICtrlSetOnEvent(-1, '_NewPlaylist')

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

    $hPLLoad = GUICtrlCreateIcon($sIconDir & 'playlistopen0.ico', -1, 170, 320, 32, 32)
    GUICtrlSetOnEvent(-1, '_LoadPlaylist')

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

    $hPLSave = GUICtrlCreateIcon($sIconDir & 'playlistsave0.ico', -1, 210, 320, 32, 32)
    GUICtrlSetOnEvent(-1, '_SavePlaylist')

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

    $hPLExport = GUICtrlCreateIcon($sIconDir & 'export0.ico', -1, 250, 320, 32, 32)
    GUICtrlSetOnEvent(-1, '_ExportPlaylist')

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

    $hPLAdd = GUICtrlCreateIcon($sIconDir & 'playlistadd0.ico', -1, 290, 320, 32, 32)
    GUICtrlSetOnEvent(-1, '_PlaylistAdd')

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

    $hPLDel = GUICtrlCreateIcon($sIconDir & 'playlistdel0.ico', -1, 330, 320, 32, 32)
    GUICtrlSetOnEvent(-1, '_PlaylistDel')

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

    $hPLRandom = GUICtrlCreateIcon($sIconDir & 'random0.ico', -1, 370, 320, 32, 32)
    GUICtrlSetOnEvent(-1, '_RandomSort')

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

    $hPLRepeat = GUICtrlCreateIcon($sIconDir & 'repeat0.ico', -1, 410, 320, 32, 32)
    GUICtrlSetOnEvent(-1, '_ChangeRepeat')

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

    $hPLStatus1 = GUICtrlCreateLabel('', -2, 361, 270, 22, Default, $WS_EX_CLIENTEDGE)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetColor(-1, 0xFFFFAA)
    $hPLStatus2 = GUICtrlCreateLabel('', 268, 361, 295, 22, Default, $WS_EX_CLIENTEDGE)
    GUICtrlSetFont(-1, 11, 400, 0, 'Arial')
    GUICtrlSetColor(-1, 0xFFFFAA)

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

    $hCmdLineInput = GUICtrlCreateEdit('', 40, 0, 400, 100)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUICtrlCreateButton('Send', 0, 80, 40, 20)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUICtrlSetOnEvent(-1, '_NewEntry')
    ; --- End Playlist-GUI ---

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

    ; --- Begin Config-GUI ---
    $hConfigGui = GUICreate('Einstellungen', 320, 220, $aGuiPos[0] - (320 + $iWinBorder), $aGuiPos[1], BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), $WS_EX_CONTROLPARENT, $hGui)
    GUISetBkColor(0x000000)

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

    GUICtrlCreatePic($sIconDir & 'backgr.jpg', 0, 0, 560, 160)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUICtrlCreateLabel('Starplayer-Optionen', 30, 10, 280, 30)
    GUICtrlSetFont(-1, 18, 400, 2, 'Times New Roman')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    GUICtrlCreateGroup('', 5, 35, 310, 140)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; Classic-Style
    $hCOnTop = GUICtrlCreateCheckbox('Immer Oben', 15, 55, 110, 16)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUICtrlSetOnEvent(-1, '_SwitchOnTop')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $hCFadeout = GUICtrlCreateCheckbox('Cross-Fade', 15, 78, 110, 16)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUICtrlSetOnEvent(-1, '_SwitchFadeOut')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $hCFadeTime = GUICtrlCreateInput($iFadeTime, 135, 75, 42, 22, BitOR($ES_READONLY, $ES_CENTER, $ES_NUMBER))
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateUpdown($hCFadeTime)
    GUICtrlSetLimit(-1, 20, 1)
    GUICtrlSetOnEvent(-1, '_ChangeFadeTime')

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

    GUICtrlCreateLabel('Sek.', 185, 78, 30, 16)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $hCSoundinfos = GUICtrlCreateCheckbox('Titel im Taskbar-Icon zeigen', 15, 101, 210, 16)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUICtrlSetOnEvent(-1, '_SwitchSoundinfos')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $hCTooltips = GUICtrlCreateCheckbox('Info-Tooltips anzeigen', 15, 124, 210, 16)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUICtrlSetOnEvent(-1, '_SwitchTooltips')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    $hCStickVersion = GUICtrlCreateCheckbox('Optionen im Programmordner sichern', 15, 147, 230, 16)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUICtrlSetOnEvent(-1, '_SwitchInifile')
    GUICtrlSetColor(-1, 0xFFFFCC)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; Standard-Windows-Style
    GUICtrlCreateGroup('', -99, -99, 1, 1)

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

    $hCRegister = GUICtrlCreateButton('Die Dateien ".mp3" && ".m3u" mit Starplayer öffnen', 15, 190, 290, 25)
    GUICtrlSetOnEvent(-1, '_RegFiletype')
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')

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

    If $sAppDir = '' Then
    GUICtrlSetState($hCStickVersion, $GUI_CHECKED)
    GUICtrlSetState($hCRegister, $GUI_DISABLE)
    EndIf
    ; --- End Config-GUI ---

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

    GUISetState(@SW_SHOW, $hGui)
    _GDIPlus_Startup()
    $hBackgr = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hBrushGreen = _GDIPlus_BrushCreateSolid(0xFF88FF00)
    $hPenGrey = _GDIPlus_PenCreate(0xFF888888, 1)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, 44, $hGraphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    _GDIPlus_GraphicsFillRect($hBuffer, 0, 0, $iWidth, 44, $hBackgr)
    _GDIPlus_GraphicsDrawRect($hBuffer, 0, 0, $iWidth - 1, 15, $hPenGrey)
    _GDIPlus_GraphicsDrawRect($hBuffer, 0, 27, $iWidth - 1, 15, $hPenGrey)
    $iWidth -= 3
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 50, 110, $iWidth, 44)

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

    Global $aAccelKeys[2][2] = [['{PGUP}', $hPLUp],['{PGDN}', $hPLDown]]
    GUISetAccelerators($aAccelKeys, $hPLGui)

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

    AdlibRegister('_HoverEffect', 100)
    GUIRegisterMsg($WM_MOVE, '_WM_MOVE')
    GUIRegisterMsg($WM_DROPFILES, '_WM_DROPFILES')
    GUIRegisterMsg($WM_TIMER, '_WM_TIMER')
    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')

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

    $fTooltips = Not $fTooltips
    _SwitchTooltips()
    $fSoundinfos = Not $fSoundinfos
    _SwitchSoundinfos()
    $fFadeOut = Not $fFadeOut
    _SwitchFadeOut()
    $fOnTop = Not $fOnTop
    _SwitchOnTop()
    $fRepeat = Not $fRepeat
    _ChangeRepeat()

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

    $iTimerVUMeter = _Timer_SetTimer($hGui, 10)

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

    If $CmdLine[0] > 0 Then
    For $i = 1 To $CmdLine[0]
    If FileExists($CmdLine[$i]) Then
    Switch StringRight($CmdLine[$i], 4)
    Case '.mp3'
    _AddFileToPlaylist($CmdLine[$i])
    Case '.m3u'
    $aNewFiles = StringSplit(FileRead($CmdLine[$i]), @CRLF, 1)
    For $i = 1 To $aNewFiles[0]
    If StringRight($aNewFiles[$i], 4) = '.mp3' And FileExists($aNewFiles[$i]) Then _AddFileToPlaylist($aNewFiles[$i])
    Next
    EndSwitch
    EndIf
    Next
    _PlaySound(0)
    EndIf
    _CalcPlaylistInfo()

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

    While Sleep(1000)
    WEnd

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

    #cs
    ***** Begin Functions *****
    #ce

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

    Func _Minimize()
    GUISetState(@SW_MINIMIZE, $hGui)
    EndFunc ;==>_Minimize

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

    Func _ShowPlaylist()
    Switch BitAND(WinGetState($hPLGui), 2)
    Case 2
    GUISetState(@SW_HIDE, $hPLGui)
    Case 0
    GUISetState(@SW_SHOW, $hPLGui)
    EndSwitch
    EndFunc ;==>_ShowPlaylist

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

    Func _ShowConfig()
    Switch BitAND(WinGetState($hConfigGui), 2)
    Case 2
    GUISetState(@SW_HIDE, $hConfigGui)
    GUICtrlSetImage($hConfig, $sIconDir & 'config_close1.ico')
    Case 0
    GUISetState(@SW_SHOW, $hConfigGui)
    GUICtrlSetImage($hConfig, $sIconDir & 'config_open1.ico')
    EndSwitch
    EndFunc ;==>_ShowConfig

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

    Func _PlaylistUp()
    Local $iSelect, $hWndPlaylist = GUICtrlGetHandle($hPlaylist), $sTmp
    $iSelect = ControlListView($hPLGui, '', $hPlaylist, 'GetSelected')
    If $iSelect = 0 Or $iSelect = '' Then Return
    If $iSelect - 1 = $iPlayIndex Then
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xDDDDDD)
    $iPlayIndex = $iSelect
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xFFBB55)
    ElseIf $iSelect = $iPlayIndex Then
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xDDDDDD)
    $iPlayIndex = $iSelect - 1
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xFFBB55)
    EndIf
    $sTmp = _GUICtrlListView_GetItemTextString($hWndPlaylist, $iSelect - 1)
    _GUICtrlListView_SetItemText($hWndPlaylist, $iSelect - 1, _GUICtrlListView_GetItemTextString($hWndPlaylist, $iSelect), -1)
    _GUICtrlListView_SetItemText($hWndPlaylist, $iSelect, $sTmp, -1)
    _GUICtrlListView_SetItemSelected($hWndPlaylist, -1, False)
    _GUICtrlListView_SetItemSelected($hWndPlaylist, $iSelect - 1, True)
    _GUICtrlListView_EnsureVisible($hWndPlaylist, $iSelect - 1)
    _EnumPlaylist()
    EndFunc ;==>_PlaylistUp

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

    Func _PlaylistDown()
    Local $iSelect, $hWndPlaylist = GUICtrlGetHandle($hPlaylist), $sTmp, $iCount
    $iCount = _GUICtrlListView_GetItemCount($hWndPlaylist)
    $iSelect = ControlListView($hPLGui, '', $hPlaylist, 'GetSelected')
    If $iSelect + 1 = $iCount Or $iSelect = '' Then Return
    If $iSelect + 1 = $iPlayIndex Then
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xDDDDDD)
    $iPlayIndex = $iSelect
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xFFBB55)
    ElseIf $iSelect = $iPlayIndex Then
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xDDDDDD)
    $iPlayIndex = $iSelect + 1
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xFFBB55)
    EndIf
    $sTmp = _GUICtrlListView_GetItemTextString($hWndPlaylist, $iSelect + 1)
    _GUICtrlListView_SetItemText($hWndPlaylist, $iSelect + 1, _GUICtrlListView_GetItemTextString($hWndPlaylist, $iSelect), -1)
    _GUICtrlListView_SetItemText($hWndPlaylist, $iSelect, $sTmp, -1)
    _GUICtrlListView_SetItemSelected($hWndPlaylist, -1, False)
    _GUICtrlListView_SetItemSelected($hWndPlaylist, $iSelect + 1, True)
    _GUICtrlListView_EnsureVisible($hWndPlaylist, $iSelect + 1)
    _EnumPlaylist()
    EndFunc ;==>_PlaylistDown

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

    Func _NewPlaylist()
    If _GUICtrlListView_GetItemCount($hPlaylist) = 0 Then Return
    AdlibUnRegister('_HoverEffect')
    If MsgBox(36 + 262144, $sTitle, 'neue playlist erstellen. Sind sie sicher?', 0, $hPLGui) = 6 Then
    _GUICtrlListView_BeginUpdate($hPlaylist)
    _StopSound()
    $iPlCount = 0
    Global $ahPlItem[1]
    _GUICtrlListView_DeleteAllItems($hPlaylist)
    _CalcPlaylistInfo()
    _GUICtrlListView_EndUpdate($hPlaylist)
    EndIf
    AdlibRegister('_HoverEffect', 100)
    EndFunc ;==>_NewPlaylist

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

    Func _LoadPlaylist()
    Local $sLoadFilename, $aNewFiles
    AdlibUnRegister('_HoverEffect')
    GUICtrlSetImage($hPLLoad, $sIconDir & 'wait.ico')
    $sLoadFilename = FileOpenDialog('MP3-Playlist auswählen', '', 'MP3-Playlist (*.m3u)', 3, '', $hGui)
    If Not @error Then
    $aNewFiles = StringSplit(FileRead($sLoadFilename), @CRLF, 1)
    For $i = 1 To $aNewFiles[0]
    If StringRight($aNewFiles[$i], 4) = '.mp3' And FileExists($aNewFiles[$i]) Then _AddFileToPlaylist($aNewFiles[$i])
    Next
    EndIf
    _CalcPlaylistInfo()
    GUICtrlSetImage($hPLLoad, $sIconDir & 'playlistopen0.ico')
    AdlibRegister('_HoverEffect', 100)
    EndFunc ;==>_LoadPlaylist

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

    Func _SavePlaylist()
    Local $sSaveFilename, $hFile, $iCount = _GUICtrlListView_GetItemCount($hPlaylist)
    If $iCount = 0 Then Return
    AdlibUnRegister('_HoverEffect')
    GUICtrlSetImage($hPLSave, $sIconDir & 'wait.ico')
    $sSaveFilename = FileSaveDialog('MP3-Playlist speichern', '', 'MP3-Playlist (*.m3u)', 18, '', $hGui)
    If Not @error Then
    If StringRight($sSaveFilename, 4) <> '.m3u' Then $sSaveFilename &= '.m3u'
    $hFile = FileOpen($sSaveFilename, 2)
    If $hFile <> -1 Then
    For $i = 0 To $iCount - 1
    FileWriteLine($hFile, _GUICtrlListView_GetItemText($hPlaylist, $i, 5))
    Next
    FileClose($hFile)
    EndIf
    EndIf
    GUICtrlSetImage($hPLSave, $sIconDir & 'playlistsave0.ico')
    AdlibRegister('_HoverEffect', 100)
    EndFunc ;==>_SavePlaylist

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

    Func _ExportPlaylist()
    Local $sExportFolder, $hFile, $sSource, $iCount = _GUICtrlListView_GetItemCount($hPlaylist)
    If $iCount = 0 Then Return
    AdlibUnRegister('_HoverEffect')
    GUICtrlSetImage($hPLExport, $sIconDir & 'wait.ico')
    $sExportFolder = FileSelectFolder('Ordner zum Exportieren auswählen', '', 3, '', $hGui)
    If Not @error Then
    $hFile = FileOpen($sExportFolder & '\!Folder-Playlist.m3u', 2)
    If $hFile <> -1 Then
    For $i = 0 To $iCount - 1
    $sSource = _GUICtrlListView_GetItemText($hPlaylist, $i, 5)
    If FileCopy($sSource, $sExportFolder, 1) Then FileWriteLine($hFile, StringRegExpReplace($sSource, '.+\\(.+)', '$1'))
    Next
    FileClose($hFile)
    EndIf
    EndIf
    GUICtrlSetImage($hPLExport, $sIconDir & 'export0.ico')
    AdlibRegister('_HoverEffect', 100)
    EndFunc ;==>_ExportPlaylist

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

    Func _PlaylistDel()
    Local $aSelect
    $aSelect = _GUICtrlListView_GetSelectedIndices($hPlaylist, True)
    If $aSelect[0] = 0 Then Return
    For $i = $aSelect[0] To 1 Step -1
    If $aSelect[$i] = $iPlayIndex Then _StopSound()
    If $aSelect[$i] < $iPlayIndex Then $iPlayIndex -= 1
    _GUICtrlListView_DeleteItem($hPlaylist, $aSelect[$i])
    _ArrayDelete($ahPlItem, $aSelect[$i])
    Next
    $iPlCount -= $aSelect[0]
    _CalcPlaylistInfo()
    EndFunc ;==>_PlaylistDel

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

    Func _PlaylistAdd()
    Local $sNewFiles
    AdlibUnRegister('_HoverEffect')
    $sNewFiles = FileOpenDialog('MP3-Datei(en) auswählen', '', 'MP3-Dateien (*.mp3)', 7, '', $hGui)
    If Not @error Then
    $gaDropFiles = StringSplit($sNewFiles, '|', 2)
    If UBound($gaDropFiles) > 1 Then
    For $i = 1 To UBound($gaDropFiles) - 1
    $gaDropFiles[$i] = $gaDropFiles[0] & '\' & $gaDropFiles[$i]
    Next
    _ArrayDelete($gaDropFiles, 0)
    EndIf
    _DropEvent()
    EndIf
    _CalcPlaylistInfo()
    AdlibRegister('_HoverEffect', 100)
    EndFunc ;==>_PlaylistAdd

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

    Func _Randomsort()
    Local $iCount, $aRan, $aItems, $aTmp
    $iCount = _GUICtrlListView_GetItemCount($hPlaylist)
    If $iCount = 0 Then Return
    Local $aRan[$iCount], $aItems[$iCount]
    _StopSound()
    GUICtrlSetImage($hPLRandom, $sIconDir & 'wait.ico')
    _GUICtrlListView_BeginUpdate($hPlaylist)
    For $i = 0 To UBound($aRan) - 1
    $aRan[$i] = Random(100000, 999999, 1)
    $aItems[$i] = _GUICtrlListView_GetItemTextString($hPlaylist, $i)
    Next
    For $i = 0 To UBound($aRan) - 2
    For $j = $i + 1 To UBound($aRan) - 1
    If $aRan[$i] > $aRan[$j] Then
    _SwitchVar($aRan[$i], $aRan[$j])
    _SwitchVar($aItems[$i], $aItems[$j])
    EndIf
    Next
    Next
    For $i = 0 To UBound($aRan) - 1
    _GUICtrlListView_SetItemText($hPlaylist, $i, $aItems[$i], -1)
    Next
    _EnumPlaylist()
    _GUICtrlListView_EndUpdate($hPlaylist)
    GUICtrlSetImage($hPLRandom, $sIconDir & 'random0.ico')
    _PlaySound(0)
    EndFunc ;==>_Randomsort

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

    Func _SwitchVar(ByRef $a, ByRef $b)
    Local $tmp
    $tmp = $a
    $a = $b
    $b = $tmp
    EndFunc ;==>_SwitchVar

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

    Func _EnumPlaylist()
    Local $iCount = _GUICtrlListView_GetItemCount($hPlaylist)
    If $iCount = 0 Then Return
    For $i = 0 To $iCount - 1
    _GUICtrlListView_SetItemText($hPlaylist, $i, $i + 1, 0)
    Next
    EndFunc ;==>_EnumPlaylist

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

    Func _ChangeRepeat()
    $fRepeat = Not $fRepeat
    If $fRepeat Then
    GUICtrlSetImage($hPLRepeat, $sIconDir & 'repeat_active0.ico')
    If $fTooltips Then GUICtrlSetTip($hPLRepeat, 'Playlist wiederholen (J)')
    Else
    GUICtrlSetImage($hPLRepeat, $sIconDir & 'repeat0.ico')
    If $fTooltips Then GUICtrlSetTip($hPLRepeat, "Playlist wiederholen (N)")
    EndIf
    If $sAppDir = '' Then FileChangeDir(@ScriptDir)
    IniWrite($sInifile, 'Settings', 'Repeat', $fRepeat)
    EndFunc ;==>_ChangeRepeat

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

    Func _NewEntry()
    $gaDropFiles = StringSplit(GUICtrlRead($hCmdLineInput), @CRLF, 2)
    GUICtrlSetData($hCmdLineInput, '')
    _DropEvent()
    _PlaySound($iPlCount - 1, True)
    EndFunc ;==>_NewEntry

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

    Func _DropEvent()
    Local $aFileList
    GUISetCursor(1, 1, $hPLGui)
    GUIRegisterMsg($WM_DROPFILES, '')
    _GUICtrlListView_BeginUpdate($hPlaylist)
    For $i = 0 To UBound($gaDropFiles) - 1
    If StringInStr(FileGetAttrib($gaDropFiles[$i]), 'D') Then
    $aFileList = _RecursiveFileListToArray($gaDropFiles[$i], '\.mp3\z')
    For $j = 1 To $aFileList[0]
    _AddFileToPlaylist($aFileList[$j])
    Next
    Else
    Switch StringRight($gaDropFiles[$i], 4)
    Case '.m3u'
    $aFileList = StringSplit(FileRead($gaDropFiles[$i]), @CRLF, 1)
    For $j = 1 To $aFileList[0]
    _AddFileToPlaylist($aFileList[$j])
    Next
    Case '.mp3'
    _AddFileToPlaylist($gaDropFiles[$i])
    EndSwitch
    EndIf
    Next
    _GUICtrlListView_EndUpdate($hPlaylist)
    GUIRegisterMsg($WM_DROPFILES, '_WM_DROPFILES')
    _CalcPlaylistInfo()
    GUISetCursor(2, 1, $hPLGui)
    EndFunc ;==>_DropEvent

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

    Func _AddFileToPlaylist($sFilepath)
    If Not FileExists($sFilepath) Then Return
    Local $aID3, $sNewItem
    $aID3 = _ReadID3Tag($sFilepath)
    If Not @error Then
    ReDim $ahPlItem[$iPlCount + 1]
    $sNewItem = $iPlCount + 1 & '|' & $aID3[1][1] & '|' & $aID3[0][1] & '|' & $aID3[4][1] & '|' & $aID3[9][1] & '|' & $sFilepath
    $ahPlItem[$iPlCount] = GUICtrlCreateListViewItem($sNewItem, $hPlaylist)
    $iPlCount += 1
    EndIf
    EndFunc ;==>_AddFileToPlaylist

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

    Func _WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $lParam
    Local $nSize, $pFileName
    Local $nAmt = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', 0xFFFFFFFF, 'ptr', 0, 'int', 255)
    For $i = 0 To $nAmt[0] - 1
    $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)
    ReDim $gaDropFiles[$i + 1]
    $gaDropFiles[$i] = DllStructGetData($pFileName, 1)
    $pFileName = 0
    Next
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_DROPFILES

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

    Func _WM_MOVE($hWnd, $iMsg, $iwParam, $ilParam)
    Local $aGuiPos
    Switch $hWnd
    Case $hGui
    $aGuiPos = WinGetPos($hGui)
    WinMove($hPLGui, '', $aGuiPos[0], $aGuiPos[1] + 220 + $iWinBorder)
    WinMove($hConfigGui, '', $aGuiPos[0] - (320 + $iWinBorder), $aGuiPos[1])
    Case $hPLGui
    $aGuiPos = WinGetPos($hPLGui)
    WinMove($hGui, '', $aGuiPos[0], $aGuiPos[1] - 220 - $iWinBorder)
    WinMove($hConfigGui, '', $aGuiPos[0] - (320 + $iWinBorder), $aGuiPos[1] - 220 - $iWinBorder)
    Case $hConfigGui
    $aGuiPos = WinGetPos($hConfigGui)
    WinMove($hGui, '', $aGuiPos[0] + 320 + $iWinBorder, $aGuiPos[1])
    WinMove($hPLGui, '', $aGuiPos[0] + 320 + $iWinBorder, $aGuiPos[1] + 220 + $iWinBorder)
    EndSwitch
    If Not BitAND(WinGetState($hGui), 16) Then
    $aGuiPos = WinGetPos($hGui)
    If $sAppDir = '' Then FileChangeDir(@ScriptDir)
    IniWrite($sInifile, 'Settings', 'MainPosX', $aGuiPos[0])
    IniWrite($sInifile, 'Settings', 'MainPosY', $aGuiPos[1])
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_MOVE

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

    Func _SetPosition()
    Local $aInfo, $iPercent
    $aInfo = GUIGetCursorInfo($hGui)
    If $aInfo[4] = $hPosition Then
    $iPercent = 100 / 500 * ($aInfo[0] - 50)
    _BASS_ChannelSetPosition($hSoundOpen, $iLength / 100 * $iPercent, $BASS_POS_BYTE)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_SetPosition

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

    Func _ChangeFadeTime()
    $iFadeTime = GUICtrlRead($hCFadeTime)
    If $sAppDir = '' Then FileChangeDir(@ScriptDir)
    IniWrite($sInifile, 'Settings', 'FadeTime', $iFadeTime)
    EndFunc ;==>_ChangeFadeTime

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

    Func _WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $ilParam
    If $hSoundOpen <> -1 Then
    Local $iLevel, $iLeft, $iRight, $iSecs, $iValL, $iValR
    Switch _Timer_GetTimerID($iwParam)
    Case $iTimerVUMeter
    $iPos = _BASS_ChannelGetPosition($hSoundOpen, $BASS_POS_BYTE)
    $iSecs = Int(_BASS_ChannelBytes2Seconds($hSoundOpen, $iPos))
    If $iSeconds > 0 And $iSecs >= ($iSeconds - 1) - $iFadeTime * $fFadeOut Then
    If $iPlayIndex < _GUICtrlListView_GetItemCount($hPlaylist) - 1 Then
    _PlaySound($iPlayIndex + 1)
    Else
    If $fRepeat Then _PlaySound(0)
    EndIf
    EndIf
    If $iSecs <> $iOld Then
    $iOld = $iSecs
    GUICtrlSetData($hDuration, _FormatTime($iSecs, $iSeconds))
    EndIf
    GUICtrlSetData($hPosition, Int(100 / $iLength * $iPos))
    $iLevel = _BASS_ChannelGetLevel($hSoundOpen)
    $iLeft = _LoWord($iLevel)
    If $iLeft > 32766 Then $iLeft = 0
    $iRight = _HiWord($iLevel)
    If $iRight > 32766 Then $iRight = 0
    If $iLeft > $iPeakL Then $iPeakL = $iLeft
    If $iRight > $iPeakR Then $iPeakR = $iRight
    $iValL = $iWidth / $iHigh * $iPeakL
    If $iValL > $iWidth Then $iValL = $iWidth
    $iValR = $iWidth / $iHigh * $iPeakR
    If $iValR > $iWidth Then $iValR = $iWidth
    _GDIPlus_GraphicsFillRect($hBuffer, 1, 3, $iValL, 10, $hBrushGreen)
    _GDIPlus_GraphicsFillRect($hBuffer, 1, 30, $iValR, 10, $hBrushGreen)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 50, 110, $iWidth, 44)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 50, 110, $iWidth, 44)
    _GDIPlus_GraphicsFillRect($hBuffer, 1, 3, $iValL, 10, $hBackgr)
    _GDIPlus_GraphicsFillRect($hBuffer, 1, 30, $iValR, 10, $hBackgr)
    $iPeakL -= 1200
    $iPeakR -= 1200
    EndSwitch
    Else
    _GDIPlus_GraphicsFillRect($hBuffer, 1, 3, $iWidth, 10, $hBackgr)
    _GDIPlus_GraphicsFillRect($hBuffer, 1, 30, $iWidth, 10, $hBackgr)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 50, 110, $iWidth, 44)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_TIMER

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

    Func _FadeOut()
    If Not $fFadeOut Then $iFadeVol = 1
    $iFadeVol -= 1
    _BASS_ChannelSetVolume($hSoundFade, $iFadeVol)
    If $iFadeVol = 0 Then
    AdlibUnRegister('_FadeOut')
    _BASS_ChannelStop($hSoundFade)
    _BASS_StreamFree($hSoundFade)
    $iFadeVol = 100
    $hSoundFade = -1
    EndIf
    EndFunc ;==>_FadeOut

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

    Func _StartSound()
    Local $aSelect, $iSelect
    Local $iCount = _GUICtrlListView_GetItemCount($hPlaylist)
    If $iCount = 0 Then Return
    $aSelect = _GUICtrlListView_GetSelectedIndices($hPlaylist, True)
    If $aSelect[0] = 0 Then
    $iSelect = 0
    Else
    $iSelect = $aSelect[1]
    EndIf
    _PlaySound($iSelect, True)
    EndFunc ;==>_StartSound

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $iCode, $tNMHDR, $tInfo, $iIndex
    If $hWnd = $hPLGui Then
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $iCode = DllStructGetData($tNMHDR, 'Code')
    Switch $iCode
    Case $NM_DBLCLK
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $iIndex = DllStructGetData($tInfo, 'Index')
    _PlaySound($iIndex, True)
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _PlaySound($iSelect, $fNoFade = False)
    Local $sPath
    If $iPlayIndex <> -1 Then GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xDDDDDD)
    $iPlayIndex = $iSelect
    GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xFFBB55)
    $sPath = _GUICtrlListView_GetItemText($hPlaylist, $iSelect, 5)
    GUICtrlSetImage($hPlay, $sIconDir & 'pause0.ico')
    GUICtrlSetOnEvent($hPlay, '_PauseSound')
    If $hSoundOpen <> -1 Then
    If $iFadeVol < 100 Then _BASS_ChannelStop($hSoundFade)
    $hSoundFade = $hSoundOpen
    $fPause = False
    If $fNoFade Then $iFadeVol = 1
    AdlibRegister('_FadeOut', 50)
    EndIf
    $hSoundOpen = _BASS_StreamCreateFile(False, $sPath, 0, 0, BitOR($BASS_STREAM_PRESCAN, $BASS_STREAM_AUTOFREE))
    _BASS_ChannelPlay($hSoundOpen, 0)
    $iLength = _BASS_ChannelGetLength($hSoundOpen, $BASS_POS_BYTE)
    $iSeconds = _BASS_ChannelBytes2Seconds($hSoundOpen, $iLength)
    GUICtrlSetData($hDuration, _FormatTime(0, $iSeconds))
    $sID3Tags = _Bass_Tags_Read($hSoundOpen, '%IFV2(%ARTI,%ARTI,no Artist) - %IFV2(%TITL,%TITL,no Title)')
    $sID3Tags = StringReplace($sID3Tags, '&', '&&')
    GUICtrlSetData($hLabel, $sID3Tags)
    $sID3Tags = StringFormat('%32s', ' ') & $sID3Tags
    _GUICtrlListView_EnsureVisible($hPlaylist, $iPlayIndex)
    EndFunc ;==>_PlaySound

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

    Func _PauseSound()
    Switch $fPause
    Case True
    _BASS_ChannelPlay($hSoundOpen, 0)
    GUICtrlSetImage($hPlay, $sIconDir & 'pause0.ico')
    Case False
    _BASS_ChannelPause($hSoundOpen)
    GUICtrlSetImage($hPlay, $sIconDir & 'pause_active.ico')
    EndSwitch
    $fPause = Not $fPause
    EndFunc ;==>_PauseSound

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

    Func _StopSound()
    If $hSoundOpen <> -1 Then
    _BASS_ChannelStop($hSoundOpen)
    _BASS_StreamFree($hSoundOpen)
    $hSoundOpen = -1
    EndIf
    If $iPlayIndex <> -1 Then GUICtrlSetBkColor($ahPlItem[$iPlayIndex], 0xDDDDDD)
    $iPlayIndex = -1
    $fPause = False
    $sID3Tags = ''
    GUICtrlSetData($hLabel, '')
    GUICtrlSetImage($hPlay, $sIconDir & 'play0.ico')
    GUICtrlSetOnEvent($hPlay, '_StartSound')
    EndFunc ;==>_StopSound

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

    Func _PrevSound()
    Local $iCount = _GUICtrlListView_GetItemCount($hPlaylist)
    If $fRepeat And $iPlayIndex = 0 Then Return _PlaySound($iCount - 1, True)
    If $iCount = 0 Or $iPlayIndex = 0 Then Return
    _PlaySound($iPlayIndex - 1, True)
    EndFunc ;==>_PrevSound

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

    Func _NextSound()
    Local $iCount = _GUICtrlListView_GetItemCount($hPlaylist)
    If $fRepeat And $iPlayIndex = $iCount - 1 Then Return _PlaySound(0, True)
    If $iCount = 0 Or $iPlayIndex >= $iCount - 1 Then Return
    _PlaySound($iPlayIndex + 1, True)
    EndFunc ;==>_NextSound

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

    Func _ScrollTitle()
    $iStart += 1
    If $iStart > StringLen($sID3Tags) Then $iStart = 1
    WinSetTitle($hGui, '', StringMid($sID3Tags, $iStart, 32))
    EndFunc ;==>_ScrollTitle

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

    Func _FormatTime($iSecs, $iAllSecs)
    Local $iMins, $iAllMins
    $iMins = Int($iSecs / 60)
    $iSecs = Mod($iSecs, 60)
    $iAllMins = Int($iAllSecs / 60)
    $iAllSecs = Mod($iAllSecs, 60)
    Return StringFormat('%02i:%02i / %02i:%02i', $iMins, $iSecs, $iAllMins, $iAllSecs)
    EndFunc ;==>_FormatTime

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

    Func _RegFiletype()
    If Not @Compiled Then Return MsgBox(48 + 262144, $sTitle, 'Fehler! Script muss kompiliert sein!', 0, $hConfigGui)
    Local $sHKCUSoftware, $sFileType, $sFileTypeName, $sFileTypeDescriptopn, $sFileTypeIcon, $sFileTypeOpenCommand, $msg
    $sHKCUSoftware = 'HKCU\Software\'
    $sFileTypeOpenCommand = Chr(34) & @ScriptFullPath & Chr(34) & ' "%1"'
    ; Register MP3-Files .mp3
    $sFileType = '.mp3'
    $sFileTypeName = 'StarplayerMP3'
    $sFileTypeDescriptopn = 'Starplayer MP3 Audiodatei'
    $sFileTypeIcon = @ScriptDir & '\icons\mp3.ico,0'
    RegWrite($sHKCUSoftware & 'Microsoft\Windows\CurrentVersion\Explorer\FileExts\' & $sFileType, 'Progid', 'REG_SZ', $sFileTypeName)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileType, '', 'REG_SZ', $sFileTypeName)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileType, 'Content Type', 'REG_SZ', 'audio/mpeg')
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileType, 'PerceivedType', 'REG_SZ', 'audio')
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileTypeName, '', 'REG_SZ', $sFileTypeDescriptopn)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileTypeName & '\Defaulticon', '', 'REG_SZ', $sFileTypeIcon)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileTypeName & '\Shell\open\command', '', 'REG_SZ', $sFileTypeOpenCommand)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileTypeName & '\Shell\play\command', '', 'REG_SZ', $sFileTypeOpenCommand)
    ; Register Playlist .m3u
    $sFileType = '.m3u'
    $sFileTypeName = 'StarplayerM3U'
    $sFileTypeDescriptopn = 'Starplayer MP3 Playlist'
    $sFileTypeIcon = @ScriptDir & '\icons\m3u.ico,0'
    RegWrite($sHKCUSoftware & 'Microsoft\Windows\CurrentVersion\Explorer\FileExts\' & $sFileType, 'Progid', 'REG_SZ', $sFileTypeName)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileType, '', 'REG_SZ', $sFileTypeName)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileType, 'Content Type', 'REG_SZ', 'audio/mpegurl')
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileType, 'PerceivedType', 'REG_SZ', 'audio')
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileTypeName, '', 'REG_SZ', $sFileTypeDescriptopn)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileTypeName & '\Defaulticon', '', 'REG_SZ', $sFileTypeIcon)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileTypeName & '\Shell\open\command', '', 'REG_SZ', $sFileTypeOpenCommand)
    RegWrite($sHKCUSoftware & 'Classes\' & $sFileTypeName & '\Shell\play\command', '', 'REG_SZ', $sFileTypeOpenCommand)
    $msg = 'Die Dateien ".mp3" and ".m3u" sind jetzt verknüpft nit:' & @CRLF
    $msg &= 'Starplayer ("' & @ScriptFullPath & '")'
    MsgBox(64 + 262144, $sTitle, $msg, 0, $hConfigGui)
    EndFunc ;==>_RegFiletype

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

    Func _SwitchOnTop()
    $fOnTop = Not $fOnTop
    Switch $fOnTop
    Case True
    GUICtrlSetState($hCOnTop, $GUI_CHECKED)
    WinSetOnTop($hGui, '', 1)
    Case False
    GUICtrlSetState($hCOnTop, $GUI_UNCHECKED)
    WinSetOnTop($hGui, '', 0)
    EndSwitch
    If $sAppDir = '' Then FileChangeDir(@ScriptDir)
    IniWrite($sInifile, 'Settings', 'OnTop', $fOnTop)
    EndFunc ;==>_SwitchOnTop

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

    Func _SwitchFadeOut()
    $fFadeOut = Not $fFadeOut
    Switch $fFadeOut
    Case True
    GUICtrlSetState($hCFadeout, $GUI_CHECKED)
    GUICtrlSetState($hCFadeTime, $GUI_ENABLE)
    Case False
    GUICtrlSetState($hCFadeout, $GUI_UNCHECKED)
    GUICtrlSetState($hCFadeTime, $GUI_DISABLE)
    EndSwitch
    If $sAppDir = '' Then FileChangeDir(@ScriptDir)
    IniWrite($sInifile, 'Settings', 'FadeOut', $fFadeOut)
    EndFunc ;==>_SwitchFadeOut

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

    Func _SwitchSoundinfos()
    $fSoundinfos = Not $fSoundinfos
    Switch $fSoundinfos
    Case True
    GUICtrlSetState($hCSoundinfos, $GUI_CHECKED)
    AdlibRegister('_ScrollTitle', 100)
    Case False
    GUICtrlSetState($hCSoundinfos, $GUI_UNCHECKED)
    AdlibUnRegister('_ScrollTitle')
    WinSetTitle($hGui, '', $sTitle)
    EndSwitch
    If $sAppDir = '' Then FileChangeDir(@ScriptDir)
    IniWrite($sInifile, 'Settings', 'Soundinfos', $fSoundinfos)
    EndFunc ;==>_SwitchSoundinfos

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

    Func _SwitchTooltips()
    $fTooltips = Not $fTooltips
    Switch $fTooltips
    Case True
    GUICtrlSetState($hCTooltips, $GUI_CHECKED)
    GUICtrlSetTip($hMin, 'Starplayer minimieren')
    GUICtrlSetTip($hClose, 'Starplayer beenden')
    GUICtrlSetTip($hConfig, 'Öffne/Schließe Optionen')
    GUICtrlSetTip($hPLShow, 'Öffne/Schließe Playlist')
    GUICtrlSetTip($hPLUp, 'Gewählter Titel hoch')
    GUICtrlSetTip($hPLDown, 'Gewählter Titel runter')
    GUICtrlSetTip($hPLNew, 'Neue Playlist')
    GUICtrlSetTip($hPLLoad, 'Öffne Playlist')
    GUICtrlSetTip($hPLSave, 'Playlist Speicheren')
    GUICtrlSetTip($hPLExport, 'Playlistdateien in einen Ordner exportieren')
    GUICtrlSetTip($hPLAdd, 'MP3 zur Playlist hinzufügen')
    GUICtrlSetTip($hPLDel, 'Eintrag aus der Playlist entfernen')
    GUICtrlSetTip($hPLRandom, 'Playlist Zufalls-Ordner')
    If $fRepeat Then
    GUICtrlSetTip($hPLRepeat, 'Playlist wiederholen (J)')
    Else
    GUICtrlSetTip($hPLRepeat, "Playlist wiederholen (N)")
    EndIf
    Case False
    GUICtrlSetState($hCTooltips, $GUI_UNCHECKED)
    GUICtrlSetTip($hMin, '')
    GUICtrlSetTip($hClose, '')
    GUICtrlSetTip($hConfig, '')
    GUICtrlSetTip($hPLShow, '')
    GUICtrlSetTip($hPLUp, '')
    GUICtrlSetTip($hPLDown, '')
    GUICtrlSetTip($hPLNew, '')
    GUICtrlSetTip($hPLLoad, '')
    GUICtrlSetTip($hPLSave, '')
    GUICtrlSetTip($hPLExport, '')
    GUICtrlSetTip($hPLAdd, '')
    GUICtrlSetTip($hPLDel, '')
    GUICtrlSetTip($hPLRandom, '')
    GUICtrlSetTip($hPLRepeat, '')
    EndSwitch
    If $sAppDir = '' Then FileChangeDir(@ScriptDir)
    IniWrite($sInifile, 'Settings', 'Tooltips', $fTooltips)
    EndFunc ;==>_SwitchTooltips

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

    Func _SwitchInifile()
    Switch BitAND(GUICtrlRead($hCStickVersion), $GUI_CHECKED) = $GUI_CHECKED
    Case True
    $sAppDir = ''
    GUICtrlSetState($hCRegister, $GUI_DISABLE)
    Case False
    $sAppDir = @AppDataDir & '\StarplayerV3\'
    GUICtrlSetState($hCRegister, $GUI_ENABLE)
    EndSwitch
    $sInifile = $sAppDir & 'Starplayer.ini'
    If Not IniWrite($sInifile, 'Settings', 'AppDir', $sAppDir) Then
    GUICtrlSetState($hCStickVersion, $GUI_UNCHECKED)
    $sAppDir = @AppDataDir & '\StarplayerV3\'
    $sInifile = $sAppDir & 'Starplayer.ini'
    GUICtrlSetState($hCRegister, $GUI_ENABLE)
    MsgBox(48 + 262144, $sTitle, 'Schreib-Zugriff verweigert!' & @CRLF & "Einstellungsdatei kann nicht geschrieben werden!.", 0, $hConfigGui)
    EndIf
    EndFunc ;==>_SwitchInifile

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

    Func _CalcPlaylistInfo()
    Local $iPlSize, $iPlDuration, $aTime, $iLVCount = _GUICtrlListView_GetItemCount($hPlaylist)
    If $iLVCount > 0 Then
    For $i = 0 To $iLVCount - 1
    $aTime = StringSplit(_GUICtrlListView_GetItemText($hPlaylist, $i, 3), ':', 2)
    If UBound($aTime) > 1 Then $iPlDuration += _TimeToTicks($aTime[0], $aTime[1], $aTime[2])
    $iPlSize += FileGetSize(_GUICtrlListView_GetItemText($hPlaylist, $i, 5))
    Next
    _GUICtrlListView_SetColumnWidth($hPlaylist, 5, $LVSCW_AUTOSIZE)
    EndIf
    GUICtrlSetData($hPLStatus1, ' ' & $iLVCount & ' Datei' & _Iif($iLVCount <> 1, 'en', '') & ' (' & _ByteAutoSize($iPlSize, 2, 0, False) & ')')
    GUICtrlSetData($hPLStatus2, ' Insgesammte Playlist-Laufzeit = ' & _NewTicksToTime($iPlDuration, True))
    EndFunc ;==>_CalcPlaylistInfo

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

    Func _Exit()
    _Timer_KillAllTimers($hGui)
    AdlibUnRegister('_ScrollTitle')
    AdlibUnRegister('_HoverEffect')
    If $hSoundFade <> -1 Then _BASS_StreamFree($hSoundFade)
    If $hSoundOpen <> -1 Then _BASS_StreamFree($hSoundOpen)
    _BASS_Free()
    _GDIPlus_BrushDispose($hBackgr)
    _GDIPlus_BrushDispose($hBrushGreen)
    _GDIPlus_PenDispose($hPenGrey)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_GraphicsDispose($hBuffer)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

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

    Func _HoverEffect()
    Local $aInfo, $aPos, $hInfo = $hGui
    $aInfo = GUIGetCursorInfo($hGui)
    If BitAND(WinGetState($hPLGui), 2) Then
    If $aInfo[0] >= 0 And $aInfo[0] <= 560 Then
    Select
    Case $aInfo[1] >= 0 And $aInfo[1] < 220
    If Not BitAND(WinGetState($hGui), 8) Then _WinAPI_SetFocus($hGui)
    $hInfo = $hGui
    Case $aInfo[1] > 220 And $aInfo[1] < 600
    If Not BitAND(WinGetState($hPLGui), 8) Then _WinAPI_SetFocus($hPLGui)
    $hInfo = $hPLGui
    EndSelect
    EndIf
    EndIf
    $aInfo = GUIGetCursorInfo($hInfo)
    If $aInfo[4] = $iHover Then Return
    Switch $iHover
    Case $hConfig
    If BitAND(WinGetState($hConfigGui), 2) Then
    GUICtrlSetImage($hConfig, $sIconDir & 'config_open0.ico')
    Else
    GUICtrlSetImage($hConfig, $sIconDir & 'config_close0.ico')
    EndIf
    Case $hMin
    GUICtrlSetImage($hMin, $sIconDir & 'min0.ico')
    Case $hClose
    GUICtrlSetImage($hClose, $sIconDir & 'close0.ico')
    Case $hPrev
    GUICtrlSetImage($hPrev, $sIconDir & 'prev0.ico')
    Case $hStop
    GUICtrlSetImage($hStop, $sIconDir & 'stop0.ico')
    Case $hPlay
    If Not $fPause Then
    If $hSoundOpen <> -1 Then
    GUICtrlSetImage($hPlay, $sIconDir & 'pause0.ico')
    Else
    GUICtrlSetImage($hPlay, $sIconDir & 'play0.ico')
    EndIf
    EndIf
    Case $hNext
    GUICtrlSetImage($hNext, $sIconDir & 'next0.ico')
    Case $hPLShow
    GUICtrlSetImage($hPLShow, $sIconDir & 'playlist0.ico')
    Case $hPLUp
    GUICtrlSetImage($hPLUp, $sIconDir & 'up0.ico')
    Case $hPLDown
    GUICtrlSetImage($hPLDown, $sIconDir & 'down0.ico')
    Case $hPLNew
    GUICtrlSetImage($hPLNew, $sIconDir & 'playlistnew0.ico')
    Case $hPLLoad
    GUICtrlSetImage($hPLLoad, $sIconDir & 'playlistopen0.ico')
    Case $hPLSave
    GUICtrlSetImage($hPLSave, $sIconDir & 'playlistsave0.ico')
    Case $hPLExport
    GUICtrlSetImage($hPLExport, $sIconDir & 'export0.ico')
    Case $hPLAdd
    GUICtrlSetImage($hPLAdd, $sIconDir & 'playlistadd0.ico')
    Case $hPLDel
    GUICtrlSetImage($hPLDel, $sIconDir & 'playlistdel0.ico')
    Case $hPLRandom
    GUICtrlSetImage($hPLRandom, $sIconDir & 'random0.ico')
    Case $hPLRepeat
    If $fRepeat Then
    GUICtrlSetImage($hPLRepeat, $sIconDir & 'repeat_active0.ico')
    Else
    GUICtrlSetImage($hPLRepeat, $sIconDir & 'repeat0.ico')
    EndIf
    EndSwitch
    $iHover = $aInfo[4]
    Switch $iHover
    Case $hConfig
    If BitAND(WinGetState($hConfigGui), 2) Then
    GUICtrlSetImage($hConfig, $sIconDir & 'config_open1.ico')
    Else
    GUICtrlSetImage($hConfig, $sIconDir & 'config_close1.ico')
    EndIf
    Case $hMin
    GUICtrlSetImage($hMin, $sIconDir & 'min1.ico')
    Case $hClose
    GUICtrlSetImage($hClose, $sIconDir & 'close1.ico')
    Case $hPrev
    GUICtrlSetImage($hPrev, $sIconDir & 'prev1.ico')
    Case $hStop
    GUICtrlSetImage($hStop, $sIconDir & 'stop1.ico')
    Case $hPlay
    If Not $fPause Then
    If $hSoundOpen <> -1 Then
    GUICtrlSetImage($hPlay, $sIconDir & 'pause1.ico')
    Else
    GUICtrlSetImage($hPlay, $sIconDir & 'play1.ico')
    EndIf
    EndIf
    Case $hNext
    GUICtrlSetImage($hNext, $sIconDir & 'next1.ico')
    Case $hPLShow
    GUICtrlSetImage($hPLShow, $sIconDir & 'playlist1.ico')
    Case $hPLUp
    GUICtrlSetImage($hPLUp, $sIconDir & 'up1.ico')
    Case $hPLDown
    GUICtrlSetImage($hPLDown, $sIconDir & 'down1.ico')
    Case $hPLNew
    GUICtrlSetImage($hPLNew, $sIconDir & 'playlistnew1.ico')
    Case $hPLLoad
    GUICtrlSetImage($hPLLoad, $sIconDir & 'playlistopen1.ico')
    Case $hPLSave
    GUICtrlSetImage($hPLSave, $sIconDir & 'playlistsave1.ico')
    Case $hPLExport
    GUICtrlSetImage($hPLExport, $sIconDir & 'export1.ico')
    Case $hPLAdd
    GUICtrlSetImage($hPLAdd, $sIconDir & 'playlistadd1.ico')
    Case $hPLDel
    GUICtrlSetImage($hPLDel, $sIconDir & 'playlistdel1.ico')
    Case $hPLRandom
    GUICtrlSetImage($hPLRandom, $sIconDir & 'random1.ico')
    Case $hPLRepeat
    If $fRepeat Then
    GUICtrlSetImage($hPLRepeat, $sIconDir & 'repeat_active1.ico')
    Else
    GUICtrlSetImage($hPLRepeat, $sIconDir & 'repeat1.ico')
    EndIf
    Case Else
    $iHover = -1
    EndSwitch
    EndFunc ;==>_HoverEffect

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

    Func _NewTicksToTime($iTicks, $iStringFormat = False)
    Local $iDays, $iHours, $iMins, $iSecs = Int($iTicks / 1000)
    $iDays = Int($iSecs / 86400)
    $iSecs = Mod($iSecs, 86400)
    $iHours = Int($iSecs / 3600)
    $iSecs = Mod($iSecs, 3600)
    $iMins = Int($iSecs / 60)
    $iSecs = Mod($iSecs, 60)
    If $iStringFormat Then Return ' ' & $iDays & ' Tag' & _Iif($iDays <> 1, 'e', '') & StringFormat(' %02i:%02i:%02i', $iHours, $iMins, $iSecs)
    Local $aTime[4] = [$iDays, $iHours, $iMins, $iSecs]
    Return $aTime
    EndFunc ;==>_NewTicksToTime

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

    Func _ByteAutoSize($iSize, $iRound = 2, $iFormat = 0, $bThousands = True)
    Local $aSize[4] = [' Byte', ' KByte', ' MByte', ' GByte'], $sReturn
    If $iFormat < 0 Or $iFormat > 4 Then $iFormat = 0
    If $iRound < 0 Or $iRound > 8 Then $iRound = 2
    If Not IsBool($bThousands) Then $bThousands = False
    $iSize = Abs($iSize)
    If $iFormat = 0 Then
    For $i = 30 To 0 Step -10
    If $iSize > (2 ^ $i) Then
    $iFormat = $i / 10 + 1
    ExitLoop
    EndIf
    Next
    EndIf
    If $iFormat = 0 Then $iFormat = 1
    $sReturn = StringFormat('%.' & $iRound & 'f', Round($iSize / (2 ^ (($iFormat - 1) * 10)), $iRound))
    If $bThousands Then $sReturn = _StringAddThousandsSep($sReturn, ',', '.')
    Return $sReturn & $aSize[$iFormat - 1]
    EndFunc ;==>_ByteAutoSize

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _StringAddThousandsSep
    ; Description ...: Returns the original numbered string with the Thousands delimiter inserted.
    ; Syntax.........: _StringAddThousandsSep($sString[, $sThousands = -1[, $sDecimal = -1]])
    ; Parameters ....: $sString - The string to be converted.
    ; $sThousands - Optional: The Thousands delimiter
    ; $sDecimal - Optional: The decimal delimiter
    ; Return values .: Success - The string with Thousands delimiter added.
    ; Author ........: SmOke_N (orignal _StringAddComma
    ; Modified.......: Valik (complete re-write, new function name)
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......; Yes
    ; ===============================================================================================================================
    Func _StringAddThousandsSep($sString, $sThousands = -1, $sDecimal = -1)
    Local $sResult = "" ; Force string
    Local $rKey = "HKCU\Control Panel\International"
    If $sDecimal = -1 Then $sDecimal = RegRead($rKey, "sDecimal")
    If $sThousands = -1 Then $sThousands = RegRead($rKey, "sThousand")
    Local $aNumber = StringRegExp($sString, "(\D?\d+)\D?(\d*)", 1) ; This one works for negatives.
    If UBound($aNumber) = 2 Then
    Local $sLeft = $aNumber[0]
    While StringLen($sLeft)
    $sResult = $sThousands & StringRight($sLeft, 3) & $sResult
    $sLeft = StringTrimRight($sLeft, 3)
    WEnd
    $sResult = StringTrimLeft($sResult, StringLen($sThousands)) ; Strip leading thousands separator
    If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1]
    EndIf
    Return $sResult
    EndFunc ;==>_StringAddThousandsSep

    [/autoit]
  • @DjBlume: Das bringt mich gerade auf eine Idee...

    Oscar : hast du schon mal daran gedacht, Sprachdateien einzubauen?

  • bei manchen hats bei mir ne halbe stunde angezeigt obwohl sie nur ca 3 minuten lang waren

    wie finde ich raus was das für eine codierung ist? dann kann ichs dir sagen

    • Offizieller Beitrag

    @Polaris32: Die Codierung findest Du in der Spalte Bitrate. Bitte mal posten, was in der Spalte steht.

    @DjBlume & progandy: Braucht man einen MP3-Player unbedingt in deutsch? Ist doch eigentlich selbsterklärend, oder? Naja, mal sehen, was die anderen so sagen. Eventuell mache ich dann noch Sprachdateien, obwohl das schon blöd wird, wegen der Breite der Label in der GUI. :S

  • @DjBlume & progandy: Braucht man einen MP3-Player unbedingt in deutsch? Ist doch eigentlich selbsterklärend, oder? Naja, mal sehen, was die anderen so sagen. Eventuell mache ich dann noch Sprachdateien, obwohl das schon blöd wird, wegen der Breite der Label in der GUI. :S


    Mach die Label einfach so breit wie deine GUI es erlaubt, und wer längere Texte übersetzen will, hat Pech ^^
    Ich brauche es auch nicht, aber für die nicht oder nur ungern englisch sprechenden (ja die gibt es noch) wäre es ganz praktisch.

  • ok da steht bei einem bei dems mir ne 1/4 stunde anzeigt CBR 8 kbit/s

    aber wenn man auf die datei rechtsklickt und dann auf eigenschaften klickt kommt auch 15 minuten und ein paar sekunden kann es sein das etwas in der datei nicht stimmt?

    EDIT: solangsam hab ich den verdacht das der fehler bei sämtlichen von youtube geladenen mp3s auftritt. sind bei mir selten da qualität bei youtube nicht existiert. sind alle cbr kodiert

    Einmal editiert, zuletzt von Polaris32 (22. Juli 2010 um 20:52)

  • hab das auf die schnelle nicht mehr gefunden

    hab das erste geschickt bei dem es was falsches angezeigt hat

    • Offizieller Beitrag

    Ich habe Dir schon geantwortet (PN).
    Bei der Datei handelt es sich nicht um eine MP3-Datei (MPEG1 Layer 3), sondern die ist mit MPEG2.5 Layer II codiert. Da hat meine Funktion noch Probleme mit dem ermitteln der Laufzeit.
    Das ist schon eine MP3-Datei, aber mit falschem ID3-Tag-Header. Sowas hatte ich in meiner Funktion nicht beachtet. Ist jetzt aber behoben und wird in der nächsten Version vom Starplayer dabei sein.

  • Für das Crossfading würde ich dir _BASS_ChannelSlideAttribute vorschlagen. Ich denke, so in etwa könnte man das aufziehen:

    Spoiler anzeigen
    [autoit]

    #include<BASS\BASS\BASS.au3>
    _BASS_Startup("BASS\BASS\BASS.dll")
    _Bass_Init(0)

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

    Global $giVolumePercent = 80
    Global $iSlideDuration = 3000 ; Millisekunden

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

    $sMP3_1 = "D:\test.mp3"
    $sMP3_2 = "D:\test2.mp3"

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

    Dim $hStream = _BASS_StreamCreateFile(0, $sMP3_1, 0, 0,0)
    _BASS_ChannelSetVolume($hStream, $giVolumePercent)
    _BASS_ChannelPlay($hStream, 1)
    OnAutoItExitRegister("_Free")

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

    ; Schleifen nur zum testen, nicht realistisch
    While 1
    Sleep(100)
    if _CheckFade($hStream, $iSlideDuration) Then
    _BASS_CrossFade($hStream, $sMP3_2, $iSlideDuration, $giVolumePercent)
    ExitLoop
    EndIf
    WEnd
    While 1
    Sleep(100)
    WEnd

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

    Func _CheckFade($hStream, $iDuration)
    Local $pos = _BASS_ChannelBytes2Seconds($hStream, _BASS_ChannelGetPosition($hStream, $BASS_POS_BYTE))
    Local $len = _BASS_ChannelBytes2Seconds($hStream, _BASS_ChannelGetLength($hStream, $BASS_POS_BYTE))
    If (($len - $pos)*1000) > ($iDuration) Then Return False ; Noch zu früh zum faden
    Return True
    EndFunc

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

    Func _Free()
    _BASS_ChannelStop($hStream)
    _BASS_StreamFree($hStream)
    _BASS_Free()
    EndFunc

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

    ; $hStream - Stream-Handle, wird mit neuem ersetzt
    ; $sNewFile - Neue Datei
    ; $iDuration - Crossfadelänge
    ; $iMaxVolume - Ziel-Lautstärke beim Einfaden 0...100, Standard 100
    Func _BASS_CrossFade(ByRef $hStream, $sNewFile, $iDuration, $iMaxVolume=100)
    ; Author: ProgAndy

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

    Local $hNewStream = _BASS_StreamCreateFile(0, $sNewFile, 0, 0,0)
    _BASS_ChannelSetVolume($hNewStream, 0)
    _BASS_ChannelStop($hNewStream)

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

    _BASS_ChannelFlags($hStream, $BASS_STREAM_AUTOFREE, BitOR($BASS_STREAM_AUTOFREE, 0) )
    _BASS_ChannelPlay($hStream, 0)
    _BASS_ChannelPlay($hNewStream, 1)
    _BASS_ChannelSlideAttribute($hStream, $BASS_ATTRIB_VOL, 0, $iDuration)
    _BASS_ChannelSlideAttribute($hNewStream, $BASS_ATTRIB_VOL, $iMaxVolume/100, $iDuration)
    $hStream = $hNewStream
    Return True ; Fehlerbehandlung fehlt
    EndFunc

    [/autoit]


    Edit: Getestet und gefixt, inkl. Beispiel

    Einmal editiert, zuletzt von progandy (23. Juli 2010 um 12:22)

  • Ist echt super geworden.
    Du hast aber eine Zeile vergessen, damit das alte Handle nach dem Faden freigegeben wird. Sonst sammeln sich lauter offene Handles in der BASS.dll an.

    [autoit]

    _BASS_ChannelFlags($hStream, $BASS_STREAM_AUTOFREE, BitOR($BASS_STREAM_AUTOFREE, $BASS_SAMPLE_LOOP) ) ; wenn gestoppt automatisch freigeben

    [/autoit]


    Edit: Oh, du setzt es ja gleich beim erstellen ;)