Jump to content

_SoundGetPos/Length inaccurate?


Recommended Posts

In this sort of a music player I made, the timer starts before the music starts. Because of that, it also is a couple of seconds left that it doesn't play, because it ends when _soundgetpos and _soundgetlength is equal. I even made it wait 5 seconds before ending the song after they're equal. How can I get it more accurate?

Whole code, you probably don't have all the includes, so use the second one. (I think you have most includes that are in the 2nd.)

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=C:\Users\Elias\Documents\Autoit\Laptop\Shutdown\peace.ico
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <Sound.au3>
#include <INet.au3>
#include <GUIConstantsEx.au3>
#include <Date.au3>#Include <_FileListToArray.au3>
#include <GUICtrlOnHover.au3>
#include <_AudioEndpointVolume.au3>
If not FileExists(@ScriptDir & "\Songs") Then
DirCreate(@ScriptDir & "\Songs")
MsgBox(0, "Get Started!", "Move songs into the 'Songs' folder to listen to them before falling asleep!" & @CRLF & @CRLF & "Add at least 5 songs!")
EndIf
local $Dir=""
$FindFolders=_FileListToArray(@ScriptDir & "\Songs","*",2)
if not @error then
$Dir=FileSelectFolder("Select the folder you want your songs played from. Using the 'Songs' folder will play a random song from every folder!", @ScriptDir & "\Songs")
If @error = 1 then Exit
EndIf
If $Dir = "" Then $Dir = @ScriptDir & "\Songs"

Local $last, $2ndlast, $3rdlast, $4thlast, $random, $open, $DisplayTime, $Timeleft, $length, $sFormattedTime, $do, $timer, $MakeToolTip, $ToolTip, $GetNewTimer, $GetNewSoon, $volumetimer
$Getnew=1
$Pause=1
$Nosong=0
$firstvolume=True
If @HOUR<>23 Then
If @MIN>39 Then $time = @HOUR+1 & ":" & @MIN-30
If @MIN>29 And @MIN<40 Then $time = @HOUR+1 & ":0" & @MIN-30
If @MIN<30 Then $time = @Hour & ":" & @MIN+30
If @MIN>39 Then $1 = @HOUR+1 & ":" & @MIN-30
If @MIN>29 And @MIN<40 Then $1 = @HOUR+1 & ":0" & @MIN-30
If @MIN<30 Then $1 = @Hour & ":" & @MIN+30
EndIf
If @HOUR=23 Then
If @MIN>39 Then $time = @HOUR-23 & "0:" & @MIN-30
If @MIN>29 And @MIN<40 Then $time = @HOUR+1 & ":0" & @MIN-30
If @MIN<30 Then $time = @Hour & ":" & @MIN+30
If @MIN>39 Then $1 = @HOUR-23 & "0:" & @MIN-30
If @MIN>29 And @MIN<40 Then $1 = @HOUR+1 & ":0" & @MIN-30
If @MIN<30 Then $1 = @Hour & ":" & @MIN+30
EndIf
$Files=_Filelisttoarrayex($Dir)
if @error Then
MsgBox(0, "Error:", "Error: Add at least 5 songs in the 'Songs' directory before trying again!")
ShellExecute(@ScriptDir & "\Songs")
Exit
EndIf
GUICreate("", 150, 225)
$SDType=GUICtrlCreateCombo("Shutdown", 10, 175, 130, 20)
GUICtrlSetData($SDType, "Logoff|Reboot|Standby|Hibernate|Exit Program", "Shutdown")
_GUICtrl_OnHoverRegister($SDType, "StartSDTypeToolTip", "HideToolTip")
$Turnofftime=GUICtrlCreateInput($time, 50, 10, 35, 20)
$Apply=GUICtrlCreateButton("Applied", 90, 10, 50, 20)
_GUICtrl_OnHoverRegister($Apply, "StartApplyToolTip", "HideToolTip")
$Undo=GUICtrlCreateButton("Undo", 10, 10, 35, 20)
_GUICtrl_OnHoverRegister($Undo, "StartUndoToolTip", "HideToolTip")
$Start=GUICtrlCreateButton("Start", 10, 40, 130, 20)
_GUICtrl_OnHoverRegister($Start, "StartStartToolTip", "HideToolTip")
$Next=GUICtrlCreateButton("Next Song", 10, 70, 130, 20)
_GUICtrl_OnHoverRegister($Next, "StartNextToolTip", "HideToolTip")
$Help=GUICtrlCreateButton("?", 10, 100, 130, 20)
_GUICtrl_OnHoverRegister($Help, "StartHelpToolTip", "HideToolTip")
$DecreaseSound=GUICtrlCreateCheckbox("Decrease Sound?", 10, 128)
_GUICtrl_OnHoverRegister($DecreaseSound, "StartDecreaseSoundToolTip", "HideToolTip")
$AnyKey=GUICtrlCreateCheckbox("TouchShutdown?", 10, 145)
_GUICtrl_OnHoverRegister($AnyKey, "StartAnyKeyToolTip", "HideToolTip")
$label=GUICtrlCreateLabel("", 10, 205, 60, 20)
$label4=GUICtrlCreateLabel("-", 40, 205, 10, 20)
$label2=GUICtrlCreateLabel("", 46, 205, 60, 20)
$label3=GUICtrlCreateLabel("", 95, 205, 60, 20)
GUICtrlCreateGroup("", 5, 0, 140, 35)
GUICtrlCreateGroup("", 5, 30, 140, 65)
GUICtrlCreateGroup("", 5, 90, 140, 35)
GUICtrlCreateGroup("", 5, 120, 140, 49)
GUICtrlCreateGroup("", 5, 164, 140, 36)
GUICtrlCreateGroup("", 5, 195, 140, 28)
GUISetState()
$o1=GUICtrlRead($Turnofftime)
$o2=GUICtrlRead($Turnofftime)
$o3=GUICtrlRead($Turnofftime)
$AllFiles=_Filelisttoarrayex($Dir)

