iTunes Lyrics Scroller

  • Hallo,

    hier mal ein kleines Skript, was ich vor längerer Zeit mal geschrieben hatte. Damit kann man die in MP3 eingefügten Lyrics mithilfe von iTunes auslesen und zum Track synchronisieren. Man muss es nur einmal synchronisieren, dann wird es als INI-Datei gespeichert und man beim nächsten Mal mitsingen oder was auch immer. :D

    Einfach auf den einen Button klicken und es speichert die Zeit, wann es um eine Zeile scrollen soll.

    Spoiler anzeigen
    [autoit]

    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=Text Document.ico
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Description=iTunes lyric autoscroller
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=Copyright © 2012 Burak Keskin
    #AutoIt3Wrapper_Res_Field=E-Mail|[email='mail@burakkeskin.de'][/email]
    #AutoIt3Wrapper_Res_Field=CompanyName|1.0.0.0
    #AutoIt3Wrapper_Res_Field=InternalName|LySc
    #AutoIt3Wrapper_Res_Field=Comments|
    #AutoIt3Wrapper_Res_Field=OriginalFilename|lysc.exe
    #AutoIt3Wrapper_Res_Field=ProductName|Lyric Scroller
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.8.1
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <include/iTunes.au3>
    #include <Array.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIEdit.au3>
    #include <ButtonConstants.au3>
    #include <GUIRichEdit.au3>

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

    Opt('GUIOnEventMode', 1)

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

    Local $aOldSongInfo[3] = ['', '', '']
    Local $sTimer = 0
    Local $iCount = 1
    Local $bLyricExists = False
    Local $sScrollTimer = 0
    Local $aScrollEvents = 0
    Local $iScrollCounter = 1
    Local $iTimerLast = 0

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

    _iTunes_Start()

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

    $hGUI = GUICreate("LySc © 2012 Burak Keskin", 720, 188)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_closeProgram')
    $hLyricBox = _GUICtrlRichEdit_Create($hGUI, '', 8, 8, 705, 135, BitOR($ES_MULTILINE, $ES_CENTER, $WS_VSCROLL, $ES_READONLY))

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

    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
    GUICtrlSetData(-1, "Please wait...")
    $hScroll = GUICtrlCreateButton("Lyric autoscroll", 616, 150, 99, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetFont(-1, 10, 400, 0, "Calibri")
    GUICtrlSetOnEvent(-1, '_LyricScrollSet')
    $hStatus = GUICtrlCreateLabel("No autoscoll information found!", 8, 160, 250, 19)
    GUICtrlSetFont(-1, 10, 400, 0, "Calibri")
    GUISetState(@SW_SHOW)

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

    Local $sMark = GUICreate('', 687, 20, 8, 65, $WS_POPUP, $WS_EX_MDICHILD, $hGUI)
    GUISetBkColor(0x00FF00, $sMark)
    WinSetTrans($sMark, '', 80)
    GUISetState(@SW_SHOW, $sMark)

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

    _setCurrentSong()

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

    AdlibRegister('_setCurrentSong', 500)
    AdlibRegister('_autoScroll', 10)

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

    While 1
    Sleep(50)
    WEnd

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

    Func _autoScroll()
    If Not $bLyricExists Then Return
    If IsArray($aScrollEvents) Then
    If $aScrollEvents[0][0] < $iScrollCounter Then Return
    If Round(TimerDiff($sScrollTimer), 0) >= $aScrollEvents[$iScrollCounter][1] Then
    _GUICtrlEdit_Scroll($hLyricBox, 1)
    $iScrollCounter += 1
    EndIf
    Else
    $aScrollEvents = IniReadSection(@ScriptDir & '\lyrics\' & _createFileName($aOldSongInfo[0] & ' - ' & $aOldSongInfo[1] & ' - ' & $aOldSongInfo[2]) & '.ini', 'events')
    EndIf
    EndFunc ;==>_autoScroll

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

    Func _LyricScrollSet()
    _GUICtrlEdit_Scroll($hLyricBox, 1)
    Local $iTimer = Round(TimerDiff($sTimer), 0)

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

    If ($iTimer - $iTimerLast) <= 300 Then ;Doppelklick bedeutet Zeile überspringen!
    $iTimer = $iTimerLast
    EndIf

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

    IniWrite(@ScriptDir & '\lyrics\' & _createFileName($aOldSongInfo[0] & ' - ' & $aOldSongInfo[1] & ' - ' & $aOldSongInfo[2]) & '.ini', 'events', 'event' & $iCount, $iTimer)
    $iTimerLast = $iTimer
    $iCount += 1
    EndFunc ;==>_LyricScrollSet

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

    Func _createFileName($sName)
    $sName = StringReplace($sName, '\', '')
    $sName = StringReplace($sName, '/', '')
    $sName = StringReplace($sName, ':', '')
    $sName = StringReplace($sName, '*', '')
    $sName = StringReplace($sName, '?', '')
    $sName = StringReplace($sName, '"', '')
    $sName = StringReplace($sName, '<', '')
    $sName = StringReplace($sName, '>', '')
    $sName = StringReplace($sName, '|', '')
    Return $sName
    EndFunc ;==>_createFileName

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

    Func _setCurrentSong()
    Local $aSongInfo = Execute('_iTunes_Current_GetInfo()')

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

    If Not IsArray($aSongInfo) Then Return

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

    If $aOldSongInfo[0] <> $aSongInfo[2] Or $aOldSongInfo[1] <> $aSongInfo[0] Or $aOldSongInfo[2] <> $aSongInfo[1] Then
    Local $sLyric = _iTunes_Current_LyricsGet()
    If $sLyric <> '0' Then
    _GUICtrlRichEdit_SetText($hLyricBox, _convertTextToRtf($sLyric))
    _GUICtrlRichEdit_SetScrollPos($hLyricBox, 0, 0)
    If FileExists(@ScriptDir & '\lyrics\' & _createFileName($aSongInfo[2] & ' - ' & $aSongInfo[0] & ' - ' & $aSongInfo[1]) & '.ini') Then
    GUICtrlSetData($hStatus, 'Autoscroll information found! :)')
    $bLyricExists = True
    $sScrollTimer = 0
    $sScrollTimer = TimerInit()
    $aScrollEvents = 0
    $iScrollCounter = 1
    Else
    GUICtrlSetData($hStatus, 'No autoscoll information found!')
    $bLyricExists = False
    EndIf

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

    $iCount = 1
    $sTimer = 0
    $sTimer = TimerInit()
    Else
    _GUICtrlRichEdit_SetText($hLyricBox, _convertTextToRtf('No Lyrics found! :/'))
    _GUICtrlRichEdit_SetScrollPos($hLyricBox, 0, 0)
    EndIf
    $aOldSongInfo[0] = $aSongInfo[2]
    $aOldSongInfo[1] = $aSongInfo[0]
    $aOldSongInfo[2] = $aSongInfo[1]
    EndIf
    EndFunc ;==>_setCurrentSong

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

    Func _closeProgram()
    Exit
    EndFunc ;==>_closeProgram

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

    Func _convertTextToRtf($sText)
    Local $sSplitText = StringSplit($sText, @LF)
    Local $sRTF = '{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Calibri;}}' & @LF & _
    '{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl276\slmult1\qc\lang7\f0\fs28\par\par ' ;\par\par wegen Markierung

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

    For $i = 1 To $sSplitText[0]
    $sRTF &= $sSplitText[$i] & '\par' & @LF
    Next

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

    $sRTF &= '\par\par' ;\par\par wegen markierung
    $sRTF &= '}'

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

    Return $sRTF
    EndFunc ;==>_convertTextToRtf

    [/autoit]