Merge pull request #28 from pblivingston/special-commands

Special commands
This commit is contained in:
Onyx and Iris 2025-12-04 10:38:13 +00:00 committed by GitHub
commit 1ad91b455a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 179 additions and 42 deletions

View File

@ -39,6 +39,10 @@ Recorder.FileType changed from method to write-only property
- Recorder.Prefix - Recorder.Prefix
- Recorder.Eject() references 'Command.Eject' - Recorder.Eject() references 'Command.Eject'
- Recorder.State - Recorder.State
- Command.Reset()
- Command.Save($filepath)
- Command.StorePreset()
- Command.RecallPreset()
### Changed ### Changed

View File

@ -418,33 +418,44 @@ $vmr.vban.outstream[3].bit = 16
Certain 'special' commands are defined by the API as performing actions rather than setting values. Certain 'special' commands are defined by the API as performing actions rather than setting values.
The following commands are available:
- hide
- showvbanchat: bool, (write only)
- lock: bool, (write only)
The following methods are available: The following methods are available:
- Show() - Show()
- Hide()
- Lock()
- Unlock()
- ShowVBANChat()
- HideVBANChat()
- Restart() - Restart()
- Shutdown() - Shutdown()
- Reset(): Reset all config
- Save($filepath): string
- Load($filepath): string - Load($filepath): string
- StorePreset($index, $name): (int, string)
- RecallPreset($index or $name): (int or string)
- RunMacrobuttons(): Launches the macrobuttons app - RunMacrobuttons(): Launches the macrobuttons app
- CloseMacrobuttons(): Closes the macrobuttons app - CloseMacrobuttons(): Closes the macrobuttons app
example: example:
```powershell ```powershell
$vmr.command.show() $vmr.command.Show()
$vmr.command.Lock()
$vmr.command.lock = $true
$vmr.command.Load("path/to/filename.xml") $vmr.command.Load("path/to/filename.xml")
$vmr.command.RunMacrobuttons() $vmr.command.RunMacrobuttons()
$vmr.command.StorePreset(63, 'example')
$vmr.command.StorePreset('example')
$vmr.command.StorePreset(63) # same as StorePreset(63, '')
$vmr.command.StorePreset() # same as StorePreset(''), overwrites last recalled
$vmr.command.RecallPreset('example')
$vmr.command.RecallPreset(63)
$vmr.command.RecallPreset() # same as RecallPreset(''), recalls last recalled
``` ```
StorePreset('') and RecallPreset('') interact with the 'selected' preset. This is highlighted green in the GUI. Recalling a preset selects it. Storing a preset via GUI also selects it. Storing a preset with StorePreset does not select it.
### Fx ### Fx
The following Fx commands are available: The following Fx commands are available:

View File