WHile 1
If $Pause=1 and $1=@HOUR & ":" & @MIN Then ExitLoop
If GUICtrlRead($AnyKey)=1 and _IsAnyKeyPressed() Then ExitLoop
CheckStuff()
$msg=GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $Undo
If GUICtrlRead($Apply)="Apply" Then GUICtrlSetData($Turnofftime, $o2)
If GUICtrlRead($Apply)="Applied" Then GUICtrlSetData($Turnofftime, $o3)
Case $Next
If $Nosong=1 Then
$Getnew=1
_SoundClose($open)
$4thlast=$3rdlast
$3rdlast=$2ndlast
$2ndlast=$last
$last=$random
EndIf
Case $Help
MsgBox(0, "Help", "This program is made so your computer turns itself off at a given time." & @CRLF & @CRLF & "Add songs in the 'Songs' directory, and the program will play a random one when you've pressed start." & @crlf & "Supported filetypes: .mp3" & @CRLF & "The songs can be separated into folders within the 'Songs' folder." & @crlf & "Add at least 5 songs to each folder!" & @CRLF & @CRLF & "It won't shutdown if you have any unsaved data on your computer!")
Case $Apply
$1=GUICtrlRead($Turnofftime)
$o3=$o2
$o2=$1
GUICtrlSetData($Apply, "Applied")
Case $Start
If $Pause=1 Then
If $Getnew=0 Then
_SoundResume($open)
EndIf
$MakePause=0
GUICtrlSetData($Start, "Pause")
EndIf
If $Pause=0 Then
_SoundPause($open)
$MakePause=1
GUICtrlSetData($Start, "Start")
EndIf
If $MakePause=0 Then $Pause=0
If $MakePause=1 Then $Pause=1
EndSwitch
If $1=@HOUR & ":" & @MIN Then $do="Shutdown"
If $Pause=0 Then
If $GetNewSoon=1 And TimerDiff($GetNewTimer)>5000 Then
$Getnew=1
$4thlast=$3rdlast
$3rdlast=$2ndlast
$2ndlast=$last
$last=$random
$GetNewSoon=0
EndIf
If $Getnew=1 Then
If $do="Shutdown" Then ExitLoop
$random=Random(1, $AllFiles[0], 1)
$FileDir=$AllFiles[$random]
$type = stringRight($FileDir, 4)
If $type<>".mp3" Then
$Nosong=1
Else
If $random<>$last and $random<>$2ndlast and $random<>$3rdlast and $random<>$4thlast Then
_SoundClose($open)
$open=_SoundOpen($FileDir)
$length=_SoundLength($open, 2)
_SoundPlay($open, 0)
$Getnew=0
$Nosong=1
EndIf
EndIf
EndIf
If _SoundPos($open, 2) > $length-1 Then
$GetNewTimer=TimerInit()
$GetNewSoon=1
EndIf
EndIf

