From f8708d1b75864147b97f0fa52c8c1a5e5bcbbc9d Mon Sep 17 00:00:00 2001 From: James Brundage <@github.com> Date: Tue, 13 Feb 2024 22:41:56 -0800 Subject: [PATCH] feat: OBS.Beat.TapBPM ( Fixes #191 ) --- Types/OBS.Beat/TapBPM.ps1 | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Types/OBS.Beat/TapBPM.ps1 diff --git a/Types/OBS.Beat/TapBPM.ps1 b/Types/OBS.Beat/TapBPM.ps1 new file mode 100644 index 000000000..30bd0bc06 --- /dev/null +++ b/Types/OBS.Beat/TapBPM.ps1 @@ -0,0 +1,36 @@ +<# +.SYNOPSIS + Tap BPM +.DESCRIPTION + Tap out a BPM by pressing ENTER on N beats. + + The BPM will be set to the average time between taps, and the beat will be started. +#> +param( +# The number of taps. +[int] +$TapCount = 8 +) + +Write-Host "Press ENTER on the next..." +$beatTimes = @() +$beatTimeStart = [datetime]::Now +$lastBeatTime = [timespan]::FromMilliseconds(0) +$beatTimes = do { + Write-Host "$($TapCount -$beatTimes.Length) beats:" -NoNewline + $readNothing = Read-Host + $beatTimes += [datetime]::Now + $lastBeatTime = $beatTimes[-1] - $beatTimeStart + $beatTimeStart = [datetime]::Now + $lastBeatTime +} while ($beatTimes.Length -lt $TapCount) + +$averageTimeBetweenBeats = + $beatTimes.TotalMilliseconds | Measure-Object -Average | Select-Object -ExpandProperty Average + +$TappedBpm = (60 * 1000) / $averageTimeBetweenBeats +$this.BPM = $TappedBpm +$this.BeatStart = $beatTimes[-1] +$TappedBpm + +