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.
Einfach auf den einen Button klicken und es speichert die Zeit, wann es um eine Zeile scrollen soll.
Spoiler anzeigen
#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 Version: 3.3.8.1
Author: myName
Script Function:
Template AutoIt script.
#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>
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
_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))
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)
Local $sMark = GUICreate('', 687, 20, 8, 65, $WS_POPUP, $WS_EX_MDICHILD, $hGUI)
GUISetBkColor(0x00FF00, $sMark)
WinSetTrans($sMark, '', 80)
GUISetState(@SW_SHOW, $sMark)
_setCurrentSong()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]AdlibRegister('_setCurrentSong', 500)
AdlibRegister('_autoScroll', 10)
While 1
Sleep(50)
WEnd
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
Func _LyricScrollSet()
_GUICtrlEdit_Scroll($hLyricBox, 1)
Local $iTimer = Round(TimerDiff($sTimer), 0)
If ($iTimer - $iTimerLast) <= 300 Then ;Doppelklick bedeutet Zeile überspringen!
$iTimer = $iTimerLast
EndIf
IniWrite(@ScriptDir & '\lyrics\' & _createFileName($aOldSongInfo[0] & ' - ' & $aOldSongInfo[1] & ' - ' & $aOldSongInfo[2]) & '.ini', 'events', 'event' & $iCount, $iTimer)
$iTimerLast = $iTimer
$iCount += 1
EndFunc ;==>_LyricScrollSet
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
Func _setCurrentSong()
Local $aSongInfo = Execute('_iTunes_Current_GetInfo()')
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
$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
Func _closeProgram()
Exit
EndFunc ;==>_closeProgram
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
For $i = 1 To $sSplitText[0]
$sRTF &= $sSplitText[$i] & '\par' & @LF
Next
$sRTF &= '\par\par' ;\par\par wegen markierung
$sRTF &= '}'
Return $sRTF
EndFunc ;==>_convertTextToRtf