GetAllTimes()
WEnd

_SoundClose($open)
$SD=GUICtrlRead($SDType)
If $SD = "Shutdown" Then $SD = 1
If $SD = "Logoff" Then $SD = 0
If $SD = "Reboot" Then $SD = 2
If $SD = "Standby" Then $SD = 32
If $SD = "Hibernate" Then $SD = 64
If $SD = "Exit Program" Then Exit
Shutdown($SD)

Func CheckStuff()
If GUICtrlRead($DecreaseSound)=1 Then
DecreaseVolume()
EndIf

If TimerDiff($Timer)>1400 and $MakeToolTip=True Then
ToolTip($ToolTip)
$MakeToolTip=False
EndIf

If $o1<>GUICtrlRead($Turnofftime) Then
$o1=GUICtrlRead($Turnofftime)
GUICtrlSetData($Apply, "Apply")
EndIf
If $o2=GUICtrlRead($Turnofftime) And GUICtrlRead($Apply)="Apply" Then
GUICtrlSetData($Apply, "Applied")
EndIf
EndFunc

Func DecreaseVolume()
If $Pause=0 Then
if $firstvolume=True then
$volumetimer=TimerInit()
$firstvolume = False
EndIf
If TimerDiff($volumetimer)>120000 Then
$getvolume=_GetMasterVolumeLevelScalar()
If $getvolume<1 Then $getvolume=1
_SetMasterVolumeLevelScalar($getvolume-1)
$volumetimer=TimerInit()
EndIf
EndIf
EndFunc

Func GetAllTimes()
$2=@HOUR & ":" & @MIN & ":" & @SEC
$11=$1 & ":00"
$1TrimLeft=StringTrimLeft($11, 6)
$1TrimRight=StringTrimRight($11, 6)
$2TrimLeft=StringTrimLeft($2, 6)
$2TrimRight=StringTrimRight($2, 6)
$1GetMiddle1=StringTrimLeft($11, 3)
$1GetMiddle2=StringTrimRight($1GetMiddle1, 3)
$2GetMiddle1=StringTrimLeft($2, 3)
$2GetMiddle2=StringTrimRight($2GetMiddle1, 3)
$1Trim=$1GetMiddle2*60+$1TrimLeft+$1TrimRight*3600
$2Trim=$2GetMiddle2*60+$2TrimLeft+$2TrimRight*3600
$sOldFormattedTime=$sFormattedTime
If $1Trim>$2Trim Then
$Trim=($1Trim-$2Trim)*1000
$sFormattedTime = _TimeReadable2($Trim)
EndIf
If $1Trim<$2Trim Then
$sEndDT = _DateAdd("D", 1, _NowCalcDate()) & " " & $1 & ":00"
$iDiff = _DateDiff("s", _NowCalc(), $sEndDT)
$iHours = Int($iDiff / 3600)
$iMinutes = Int(($iDiff - ($iHours * 3600)) / 60)
$iSeconds = $iDiff - (($iHours * 3600) + ($iMinutes * 60))
$sFormattedTime = StringRight("0" & $iHours, 2) & ":" & StringRight("0" & $iMinutes, 2) & ":" & StringRight("0" & $iSeconds, 2)
EndIf
If $do="Shutdown" Then $sFormattedTime="00:00:00"
If $sOldFormattedTime<>$sFormattedTime Then GUICtrlSetData($label3, $sFormattedTime)


$OldDisplayTime=$DisplayTime
$OldTimeleft=$Timeleft
$DisplayTime = _SoundPos($open, 2)
$Timeleft = $length-$DisplayTime
$Timeleft = _TimeReadable($Timeleft)
$DisplayTime = _TimeReadable($DisplayTime)
If $OldDisplayTime <> $DisplayTime Then GUICtrlSetData($label, $DisplayTime)
If $OldTimeleft <> $Timeleft Then GUICtrlSetData($label2, $Timeleft)
EndFunc

Func _IsAnyKeyPressed($vDLL = 'user32.dll')
If __KeyPressCheck(1, 221, -1, $vDLL) Then Return 1
Return 0
EndFunc

