#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=gfx\icon.ico
#AutoIt3Wrapper_Outfile=..\..\..\QuizIt!_v1.exe
#AutoIt3Wrapper_Res_Description=by fabs
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Run_Au3check=n
#AutoIt3Wrapper_Tidy_Stop_OnError=n
#AutoIt3Wrapper_Run_Obfuscator=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <File.au3>
#include <Misc.au3>
#include <Sound.au3>
#NoTrayIcon
DirCreate(@ScriptDir & "\gfx")
FileInstall("gfx\img1.jpeg", "gfx\img1.jpeg")
FileInstall("gfx\img2.jpeg", "gfx\img2.jpeg")
FileInstall("gfx\img3.jpeg", "gfx\img3.jpeg")
FileInstall("gfx\img4.jpeg", "gfx\img4.jpeg")
FileInstall("gfx\img5.jpeg", "gfx\img5.jpeg")
FileInstall("gfx\background.jpeg", "gfx\background.jpeg")
FileInstall("gfx\logo.jpeg", "gfx\logo.jpeg")
FileInstall("gfx\icon.ico", "gfx\icon.ico")
Global $covercheck, $artist1, $artist2, $artist3, $title1, $title2, $title3
Global $gamerun = False
Global $open, $playtrack, $track1, $track2, $track3, $levelsleep
Global Const $ver = "1.0"
Global Const $title = "QuizIt! " & $ver
Global Const $name = "QuizIt!"
Global Const $dll = DllOpen("User32.dll")
$splashgui = GUICreate("", 421, 211, @DesktopHeight - 515, 164, $WS_POPUP)
$logo = GUICtrlCreatePic("gfx\logo.jpeg", 0, 0, 420, 210)
GUICtrlCreateLabel("v. " & $ver, 176, 80, 87, 45)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 27, 400, 0, "Calisto MT")
GUICtrlSetColor(-1, 0xFFFFFF)
WinSetTrans($splashgui, "", 10)
GUISetState(@SW_SHOW)
For $trans = 10 To 240 Step +8
WinSetTrans($splashgui, "", $trans)
Sleep(3)
Next
Sleep(1600)
For $trans = 240 To 0 Step -8
WinSetTrans($splashgui, "", $trans)
Sleep(3)
Next
GUIDelete($splashgui)
Global $gui = GUICreate($title, 490, 330, @DesktopHeight - 550, 110)
$background = GUICtrlCreatePic("gfx\background.jpeg", 0, 0, 490, 330)
GUICtrlSetState($background, $GUI_DISABLE)
$pathinput = GUICtrlCreateInput("", 8, 8, 393, 21)
GUICtrlSetState($pathinput, $GUI_DISABLE)
$browse = GUICtrlCreateButton("Durchsuchen", 402, 6, 81, 25, 0)
GUICtrlCreateLabel("Fortschritt", 8, 48, 50, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$soundprogress = GUICtrlCreateProgress(64, 40, 419, 25)
GUICtrlCreateLabel("Punkte", 16, 72, 38, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$scorelabel = GUICtrlCreateLabel("0", 64, 72, 160, 17)
GUICtrlSetBkColor($scorelabel, $GUI_BKCOLOR_TRANSPARENT)
Global $score = ControlGetText($gui, "", $scorelabel)
Global $cover1 = GUICtrlCreatePic("gfx\img1.jpeg", 8, 104, 137, 161)
Global $artistlabel1 = GUICtrlCreateLabel("Unbekannter Interpret", 8, 272, 137, 17)
Global $titlelabel1 = GUICtrlCreateLabel("Unbekannter Titel", 8, 290, 139, 17)
GUICtrlSetBkColor($artistlabel1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetBkColor($titlelabel1, $GUI_BKCOLOR_TRANSPARENT)
Global $cover2 = GUICtrlCreatePic("gfx\img2.jpeg", 176, 104, 137, 161)
Global $artistlabel2 = GUICtrlCreateLabel("Unbekannter Interpret", 176, 272, 137, 17)
Global $titlelabel2 = GUICtrlCreateLabel("Unbekannter Titel", 176, 290, 139, 17)
GUICtrlSetBkColor($artistlabel2, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetBkColor($titlelabel2, $GUI_BKCOLOR_TRANSPARENT)
Global $cover3 = GUICtrlCreatePic("gfx\img3.jpeg", 344, 104, 137, 161)
Global $artistlabel3 = GUICtrlCreateLabel("Unbekannter Interpret", 344, 272, 137, 17)
Global $titlelabel3 = GUICtrlCreateLabel("Unbekannter Titel", 344, 290, 139, 17)
GUICtrlSetBkColor($artistlabel3, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetBkColor($titlelabel3, $GUI_BKCOLOR_TRANSPARENT)
$game = GUICtrlCreateMenu("Spiel")
$play = GUICtrlCreateMenuItem("Neues Spiel starten", $game)
$levelmenu = GUICtrlCreateMenu("Schwierigkeit", $game)
$easy = GUICtrlCreateMenuItem("Einfach", $levelmenu)
$middle = GUICtrlCreateMenuItem("Mittel", $levelmenu)
$hard = GUICtrlCreateMenuItem("Schwer", $levelmenu)
GUICtrlSetState($easy, $GUI_CHECKED)
Global $level = "easy"
Global $levelsleep = 750
Global $levelmulti = 0
GUICtrlCreateMenuItem("", $game)
$quit = GUICtrlCreateMenuItem("Beenden" & @TAB & "Esc", $game)
$info = GUICtrlCreateMenu("?")
$about = GUICtrlCreateMenuItem("Info", $info)
WinSetTrans($gui, "", 10)
GUISetState(@SW_SHOW)
For $trans = 10 To 240 Step +7
WinSetTrans($gui, "", $trans)
Sleep(2)
Next
$timer = TimerInit()
While 1
Global $nMsg = GUIGetMsg()
Global $tMsg = TrayGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_terminate()
Case $easy
Global $level = "easy"
$levelsleep = 750
GUICtrlSetState($easy, $GUI_CHECKED)
GUICtrlSetState($middle, $GUI_UNCHECKED)
GUICtrlSetState($hard, $GUI_UNCHECKED)
Case $middle
Global $level = "middle"
$levelsleep = 500
GUICtrlSetState($easy, $GUI_UNCHECKED)
GUICtrlSetState($middle, $GUI_CHECKED)
GUICtrlSetState($hard, $GUI_UNCHECKED)
Case $hard
Global $level = "hard"
$levelsleep = 250
GUICtrlSetState($easy, $GUI_UNCHECKED)
GUICtrlSetState($middle, $GUI_UNCHECKED)
GUICtrlSetState($hard, $GUI_CHECKED)
Case $browse
$path = FileSelectFolder("Bitte wählen Sie Ihren Musikordner aus:", "", 2)
If @error = 1 Then ContinueLoop
Global $files = _FileListToArray($path, "*.mp3", 1)
If @error = 4 Then
MsgBox(16, "Fehler", "Das angegebene Verzeichnis enthält keine Musikdateien")
ContinueLoop
ElseIf $files[0] < 3 Then
MsgBox(16, "Fehler", "Es müssen mindestens 3 Musikdateien vorhanden sein")
ContinueLoop
Else
GUICtrlSetData($pathinput, $path)
ContinueLoop
EndIf
Case $about
_aboutbox()
Case $play
If $gamerun = False Then
_start()
ElseIf $gamerun = True Then
If IsDeclared("open") Then _SoundPause($open)
$newgamebox = MsgBox(36, "Neues Spiel starten", "Möchten Sie wirklich ein neues Spiel starten?" & @CRLF & "Der aktuelle Fortschritt geht verloren")
Do
Sleep(10)
Until $newgamebox = 6 Or $newgamebox = 7
If $newgamebox = 6 Then
Global $levelmulti = 0
GUICtrlSetData($soundprogress, 0)
Global $set = "zero"
_setscore()
_start()
ElseIf $newgamebox = 7 Then
If IsDeclared("open") Then _SoundResume($open)
ContinueLoop
EndIf
EndIf
Case $quit
_terminate()
Case $cover1
If Not IsDeclared("covercheck") Or $covercheck = False Then
ContinueLoop
ElseIf IsDeclared("covercheck") And $covercheck = True Then
_check()
EndIf
Case $cover2
If Not IsDeclared("covercheck") Or $covercheck = False Then
ContinueLoop
ElseIf IsDeclared("covercheck") And $covercheck = True Then
_check()
EndIf
Case $cover3
If Not IsDeclared("covercheck") Or $covercheck = False Then
ContinueLoop
ElseIf IsDeclared("covercheck") And $covercheck = True Then
_check()
EndIf
EndSwitch
If $gamerun = True Then
If $levelmulti = 100 Then
$levelmulti = 0
GUICtrlSetData($soundprogress, 0)
If $level = "easy" Then
$levelsleep = 750
ElseIf $level = "middle" Then
$levelsleep = 500
ElseIf $level = "hard" Then
$levelsleep = 250
EndIf
Global $set = "down"
_setscore()
_start()
EndIf
If TimerDiff($timer) > $levelsleep Then
GUICtrlSetData($soundprogress, $levelmulti)
$levelmulti += 5
$timer = TimerInit()
EndIf
EndIf
If _IsPressed("41", $dll) And WinActive($gui) Then
Global $nMsg = $cover1
ElseIf _IsPressed("42", $dll) And WinActive($gui) Then
Global $nMsg = $cover2
ElseIf _IsPressed("43", $dll) And WinActive($gui) Then
Global $nMsg = $cover3
EndIf
Sleep(10)
WEnd
Func _start()
$checkgui = _checkgui()
If $checkgui = False Then Return
Global $gamerun = True
Global $random = "all"
_random()
Global $track1 = $files[$rTrack1]
Global $track2 = $files[$rTrack2]
Global $track3 = $files[$rTrack3]
If $rPlaytrack = 1 Then
Global $playtrack = $track1
ElseIf $rPlaytrack = 2 Then
Global $playtrack = $track2
ElseIf $rPlaytrack = 3 Then
Global $playtrack = $track3
EndIf
$track1tags = _MP3GetID3v1Tag($path & "\" & $track1)
$track2tags = _MP3GetID3v1Tag($path & "\" & $track2)
$track3tags = _MP3GetID3v1Tag($path & "\" & $track3)
#comments-start
$track1tags = _MP3GetID3v1Tag($path & "\" & $track1)
If IsArray($track1tags) = 0 Then
ConsoleWrite(@CRLF & "$track1tags is no array")
Global $random = 1
Do
ConsoleWrite(@CRLF & "calling random 1 func")
_random()
$track1tags = _MP3GetID3v1Tag($path & "\" & $track1)
ConsoleWrite(@CRLF & "tagging file")
Until IsArray($track1tags) = 1
ConsoleWrite(@CRLF & "$track1tags is array")
EndIf
$track2tags = _MP3GetID3v1Tag($path & "\" & $track2)
If IsArray($track2tags) = 0 Then
ConsoleWrite(@CRLF & "$track2tags is no array")
Global $random = 2
Do
ConsoleWrite(@CRLF & "calling random 2 func")
_random()
$track2tags = _MP3GetID3v1Tag($path & "\" & $track2)
ConsoleWrite(@CRLF & "tagging file")
Until IsArray($track2tags) = 1
ConsoleWrite(@CRLF & "$track2tags is array")
EndIf
$track3tags = _MP3GetID3v1Tag($path & "\" & $track3)
If IsArray($track3tags) = 0 Then
ConsoleWrite(@CRLF & "$track3tags is no array")
Global $random = 3
Do
ConsoleWrite(@CRLF & "calling random 3 func")
_random()
$track3tags = _MP3GetID3v1Tag($path & "\" & $track3)
ConsoleWrite(@CRLF & "tagging file")
Until IsArray($track3tags) = 1
ConsoleWrite(@CRLF & "$track3tags is array")
EndIf
#comments-end
Global $artist1 = $track1tags[1] ;==> Subscript used with non-Array variable.:
Global $artist2 = $track2tags[1] ;Global $artist1 = $track1tags[1]
Global $artist3 = $track3tags[1] ;Global $artist1 = $track1tags^ ERROR
Global $title1 = $track1tags[0]
Global $title2 = $track2tags[0]
Global $title3 = $track3tags[0]
Select
Case $artist1 = ""
$artist1 = "Unbekannter Interpret"
Case $artist2 = ""
$artist2 = "Unbekannter Interpret"
Case $artist3 = ""
$artist3 = "Unbekannter Interpret"
Case $title1 = ""
$title1 = "Unbekannter Titel"
Case $title2 = ""
$title2 = "Unbekannter Titel"
Case $title3 = ""
$title3 = "Unbekannter Titel"
EndSelect
_settext()
_play()
EndFunc ;==>_start
Func _checkgui()
If GUICtrlRead($pathinput) = "" Then
MsgBox(16, "Fehler", "Es wurde kein Musikordner ausgewählt")
Return False
Else
Return True
EndIf
EndFunc ;==>_checkgui
Func _random()
If $random = 1 Then
_random1()
ElseIf $random = 2 Then
_random2()
ElseIf $random = 3 Then
_random3()
ElseIf $random = 4 Then
_random4()
ElseIf $random = "all" Then
_random1()
_random2()
_random3()
_random4()
;~ Return
EndIf
EndFunc ;==>_random
Func _random1()
Global $rTrack1 = Random(1, $files[0], 1)
ConsoleWrite(@CRLF & "rTrack1: " & $rTrack1)
;~ Return
EndFunc ;==>_random1
Func _random2()
Do
Global $rTrack2 = Random(1, $files[0], 1)
Until $rTrack2 <> $rTrack1
ConsoleWrite(@CRLF & "rTrack2: " & $rTrack2)
;~ Return
EndFunc ;==>_random2
Func _random3()
Do
Global $rTrack3 = Random(1, $files[0], 1)
Until $rTrack3 <> $rTrack2 And $rTrack3 <> $rTrack1
ConsoleWrite(@CRLF & "rTrack3: " & $rTrack3)
;~ Return
EndFunc ;==>_random3
Func _random4()
Global $rPlaytrack = Random(1, 3, 1)
Return
EndFunc ;==>_random4
Func _settext()
Select
Case StringLen($artist1) > 23
$trimlen = StringLen($artist1) - 23
$tArtist1 = StringTrimRight($artist1, $trimlen)
$artist1 = $tArtist1
Case StringLen($artist2) > 23
$trimlen = StringLen($artist2) - 23
$tArtist2 = StringTrimRight($artist2, $trimlen)
$artist2 = $tArtist2
Case StringLen($artist3) > 23
$trimlen = StringLen($artist3) - 23
$tArtist3 = StringTrimRight($artist3, $trimlen)
$artist3 = $tArtist3
Case StringLen($title1) > 22
$trimlen = StringLen($title1) - 22
$tTitle1 = StringTrimRight($title1, $trimlen)
$title1 = $tTitle1
Case StringLen($title2) > 22
$trimlen = StringLen($title2) - 22
$tTitle2 = StringTrimRight($title2, $trimlen)
$title2 = $tTitle2
Case StringLen($title3) > 22
$trimlen = StringLen($title3) - 22
$tTitle3 = StringTrimRight($title3, $trimlen)
$title3 = $tTitle3
EndSelect
GUICtrlSetData($artistlabel1, $artist1)
GUICtrlSetData($artistlabel2, $artist2)
GUICtrlSetData($artistlabel3, $artist3)
GUICtrlSetData($titlelabel1, $title1)
GUICtrlSetData($titlelabel2, $title2)
GUICtrlSetData($titlelabel3, $title3)
Global $nMsg = $cover1
Global $covercheck = True
EndFunc ;==>_settext
Func _play()
If IsDeclared("open") Then
_SoundStop($open)
_SoundClose($open)
EndIf
Global $open = _SoundOpen($path & "\" & $playtrack)
$TrackLength = _SoundLength($open)
$length = StringSplit($TrackLength, ":")
$TrackHourLength = $length[1]
$TrackMinLength = $length[2]
$TrackSecLength = $length[3]
$rSeekHour = Random(0, $TrackHourLength, 1) ;min 15s verbleibend @ easy
$rSeekMin = Random(0, $TrackMinLength, 1) ;min 10s verbleibend @ middle
$rSeekSec = Random(0, $TrackSecLength, 1) ;min 5s verbleibend @ hard
_SoundPlay($open)
_SoundSeek($open, $rSeekHour, $rSeekMin, $rSeekSec)
_SoundPlay($open)
EndFunc ;==>_play
Func _check()
Select
Case $nMsg = $cover1 And $playtrack = $track1
_success()
Case $nMsg = $cover2 And $playtrack = $track2
_success()
Case $nMsg = $cover3 And $playtrack = $track3
_success()
Case Else
_fail()
EndSelect
EndFunc ;==>_check
Func _fail()
If $nMsg = $cover1 Then
GUICtrlSetImage($cover1, "gfx\img5.jpeg")
Sleep(900)
GUICtrlSetImage($cover1, "gfx\img1.jpeg")
ElseIf $nMsg = $cover2 Then
GUICtrlSetImage($cover2, "gfx\img5.jpeg")
Sleep(900)
GUICtrlSetImage($cover2, "gfx\img2.jpeg")
ElseIf $nMsg = $cover3 Then
GUICtrlSetImage($cover3, "gfx\img5.jpeg")
Sleep(900)
GUICtrlSetImage($cover3, "gfx\img3.jpeg")
EndIf
Global $set = "down"
_setscore()
EndFunc ;==>_fail
Func _success()
If $nMsg = $cover1 Then
GUICtrlSetImage($cover1, "gfx\img4.jpeg")
Sleep(900)
GUICtrlSetImage($cover1, "gfx\img1.jpeg")
ElseIf $nMsg = $cover2 Then
GUICtrlSetImage($cover2, "gfx\img4.jpeg")
Sleep(900)
GUICtrlSetImage($cover2, "gfx\img2.jpeg")
ElseIf $nMsg = $cover3 Then
GUICtrlSetImage($cover3, "gfx\img4.jpeg")
Sleep(900)
GUICtrlSetImage($cover3, "gfx\img3.jpeg")
EndIf
Global $levelmulti = 0
GUICtrlSetData($soundprogress, 0)
Global $set = "up"
_setscore()
_start()
EndFunc ;==>_success
Func _setscore()
If $set = "down" Then
If $score <> 0 Then
$score = $score - 10
GUICtrlSetData($scorelabel, $score)
EndIf
ElseIf $set = "down" And $score = 0 Then
$score = 0
GUICtrlSetData($scorelabel, $score)
ElseIf $set = "up" Then
$score = $score + 10
GUICtrlSetData($scorelabel, $score)
ElseIf $set = "zero" Then
$score = 0
GUICtrlSetData($scorelabel, $score)
EndIf
Return
EndFunc ;==>_setscore
Func _aboutbox()
MsgBox(64, "Über " & $title, "Copyright (C) 2008 by fabs für AutoIt.de (µit August)" & @CRLF & "fabs06@gmail.com")
Return
EndFunc ;==>_aboutbox
Func _terminate()
If IsDeclared("open") Then _SoundPause($open)
$quitbox = MsgBox(36, $name & " beenden", "Möchten Sie " & $name & " wirklich beenden?" & @CRLF & "Der aktuelle Fortschritt geht verloren.", 0, $gui)
Do
Sleep(10)
Until $quitbox = 6 Or $quitbox = 7
If $quitbox = 6 Then
For $trans = 255 To 0 Step -7
WinSetTrans($gui, "", $trans)
Sleep(2)
Next
DllClose($dll)
If IsDeclared("open") Then
_SoundStop($open)
_SoundClose($open)
EndIf
Exit
Else
If IsDeclared("open") Then _SoundResume($open)
Return
EndIf
EndFunc ;==>_terminate
;===============================================================================
; Function Name:_MP3GetID3v1Tag($sFile)
; Description: Retrive MP3 ID3Tag v1.0 & v1.1
; Parameter(s): $sFile = FileFullPath
; Requirement(s):Autoit v3.2.0
; Return Value(s):On Success - array with data:
; 0 - Title
; 1 - Artist
; 2 - Album
; 3 - Year
; 4 - Comment
; 5 - Track number
; 6 - Genre
; 7 - Tag version
; On Failure empty string and sets @ERROR:
; -1 - File not found
; 1 - TAG not found
; Version : 2.6.0
; Author(s): taz742 based on Lazycat's UDF _MP3GetTag()
;===============================================================================
;
Func _MP3GetID3v1Tag($sFile)
Local $ret = DllCall("kernel32.dll", "int", "CreateFile", _
"str", $sFile, _
"int", 0x80000000, _
"int", 0, _
"ptr", 0, _
"int", 3, _
"int", 0x80, _
"ptr", 0), $error = 0
If @error Or Not $ret[0] Then
$error = -1
Else
Local $aID3v1
Local $pTag = _FileReadToStruct("char[3];char[30];char[30];char[30];char[4];char[28];byte[2];byte", $ret[0], FileGetSize($sFile) - 128)
;TAG Header|Title|Artist|Album|Year|Comment|Track|Genre
If Not (DllStructGetData($pTag, 1) == "TAG") Then
$error = 1
Else
Dim $aID3v1[8]
$aID3v1[0] = DllStructGetData($pTag, 2) ;Title
$aID3v1[1] = DllStructGetData($pTag, 3) ;Artist
$aID3v1[2] = DllStructGetData($pTag, 4) ;Album
$aID3v1[3] = DllStructGetData($pTag, 5) ;Year
If DllStructGetData($pTag, 7, 1) = 0 Then ;ID3Tag is v1.1 -> Track
$aID3v1[4] = DllStructGetData($pTag, 6) ;Comment
$aID3v1[5] = DllStructGetData($pTag, 7, 2) ;Track
$aID3v1[7] = "1.1" ;version info
Else ;ID3Tag is v1.0 -> Not Track
$aID3v1[4] = DllStructGetData($pTag, 6) & String(BinaryToString(DllStructGetData($pTag, 7))) ;Comment
$aID3v1[5] = "" ;Track is empty because not yet implanted in ID3v1.0
$aID3v1[7] = "1.0" ;version info
EndIf
$aID3v1[6] = _MP3GetGenreByID(DllStructGetData($pTag, 8)) ;Genre
EndIf
EndIf
DllCall("kernel32.dll", "int", "CloseHandle", "int", $ret[0])
If Not $error Then Return $aID3v1
SetError($error)
Return ""
EndFunc ;==>_MP3GetID3v1Tag
Func _MP3GetGenreByID($iID)
Local $asGenre = StringSplit("Blues,Classic Rock,Country,Dance,Disco,Funk,Grunge,Hip-Hop," & _
"Jazz,Metal,New Age,Oldies,Other,Pop,R&B,Rap,Reggae,Rock,Techno,Industrial,Alternative," & _
"Ska,Death Metal,Pranks,Soundtrack,Euro-Techno,Ambient,Trip-Hop,Vocal,Jazz+Funk,Fusion," & _
"Trance,Classical,Instrumental,Acid,House,Game,Sound Clip,Gospel,Noise,Alternative Rock," & _
"Bass,Soul,Punk,Space,Meditative,Instrumental Pop,Instrumental Rock,Ethnic,Gothic,Darkwave," & _
"Techno-Industrial,Electronic,Pop-Folk,Eurodance,Dream,Southern Rock,Comedy,Cult,Gangsta," & _
"Top 40,Christian Rap,Pop/Funk,Jungle,Native US,Cabaret,New Wave,Psychadelic,Rave,Showtunes," & _
"Trailer,Lo-Fi,Tribal,Acid Punk,Acid Jazz,Polka,Retro,Musical,Rock & Roll,Hard Rock,Folk," & _
"Folk-Rock,National Folk,Swing,Fast Fusion,Bebob,Latin,Revival,Celtic,Bluegrass,Avantgarde," & _
"Gothic Rock,Progressive Rock,Psychedelic Rock,Symphonic Rock,Slow Rock,Big Band,Chorus," & _
"Easy Listening,Acoustic,Humour,Speech,Chanson,Opera,Chamber Music,Sonata,Symphony,Booty Bass," & _
"Primus,Porn Groove,Satire,Slow Jam,Club,Tango,Samba,Folklore,Ballad,Power Ballad,Rhytmic Soul," & _
"Freestyle,Duet,Punk Rock,Drum Solo,Acapella,Euro-House,Dance Hall,Goa,Drum & Bass,Club-House," & _
"Hardcore,Terror,Indie,BritPop,Negerpunk,Polsk Punk,Beat,Christian Gangsta,Heavy Metal,Black Metal," & _
"Crossover,Contemporary C,Christian Rock,Merengue,Salsa,Thrash Metal,Anime,JPop,SynthPop", ",")
If ($iID >= 0) And ($iID < 148) Then Return $asGenre[$iID + 1]
Return ("")
EndFunc ;==>_MP3GetGenreByID
Func _FileReadToStruct($vStruct, $hFile, $nOffset)
If Not DllStructGetSize($vStruct) Then $vStruct = DllStructCreate($vStruct)
Local $nLen = DllStructGetSize($vStruct)
Local $ret = DllCall("kernel32.dll", "int", "SetFilePointer", _
"int", $hFile, _
"int", $nOffset, _
"int", 0, _
"int", 0) ; FILE_BEGIN
Local $pRead = DllStructCreate("dword")
$ret = DllCall("kernel32.dll", "int", "ReadFile", _
"int", $hFile, _
"ptr", DllStructGetPtr($vStruct), _
"int", $nLen, _
"ptr", DllStructGetPtr($pRead), _
"ptr", 0)
If @error Then
SetError(1)
EndIf
Local $nRead = DllStructGetData($pRead, 1)
$pRead = 0
SetExtended($nRead)
If Not ($nRead = $nLen) Then SetError(2)
Return $vStruct
EndFunc ;==>_FileReadToStruct