diff --git a/CHANGELOG.md b/CHANGELOG.md index e56a5c4..ef31a21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Before any major/minor/patch is released all test units will be run to verify th - Option class - Device classes - EQ class +- FX class ## [3.3.0] - 2024-06-29 diff --git a/README.md b/README.md index 3024ac1..55007ca 100644 --- a/README.md +++ b/README.md @@ -440,6 +440,21 @@ $vmr.command.Load("path/to/filename.xml") $vmr.command.RunMacrobuttons() ``` +### Fx + +The following Fx commands are available: + +- Reverb.on: bool +- Reverb.ab: bool +- Delay.on: bool +- Delay.ab: bool + +for example: + +```powershell +$vmr.fx.reverb.ab = $false +``` + ### Patch The following Patch commands are available: diff --git a/lib/Voicemeeter.psm1 b/lib/Voicemeeter.psm1 index b786667..271a8e5 100644 --- a/lib/Voicemeeter.psm1 +++ b/lib/Voicemeeter.psm1 @@ -14,6 +14,7 @@ . $PSScriptRoot\recorder.ps1 . $PSScriptRoot\patch.ps1 . $PSScriptRoot\option.ps1 +. $PSScriptRoot\fx.ps1 . $PSScriptRoot\profiles.ps1 class Remote { @@ -125,6 +126,7 @@ class RemotePotato : Remote { [System.Collections.ArrayList]$button [PSCustomObject]$vban [Object]$command + [Object]$fx [Object]$patch [Object]$option [Object]$recorder @@ -135,6 +137,7 @@ class RemotePotato : Remote { $this.button = Make_Buttons $this.vban = Make_Vban($this) $this.command = Make_Command($this) + $this.fx = Make_Fx($this) $this.patch = Make_Patch($this) $this.option = Make_Option($this) $this.recorder = Make_Recorder($this) diff --git a/lib/fx.ps1 b/lib/fx.ps1 new file mode 100644 index 0000000..b5a25d3 --- /dev/null +++ b/lib/fx.ps1 @@ -0,0 +1,37 @@ +class Fx : IRemote { + [Object]$reverb + [Object]$delay + + Fx ([Object]$remote) : base ($remote) { + $this.reverb = [FxReverb]::new($remote) + $this.delay = [FxDelay]::new($remote) + } + + [string] identifier () { + return 'Fx' + } +} + +class FxReverb : IRemote { + FxReverb ([Object]$remote) : base ($remote) { + AddBoolMembers -PARAMS @('on', 'ab') + } + + [string] identifier () { + return 'Fx.Reverb' + } +} + +class FxDelay : IRemote { + FxDelay ([Object]$remote) : base ($remote) { + AddBoolMembers -PARAMS @('on', 'ab') + } + + [string] identifier () { + return 'Fx.Delay' + } +} + +function Make_Fx ([Object]$remote) { + return [Fx]::new($remote) +} \ No newline at end of file diff --git a/tests/higher.Tests.ps1 b/tests/higher.Tests.ps1 index 68af850..a7a1b03 100644 --- a/tests/higher.Tests.ps1 +++ b/tests/higher.Tests.ps1 @@ -136,6 +136,32 @@ Describe -Tag 'higher', -TestName 'All Higher Tests' { $vmr.command.lock = $value } } + + Context 'Fx' -Skip:$ifNotPotato { + Context 'Delay' { + It 'Should set and get Fx.delay.on' { + $vmr.fx.delay.on = $value + $vmr.fx.delay.on | Should -Be $expected + } + + It 'Should set and get Fx.delay.ab' { + $vmr.fx.delay.ab = $value + $vmr.fx.delay.ab | Should -Be $expected + } + } + + Context 'Reverb' { + It 'Should set and get Fx.reverb.on' { + $vmr.fx.reverb.on = $value + $vmr.fx.reverb.on | Should -Be $expected + } + + It 'Should set and get Fx.reverb.ab' { + $vmr.fx.reverb.ab = $value + $vmr.fx.reverb.ab | Should -Be $expected + } + } + } Context 'Patch' { It 'Should set and get Patch.insert[$insert]' -Skip:$ifBasic {