Func __KeyPressCheck($iStart, $iFinish, $iHexKey = -1, $vDLL = 'user32.dll')
Local $ikey, $ia_R
For $ikey = $iStart To $iFinish
If $iHexKey == -1 Then $ia_R = DllCall($vDLL, 'int', 'GetAsyncKeyState', 'int', '0x' & Hex($ikey, 2))
If $iHexKey <> -1 Then $ia_R = DllCall($vDLL, 'int', 'GetAsyncKeyState', 'int', '0x' & $iHexKey)
If Not @error And BitAND($ia_R[0], 0x8000) = 0x8000 Then Return 1
Next
Return 0
EndFunc

Func _TimeReadable($mili)
$TotalSeconds = Int($mili / 1000)
$Hours = Int($TotalSeconds / 3600)
$Minutes = Int(($TotalSeconds - ($Hours * 3600)) / 60)
$Seconds = $TotalSeconds - (($Hours * 3600) + ($Minutes * 60))
If $Hours < 10 Then $Hours = "0" & $Hours
If $Minutes < 10 Then $Minutes = "0" & $Minutes
If $Seconds < 10 Then $Seconds = "0" & $Seconds
$FormattedTime = $Minutes & ":" & $Seconds
Return $FormattedTime
EndFunc

Func _TimeReadable2($mili)
$TotalSeconds = Int($mili / 1000)
$Hours = Int($TotalSeconds / 3600)
$Minutes = Int(($TotalSeconds - ($Hours * 3600)) / 60)
$Seconds = $TotalSeconds - (($Hours * 3600) + ($Minutes * 60))
If $Hours < 10 Then $Hours = "0" & $Hours
If $Minutes < 10 Then $Minutes = "0" & $Minutes
If $Seconds < 10 Then $Seconds = "0" & $Seconds
$FormattedTime = $Hours & ":" & $Minutes & ":" & $Seconds
Return $FormattedTime
EndFunc

Func StartHelpToolTip()
$MakeToolTip=True
$timer=TimerInit()
$ToolTip="Need Help? Click Here!"
EndFunc

Func StartNextToolTip()
$MakeToolTip=True
$timer=TimerInit()
$ToolTip="Open the next song"
EndFunc

Func StartAnyKeyToolTip()
$MakeToolTip=True
$timer=TimerInit()
$ToolTip="Shuts down if any key is pressed"
EndFunc

Func StartUndoToolTip()
$MakeToolTip=True
$timer=TimerInit()
$ToolTip="Undo current time"
EndFunc

Func StartStartToolTip()
$MakeToolTip=True
$timer=TimerInit()
If GUICtrlRead($Start)="Start" Then $ToolTip="Start playing songs"
If GUICtrlRead($Start)="Pause" Then $ToolTip="Pause current song"
EndFunc

Func StartSDTypeToolTip()
$MakeToolTip=True
$timer=TimerInit()
$ToolTip="What kind of shutdown?"
EndFunc

Func StartDecreaseSoundToolTip()
$MakeToolTip=True
$timer=TimerInit()
$ToolTip="Decreases sound one step every 2 minutes"
EndFunc

Func StartApplyToolTip()
$MakeToolTip=True
$timer=TimerInit()
If GUICtrlRead($Apply)="Applied" Then $ToolTip="Inserted time is alredy applied"
If GUICtrlRead($Apply)="Apply" Then $ToolTip="Apply inserted time"
EndFunc

Func HideToolTip()
$MakeToolTip=False
ToolTip("")
EndFunc

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=C:\Users\Elias\Documents\Autoit\Laptop\Shutdown\peace.ico
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Sound.au3>
#include <INet.au3>
#include <GUIConstantsEx.au3>
#include <Date.au3>
;~ #Include <_FileListToArray.au3>
;~ #include <GUICtrlOnHover.au3>
;~ #include <_AudioEndpointVolume.au3>







If not FileExists(@ScriptDir & "\Songs") Then
DirCreate(@ScriptDir & "\Songs")
MsgBox(0, "Get Started!", "Move songs into the 'Songs' folder to listen to them before falling asleep!" & @CRLF & @CRLF & "Add at least 5 songs!")
EndIf
local $Dir=""
$FindFolders=_FileListToArray(@ScriptDir & "\Songs","*",2)
if not @error then
$Dir=FileSelectFolder("Select the folder you want your songs played from. Using the 'Songs' folder will play a random song from every folder!", @ScriptDir & "\Songs")
If @error = 1 then Exit
EndIf
If $Dir = "" Then $Dir = @ScriptDir & "\Songs"