@ -1,6 +1,6 @@
class Special : IRemote { class Special : IRemote {
Special ([Object]$remote) : base ($remote) { Special ([Object]$remote) : base ($remote) {
AddActionMembers -PARAMS @('restart', 'shutdown', 'show') AddActionMembers -PARAMS @('restart', 'shutdown', 'show', 'lock', 'reset')
} }
[string] identifier () { [string] identifier () {
@ -17,36 +17,57 @@ class Special : IRemote {
Stop-Process -Name 'VoicemeeterMacroButtons' Stop-Process -Name 'VoicemeeterMacroButtons'
} }
hidden $_hide = $($this | Add-Member ScriptProperty 'hide' ` [void] Hide () {
{ $this.Setter('show', $false)
$this._hide = $this.Setter('show', $false)
} `
{}
)
hidden $_showvbanchat = $($this | Add-Member ScriptProperty 'showvbanchat' `
{
$this.Getter('DialogShow.VBANCHAT')
} `
{
param([bool]$arg)
$this._showvbanchat = $this.Setter('DialogShow.VBANCHAT', $arg)
} }
)
hidden $_lock = $($this | Add-Member ScriptProperty 'lock' ` [void] Unlock () {
{ $this.Setter('lock', $false)
$this._lock = $this.Getter('lock') }
} `
{ [void] ShowVBANChat () {
param([bool]$arg) $this.Setter('DialogShow.VBANCHAT', $true)
$this._lock = $this.Setter('lock', $arg) }
[void] HideVBANChat () {
$this.Setter('DialogShow.VBANCHAT', $false)
} }
)
[void] Load ([string]$filename) { [void] Load ([string]$filename) {
$this.Setter('load', $filename) $this.Setter('load', $filename)
} }
[void] Save ([string]$filename) {
$this.Setter('save', $filename)
}
[void] StorePreset () {
$this.Setter('updatepreset', '')
}
[void] StorePreset ([string]$name) {
$this.Setter('updatepreset', $name)
}
[void] StorePreset ([int]$index) {
$this.Setter('preset[{0}].store' -f $index, '')
}
[void] StorePreset ([int]$index, [string]$name) {
$this.Setter('preset[{0}].store' -f $index, $name)
}
[void] RecallPreset () {
$this.Setter('recallpreset', '')
}
[void] RecallPreset ([string]$name) {
$this.Setter('recallpreset', $name)
}
[void] RecallPreset ([int]$index) {
$this.Setter('preset[{0}].recall' -f $index, 1)
}
} }
function Make_Command([Object]$remote) { function Make_Command([Object]$remote) {

View File

@ -184,12 +184,6 @@ Describe -Tag 'higher', -TestName 'All Higher Tests' {
} }
} }
Context 'Command' {
It 'Should set command.lock' {
$vmr.command.lock = $value
}
}
Context 'Fx' -Skip:$ifNotPotato { Context 'Fx' -Skip:$ifNotPotato {
Context 'Delay' { Context 'Delay' {
It 'Should set and get Fx.delay.on' { It 'Should set and get Fx.delay.on' {
@ -914,6 +908,7 @@ Describe -Tag 'higher', -TestName 'All Higher Tests' {
$vmr.recorder.filetype = $filetype $vmr.recorder.filetype = $filetype
$vmr.recorder.state = 'record' $vmr.recorder.state = 'record'
Start-Sleep -Milliseconds 100
$stamp = '{0:yyyy-MM-dd} at {0:HH}h{0:mm}m{0:ss}s' -f (Get-Date) $stamp = '{0:yyyy-MM-dd} at {0:HH}h{0:mm}m{0:ss}s' -f (Get-Date)
$vmr.recorder.state | Should -Be 'record' $vmr.recorder.state | Should -Be 'record'
Start-Sleep -Milliseconds 2000 Start-Sleep -Milliseconds 2000
@ -948,6 +943,51 @@ Describe -Tag 'higher', -TestName 'All Higher Tests' {
} }
} }
} }
Context 'Command' {
It 'Should save, reset, then load config' -ForEach @(
@{ Gain = -27.1; Mode = 'composite'; Bit = 24; Port = 1044 }
) {
$tmp = [System.IO.Path]::Combine([System.IO.Path]::GetTempPath(), "vmrconfig-$(New-Guid).xml")
try {
# set some values
$vmr.strip[$virt_in].gain = $gain
$vmr.bus[$phys_out].mode.set($mode)
$vmr.vban.outstream[$vban_outA].bit = $bit
$vmr.vban.port = $port
# save config
$vmr.command.save($tmp)
Start-Sleep -Milliseconds 100
Test-Path $tmp | Should -BeTrue
# reset config
$vmr.command.reset()
Start-Sleep -Milliseconds 500
# verify default values
$vmr.strip[$virt_in].gain | Should -Be 0.0
$vmr.bus[$phys_out].mode.get() | Should -Be 'normal'
$vmr.vban.outstream[$vban_outA].bit | Should -Be 16
$vmr.vban.port | Should -Be 6980
# load config
$vmr.command.load($tmp)
Start-Sleep -Milliseconds 500
# verify values
$vmr.strip[$virt_in].gain | Should -Be $gain
$vmr.bus[$phys_out].mode.get() | Should -Be $mode
$vmr.vban.outstream[$vban_outA].bit | Should -Be $bit
$vmr.vban.port | Should -Be $port
}
finally {
if (Test-Path $tmp) {
Remove-Item $tmp -Force
}
}
}
}
} }
Describe 'Action Tests' -Tag 'action' { Describe 'Action Tests' -Tag 'action' {
@ -962,6 +1002,7 @@ Describe -Tag 'higher', -TestName 'All Higher Tests' {
BeforeEach { BeforeEach {
$vmr.recorder.record() $vmr.recorder.record()
Start-Sleep -Milliseconds 100
$stamp = '{0:yyyy-MM-dd} at {0:HH}h{0:mm}m{0:ss}s' -f (Get-Date) $stamp = '{0:yyyy-MM-dd} at {0:HH}h{0:mm}m{0:ss}s' -f (Get-Date)
Start-Sleep -Milliseconds 2000 Start-Sleep -Milliseconds 2000
@ -1004,5 +1045,64 @@ Describe -Tag 'higher', -TestName 'All Higher Tests' {
} }
} }
} }
Context 'Command' {
Context 'Preset Scene' -ForEach @(
@{ Index = 0; Name = 'Test Scene 1' }
@{ Index = 63; Name = 'Test Scene 64' }
) {
It "Should store preset at index '$index' with name '$name'" -ForEach @(
@{ Value = -15.5 }, @{ Value = -52.9 }
) {
$vmr.bus[$phys_out].gain = $value
$vmr.command.storepreset($index, $name)
$vmr.bus[$phys_out].gain = 0.0
$vmr.command.recallpreset($name)
Start-Sleep -Milliseconds 500
$vmr.bus[$phys_out].gain | Should -Be $value
}
It "Should update preset at index '$index'" -ForEach @(
@{ Value = $false }, @{ Value = $true }
) {
$vmr.strip[$virt_in].B1 = $value
$vmr.command.storepreset($index)
$vmr.strip[$virt_in].B1 = -not $value
$vmr.command.recallpreset($index)
Start-Sleep -Milliseconds 500
$vmr.strip[$virt_in].B1 | Should -Be $value
}
It "Should update preset with name '$name'" -ForEach @(
@{ Value = 2 }, @{ Value = 1 }
) {
$vmr.bus[$virt_out].mono = $value
$vmr.command.storepreset($name)
$vmr.bus[$virt_out].mono = 0
$vmr.command.recallpreset($name)
Start-Sleep -Milliseconds 500
$vmr.bus[$virt_out].mono | Should -Be $value
}
It "Should update last recalled preset ($index`: $(($index + 1).ToString('00')) - $name)" -ForEach @(
@{ Value = 0.8 }, @{ Value = 0.3 }
) {
$vmr.strip[$phys_in].color_y = $value
$vmr.command.storepreset()
$vmr.strip[$phys_in].color_y = 0.0
$vmr.command.recallpreset()
Start-Sleep -Milliseconds 500
$vmr.strip[$phys_in].color_y | Should -Be $value
}
}
}
} }
} }

View File

@ -12,6 +12,7 @@ function Test-RecDir ([object]$vmr, [string]$recDir) {
try { try {
$vmr.recorder.record() $vmr.recorder.record()
Start-Sleep -Milliseconds 100
$stamp = '{0:yyyy-MM-dd} at {0:HH}h{0:mm}m{0:ss}s' -f (Get-Date) $stamp = '{0:yyyy-MM-dd} at {0:HH}h{0:mm}m{0:ss}s' -f (Get-Date)
Start-Sleep -Milliseconds 2000 Start-Sleep -Milliseconds 2000