Local $last, $2ndlast, $3rdlast, $4thlast, $random, $open, $DisplayTime, $Timeleft, $length, $sFormattedTime, $do, $timer, $MakeToolTip, $ToolTip, $GetNewTimer, $GetNewSoon, $volumetimer
$Getnew=1
$Pause=1
$Nosong=0
$firstvolume=True
If @HOUR<>23 Then
If @MIN>39 Then $time = @HOUR+1 & ":" & @MIN-30
If @MIN>29 And @MIN<40 Then $time = @HOUR+1 & ":0" & @MIN-30
If @MIN<30 Then $time = @Hour & ":" & @MIN+30
If @MIN>39 Then $1 = @HOUR+1 & ":" & @MIN-30
If @MIN>29 And @MIN<40 Then $1 = @HOUR+1 & ":0" & @MIN-30
If @MIN<30 Then $1 = @Hour & ":" & @MIN+30
EndIf
If @HOUR=23 Then
If @MIN>39 Then $time = @HOUR-23 & "0:" & @MIN-30
If @MIN>29 And @MIN<40 Then $time = @HOUR+1 & ":0" & @MIN-30
If @MIN<30 Then $time = @Hour & ":" & @MIN+30
If @MIN>39 Then $1 = @HOUR-23 & "0:" & @MIN-30
If @MIN>29 And @MIN<40 Then $1 = @HOUR+1 & ":0" & @MIN-30
If @MIN<30 Then $1 = @Hour & ":" & @MIN+30
EndIf
$Files=_Filelisttoarrayex($Dir)
if @error Then
MsgBox(0, "Error:", "Error: Add at least 5 songs in the 'Songs' directory before trying again!")
ShellExecute(@ScriptDir & "\Songs")
Exit
EndIf
GUICreate("", 150, 225)
$SDType=GUICtrlCreateCombo("Shutdown", 10, 175, 130, 20)
GUICtrlSetData($SDType, "Logoff|Reboot|Standby|Hibernate|Exit Program", "Shutdown")
$Turnofftime=GUICtrlCreateInput($time, 50, 10, 35, 20)
$Apply=GUICtrlCreateButton("Applied", 90, 10, 50, 20)
$Undo=GUICtrlCreateButton("Undo", 10, 10, 35, 20)
$Start=GUICtrlCreateButton("Start", 10, 40, 130, 20)
$Next=GUICtrlCreateButton("Next Song", 10, 70, 130, 20)
$Help=GUICtrlCreateButton("?", 10, 100, 130, 20)
$DecreaseSound=GUICtrlCreateCheckbox("Decrease Sound?", 10, 128)
$AnyKey=GUICtrlCreateCheckbox("TouchShutdown?", 10, 145)
$label=GUICtrlCreateLabel("", 10, 205, 60, 20)
$label4=GUICtrlCreateLabel("-", 40, 205, 10, 20)
$label2=GUICtrlCreateLabel("", 46, 205, 60, 20)
$label3=GUICtrlCreateLabel("", 95, 205, 60, 20)
GUICtrlCreateGroup("", 5, 0, 140, 35)
GUICtrlCreateGroup("", 5, 30, 140, 65)
GUICtrlCreateGroup("", 5, 90, 140, 35)
GUICtrlCreateGroup("", 5, 120, 140, 49)
GUICtrlCreateGroup("", 5, 164, 140, 36)
GUICtrlCreateGroup("", 5, 195, 140, 28)
GUISetState()
$o1=GUICtrlRead($Turnofftime)
$o2=GUICtrlRead($Turnofftime)
$o3=GUICtrlRead($Turnofftime)
$AllFiles=_Filelisttoarrayex($Dir)

WHile 1
If $Pause=1 and $1=@HOUR & ":" & @MIN Then ExitLoop
If GUICtrlRead($AnyKey)=1 and _IsAnyKeyPressed() Then ExitLoop
CheckStuff()
$msg=GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case $Undo
If GUICtrlRead($Apply)="Apply" Then GUICtrlSetData($Turnofftime, $o2)
If GUICtrlRead($Apply)="Applied" Then GUICtrlSetData($Turnofftime, $o3)
Case $Next
If $Nosong=1 Then
$Getnew=1
_SoundClose($open)
$4thlast=$3rdlast
$3rdlast=$2ndlast
$2ndlast=$last
$last=$random
EndIf
Case $Help
MsgBox(0, "Help", "This program is made so your computer turns itself off at a given time." & @CRLF & @CRLF & "Add songs in the 'Songs' directory, and the program will play a random one when you've pressed start." & @crlf & "Supported filetypes: .mp3" & @CRLF & "The songs can be separated into folders within the 'Songs' folder." & @crlf & "Add at least 5 songs to each folder!" & @CRLF & @CRLF & "It won't shutdown if you have any unsaved data on your computer!")
Case $Apply
$1=GUICtrlRead($Turnofftime)
$o3=$o2
$o2=$1
GUICtrlSetData($Apply, "Applied")
Case $Start
If $Pause=1 Then
If $Getnew=0 Then
_SoundResume($open)
EndIf
$MakePause=0
GUICtrlSetData($Start, "Pause")
EndIf
If $Pause=0 Then
_SoundPause($open)
$MakePause=1
GUICtrlSetData($Start, "Start")
EndIf
If $MakePause=0 Then $Pause=0
If $MakePause=1 Then $Pause=1
EndSwitch
If $1=@HOUR & ":" & @MIN Then $do="Shutdown"
If $Pause=0 Then
If $GetNewSoon=1 And TimerDiff($GetNewTimer)>5000 Then
$Getnew=1
$4thlast=$3rdlast
$3rdlast=$2ndlast
$2ndlast=$last
$last=$random
$GetNewSoon=0
EndIf
If $Getnew=1 Then
If $do="Shutdown" Then ExitLoop
$random=Random(1, $AllFiles[0], 1)
$FileDir=$AllFiles[$random]
$type = stringRight($FileDir, 4)
If $type<>".mp3" Then
$Nosong=1
Else
If $random<>$last and $random<>$2ndlast and $random<>$3rdlast and $random<>$4thlast Then
_SoundClose($open)
$open=_SoundOpen($FileDir)
$length=_SoundLength($open, 2)
_SoundPlay($open, 0)
$Getnew=0
$Nosong=1
EndIf
EndIf
EndIf
If _SoundPos($open, 2) > $length-1 Then
$GetNewTimer=TimerInit()
$GetNewSoon=1
EndIf
EndIf

GetAllTimes()
WEnd

_SoundClose($open)
$SD=GUICtrlRead($SDType)
If $SD = "Shutdown" Then $SD = 1
If $SD = "Logoff" Then $SD = 0
If $SD = "Reboot" Then $SD = 2
If $SD = "Standby" Then $SD = 32
If $SD = "Hibernate" Then $SD = 64
If $SD = "Exit Program" Then Exit
Shutdown($SD)

Func CheckStuff()
If GUICtrlRead($DecreaseSound)=1 Then
DecreaseVolume()
EndIf

If TimerDiff($Timer)>1400 and $MakeToolTip=True Then
ToolTip($ToolTip)
$MakeToolTip=False
EndIf

If $o1<>GUICtrlRead($Turnofftime) Then
$o1=GUICtrlRead($Turnofftime)
GUICtrlSetData($Apply, "Apply")
EndIf
If $o2=GUICtrlRead($Turnofftime) And GUICtrlRead($Apply)="Apply" Then
GUICtrlSetData($Apply, "Applied")
EndIf
EndFunc

Func DecreaseVolume()
If $Pause=0 Then
;~  Do stuff you cant do without audioendpointvolume
EndIf
EndFunc

Func GetAllTimes()
$2=@HOUR & ":" & @MIN & ":" & @SEC
$11=$1 & ":00"
$1TrimLeft=StringTrimLeft($11, 6)
$1TrimRight=StringTrimRight($11, 6)
$2TrimLeft=StringTrimLeft($2, 6)
$2TrimRight=StringTrimRight($2, 6)
$1GetMiddle1=StringTrimLeft($11, 3)
$1GetMiddle2=StringTrimRight($1GetMiddle1, 3)
$2GetMiddle1=StringTrimLeft($2, 3)
$2GetMiddle2=StringTrimRight($2GetMiddle1, 3)
$1Trim=$1GetMiddle2*60+$1TrimLeft+$1TrimRight*3600
$2Trim=$2GetMiddle2*60+$2TrimLeft+$2TrimRight*3600
$sOldFormattedTime=$sFormattedTime
If $1Trim>$2Trim Then
$Trim=($1Trim-$2Trim)*1000
$sFormattedTime = _TimeReadable2($Trim)
EndIf
If $1Trim<$2Trim Then
$sEndDT = _DateAdd("D", 1, _NowCalcDate()) & " " & $1 & ":00"
$iDiff = _DateDiff("s", _NowCalc(), $sEndDT)
$iHours = Int($iDiff / 3600)
$iMinutes = Int(($iDiff - ($iHours * 3600)) / 60)
$iSeconds = $iDiff - (($iHours * 3600) + ($iMinutes * 60))
$sFormattedTime = StringRight("0" & $iHours, 2) & ":" & StringRight("0" & $iMinutes, 2) & ":" & StringRight("0" & $iSeconds, 2)
EndIf
If $do="Shutdown" Then $sFormattedTime="00:00:00"
    If $sOldFormattedTime<>$sFormattedTime Then GUICtrlSetData($label3, $sFormattedTime)


$OldDisplayTime=$DisplayTime
$OldTimeleft=$Timeleft
$DisplayTime = _SoundPos($open, 2)
$Timeleft = $length-$DisplayTime
$Timeleft = _TimeReadable($Timeleft)
$DisplayTime = _TimeReadable($DisplayTime)
If $OldDisplayTime <> $DisplayTime Then GUICtrlSetData($label, $DisplayTime)
If $OldTimeleft <> $Timeleft Then GUICtrlSetData($label2, $Timeleft)
EndFunc

Func _IsAnyKeyPressed($vDLL = 'user32.dll')
If __KeyPressCheck(1, 221, -1, $vDLL) Then Return 1
Return 0
EndFunc

Func __KeyPressCheck($iStart, $iFinish, $iHexKey = -1, $vDLL = 'user32.dll')
Local $ikey, $ia_R
For $ikey = $iStart To $iFinish
If $iHexKey == -1 Then $ia_R = DllCall($vDLL, 'int', 'GetAsyncKeyState', 'int', '0x' & Hex($ikey, 2))
If $iHexKey <> -1 Then $ia_R = DllCall($vDLL, 'int', 'GetAsyncKeyState', 'int', '0x' & $iHexKey)
If Not @error And BitAND($ia_R[0], 0x8000) = 0x8000 Then Return 1
Next
Return 0
EndFunc

Func _TimeReadable($mili)
$TotalSeconds = Int($mili / 1000)
$Hours = Int($TotalSeconds / 3600)
$Minutes = Int(($TotalSeconds - ($Hours * 3600)) / 60)
$Seconds = $TotalSeconds - (($Hours * 3600) + ($Minutes * 60))
If $Hours < 10 Then $Hours = "0" & $Hours
If $Minutes < 10 Then $Minutes = "0" & $Minutes
If $Seconds < 10 Then $Seconds = "0" & $Seconds
$FormattedTime = $Minutes & ":" & $Seconds
Return $FormattedTime
EndFunc

Func _TimeReadable2($mili)
$TotalSeconds = Int($mili / 1000)
$Hours = Int($TotalSeconds / 3600)
$Minutes = Int(($TotalSeconds - ($Hours * 3600)) / 60)
$Seconds = $TotalSeconds - (($Hours * 3600) + ($Minutes * 60))
If $Hours < 10 Then $Hours = "0" & $Hours
If $Minutes < 10 Then $Minutes = "0" & $Minutes
If $Seconds < 10 Then $Seconds = "0" & $Seconds
$FormattedTime = $Hours & ":" & $Minutes & ":" & $Seconds
Return $FormattedTime
EndFunc














Func _FileListToArrayEx($s_path, $s_mask = "*.*", $i_flag = 0, $s_exclude = -1, $f_recurse = True, $f_full_path = True)

    If FileExists($s_path) = 0 Then Return SetError(1, 1, 0)

    ; Strip trailing backslash, and add one after to make sure there's only one
    $s_path = StringRegExpReplace($s_path, "[\\/]+\z", "") & "\"

    ; Set all defaults
    If $s_mask = -1 Or $s_mask = Default Then $s_mask = "*.*"
    If $i_flag = -1 Or $i_flag = Default Then $i_flag = 0
    If $s_exclude = -1 Or $s_exclude = Default Then $s_exclude = ""

    ; Look for bad chars
    If StringRegExp($s_mask, "[/:><\|]") Or StringRegExp($s_exclude, "[/:><\|]") Then
        Return SetError(2, 2, 0)
    EndIf

    ; Strip leading spaces between semi colon delimiter
    $s_mask = StringRegExpReplace($s_mask, "\s*;\s*", ";")
    If $s_exclude Then $s_exclude = StringRegExpReplace($s_exclude, "\s*;\s*", ";")

    ; Confirm mask has something in it
    If StringStripWS($s_mask, 8) = "" Then Return SetError(2, 2, 0)
    If $i_flag < 0 Or $i_flag > 2 Then Return SetError(3, 3, 0)

    ; Validate and create path + mask params
    Local $a_split = StringSplit($s_mask, ";"), $s_hold_split = ""
    For $i = 1 To $a_split[0]
        If StringStripWS($a_split[$i], 8) = "" Then ContinueLoop
        If StringRegExp($a_split[$i], "^\..*?\..*?\z") Then
            $a_split[$i] &= "*" & $a_split[$i]
        EndIf
        $s_hold_split &= '"' & $s_path & $a_split[$i] & '" '
    Next
    $s_hold_split = StringTrimRight($s_hold_split, 1)
    If $s_hold_split = "" Then $s_hold_split = '"' & $s_path & '*.*"'

    Local $i_pid, $s_stdout, $s_hold_out, $s_dir_file_only = "", $s_recurse = "/s "
    If $i_flag = 1 Then $s_dir_file_only = ":-d"
    If $i_flag = 2 Then $s_dir_file_only = ":D"
    If Not $f_recurse Then $s_recurse = ""

    $i_pid = Run(@ComSpec & " /c dir /b " & $s_recurse & "/a" & $s_dir_file_only & " " & $s_hold_split, "", @SW_HIDE, 4 + 2)

    While 1
        $s_stdout = StdoutRead($i_pid)
        If @error Then ExitLoop
        $s_hold_out &= $s_stdout
    WEnd

    $s_hold_out = StringRegExpReplace($s_hold_out, "\v+\z", "")
    If Not $s_hold_out Then Return SetError(4, 4, 0)

    ; Parse data and find matches based on flags
    Local $a_fsplit = StringSplit(StringStripCR($s_hold_out), @LF), $s_hold_ret
    $s_hold_out = ""

    If $s_exclude Then $s_exclude = StringReplace(StringReplace($s_exclude, "*", ".*?"), ";", "|")

    For $i = 1 To $a_fsplit[0]
        If $s_exclude And StringRegExp(StringRegExpReplace( _
            $a_fsplit[$i], "(.*?[\\/]+)*(.*?\z)", "\2"), "(?i)\Q" & $s_exclude & "\E") Then ContinueLoop
        If StringRegExp($a_fsplit[$i], "^\w:[\\/]+") = 0 Then $a_fsplit[$i] = $s_path & $a_fsplit[$i]
        If $f_full_path Then
            $s_hold_ret &= $a_fsplit[$i] & Chr(1)
        Else
            $s_hold_ret &= StringRegExpReplace($a_fsplit[$i], "((?:.*?[\\/]+)*)(.*?\z)", "$2") & Chr(1)
        EndIf
    Next

    $s_hold_ret = StringTrimRight($s_hold_ret, 1)
    If $s_hold_ret = "" Then Return SetError(5, 5, 0)

    Return StringSplit($s_hold_ret, Chr(1))
EndFunc
Link to comment
Share on other sites

  • Moderators

TheNorwegianUser,

Why are you not using the Sound.au3 function that is designed to tell you when a sound file has ended? The return from _SoundStatus will do what you want without the need to measure the elapsed time of the track itself. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

TheNorwegianUser,

Why are you not using the Sound.au3 function that is designed to tell you when a sound file has ended? The return from _SoundStatus will do what you want without the need to measure the elapsed time of the track itself. ;)

M23

Oh, thanks!

Also, which filetypes can it play?

Link to comment
Share on other sites

  • Moderators

TheNorwegianUser,

In principle the UDF shoudl work on all sound file types for which you have a CODEC installed and which are accessible by the MCI DLL. I use it very successfully on mp3, wma and wav files - I have not tried on any others as that is all I use. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...