Compare commits

..

No commits in common. "ff1bd5e6cc18b59caa37b67dc4cb6ddead8797cf" and "5bda43131b8910a986e8477bc357e2a7b564cae8" have entirely different histories.

14 changed files with 96 additions and 372 deletions

63
.vscode/launch.json vendored
View File

@ -1,63 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "PowerShell: Launch CLI Example",
"type": "PowerShell",
"request": "launch",
"cwd": "${workspaceRoot}/examples/cli",
"script": "${workspaceFolder}/examples/cli/CLI.ps1",
"args": [
"-s",
"\"strip[0].mute\",",
"\"!strip[0].mute\",",
"\"strip[0].mute\",",
"\"bus[2].eq.on=1\",",
"\"command.lock=1\""
],
"createTemporaryIntegratedConsole": true
},
{
"name": "PowerShell: Launch NextBus Example",
"type": "PowerShell",
"request": "launch",
"cwd": "${workspaceRoot}/examples/nextbus",
"script": "${workspaceFolder}/examples/nextbus/GoTo-NextBus.ps1",
"args": [],
"createTemporaryIntegratedConsole": true
},
{
"name": "PowerShell: Launch OBS Example",
"type": "PowerShell",
"request": "launch",
"cwd": "${workspaceRoot}/examples/obs",
"script": "${workspaceFolder}/examples/obs/Vm-Obs-Sync.ps1",
"args": [],
"createTemporaryIntegratedConsole": true
},
{
"name": "PowerShell: Run Pester Tests",
"type": "PowerShell",
"request": "launch",
"cwd": "${workspaceRoot}",
"script": "${workspaceFolder}/tests/pre-commit.ps1",
"args": [],
"createTemporaryIntegratedConsole": true
},
{
"name": "PowerShell: Launch Quick Test",
"type": "PowerShell",
"request": "launch",
"cwd": "${workspaceRoot}",
"script": "${workspaceFolder}/quick.ps1",
"args": [
"-Verbose",
"-Debug"
],
"createTemporaryIntegratedConsole": true
}
]
}

View File

@ -9,15 +9,7 @@ Before any major/minor/patch is released all test units will be run to verify th
## [Unreleased] These changes have not been added to PSGallery yet ## [Unreleased] These changes have not been added to PSGallery yet
- [] - [x] Level methods for Strip,Bus classes implemented.
## [3.1.0]
### Added
- Level methods for Strip class implemented. See Strip.levels section in README.
- Level methods for Bus class implemented. See Bus.levels section in README.
- More Recorder commands implemented. See Recorder section in README.
## [3.0.0] ## [3.0.0]

View File

@ -390,18 +390,18 @@ $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: The following methods are available:
- show - show
- hide - hide
- restart - restart
- shutdown - shutdown
- showvbanchat: boolean (write only) - Load(filepath)
- lock: boolean (write only)
The following methods are available: The following properties are write only and accept boolean values:
- Load($filepath): string - showvbanchat
- lock
example: example:
@ -415,7 +415,7 @@ $vmr.command.Load("path/to/filename.xml")
### Recorder ### Recorder
The following commands are available: The following methods are available:
- play - play
- stop - stop
@ -423,53 +423,19 @@ The following commands are available:
- record - record
- ff - ff
- rew - rew
- A1 - A5: boolean
- B1 - B3: boolean
- samplerate: int (22050, 24000, 32000, 44100, 48000, 88200, 96000, 176400, 192000)
- bitresolution: int (8, 16, 24, 32)
- channel: int from 1 to 8
- kbps: int (32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320)
The following methods are available: The following properties accept boolean values.
- Load($filepath): string - loop
- GoTo($timestring): string, must match the format 'hh:mm:ss' - A1 - A5
- FileType($format): string, ('wav', 'aiff', 'bwf', 'mp3') - B1 - B3
example: example:
```powershell ```powershell
$vmr.recorder.play $vmr.recorder.play
$vmr.recorder.A1 = $true
$vmr.recorder.GoTo("00:01:15") # go to 1min 15sec into track $vmr.recorder.loop = $true
```
#### Mode
The following commands are available:
- recbus
- playonload
- loop
- multitrack
example:
```powershell
$vmr.recorder.mode.loop = $true
```
#### ArmStrip[i]|ArmBus[i]
The following method is available:
- Set($val): boolean
example:
```powershell
$vmr.recorder.armstrip[0].Set($true)
``` ```
### Multiple parameters ### Multiple parameters

View File

@ -63,4 +63,4 @@ function main {
finally { Disconnect-Voicemeeter } finally { Disconnect-Voicemeeter }
} }
main if ($MyInvocation.InvocationName -ne '.') { main }

View File

@ -68,4 +68,4 @@ function main {
} }
} }
main if ($MyInvocation.InvocationName -ne '.') { main }

View File

@ -75,7 +75,7 @@ class RemoteBasic : Remote {
$this.bus = Make_Buses($this) $this.bus = Make_Buses($this)
$this.button = Make_Buttons $this.button = Make_Buttons
$this.vban = Make_Vban($this) $this.vban = Make_Vban($this)
$this.command = Make_Command($this) $this.command = Make_Command
} }
} }
@ -92,7 +92,7 @@ class RemoteBanana : Remote {
$this.bus = Make_Buses($this) $this.bus = Make_Buses($this)
$this.button = Make_Buttons $this.button = Make_Buttons
$this.vban = Make_Vban($this) $this.vban = Make_Vban($this)
$this.command = Make_Command($this) $this.command = Make_Command
$this.recorder = Make_Recorder($this) $this.recorder = Make_Recorder($this)
} }
} }
@ -110,7 +110,7 @@ class RemotePotato : Remote {
$this.bus = Make_Buses($this) $this.bus = Make_Buses($this)
$this.button = Make_Buttons $this.button = Make_Buttons
$this.vban = Make_Vban($this) $this.vban = Make_Vban($this)
$this.command = Make_Command($this) $this.command = Make_Command
$this.recorder = Make_Recorder($this) $this.recorder = Make_Recorder($this)
} }
} }

View File

@ -1,6 +1,6 @@
function Setup_DLL { function Setup_DLL {
try { try {
$vb_path = Get_VMPath $vb_path = Get_VBPath
if ([string]::IsNullOrWhiteSpace($vb_path)) { if ([string]::IsNullOrWhiteSpace($vb_path)) {
throw [VMRemoteError]::new("couldn't get Voicemeeter path") throw [VMRemoteError]::new("couldn't get Voicemeeter path")

View File

@ -18,15 +18,15 @@ class IBus {
} }
[single] Getter ($param) { [single] Getter ($param) {
return $this.remote.Getter("$($this.identifier()).$param") return Param_Get -PARAM "$($this.identifier()).$param" -IS_STRING $false
} }
[string] Getter_String ($param) { [string] Getter_String ($param) {
return $this.remote.Getter_String("$($this.identifier()).$param") return Param_Get -PARAM "$($this.identifier()).$param" -IS_STRING $true
} }
[void] Setter ($param, $val) { [void] Setter ($param, $set) {
$this.remote.Setter("$($this.identifier()).$param", $val) Param_Set -PARAM "$($this.identifier()).$param" -Value $set
} }
} }
@ -40,9 +40,9 @@ class Bus : IBus {
AddStringMembers -PARAMS @('label') AddStringMembers -PARAMS @('label')
AddFloatMembers -PARAMS @('gain', 'returnreverb', 'returndelay', 'returnfx1', 'returnfx2') AddFloatMembers -PARAMS @('gain', 'returnreverb', 'returndelay', 'returnfx1', 'returnfx2')
$this.mode = [BusMode]::new($index, $remote) $this.mode = [Mode]::new($index, $remote)
$this.eq = [BusEq]::new($index, $remote) $this.eq = [Eq]::new($index, $remote)
$this.levels = [BusLevels]::new($index, $remote) $this.levels = [Levels]::new($index, $remote)
} }
[void] FadeTo ([single]$target, [int]$time) { [void] FadeTo ([single]$target, [int]$time) {
@ -54,11 +54,11 @@ class Bus : IBus {
} }
} }
class BusLevels : IBus { class Levels : IBus {
[int]$init [int]$init
[int]$offset [int]$offset
BusLevels ([int]$index, [Object]$remote) : base ($index, $remote) { Levels ([int]$index, [Object]$remote) : base ($index, $remote) {
$this.init = $index * 8 $this.init = $index * 8
$this.offset = 8 $this.offset = 8
} }
@ -85,10 +85,10 @@ class BusLevels : IBus {
} }
} }
class BusMode : IBus { class Mode : IBus {
[System.Collections.ArrayList]$modes [System.Collections.ArrayList]$modes
BusMode ([int]$index, [Object]$remote) : base ($index, $remote) { Mode ([int]$index, [Object]$remote) : base ($index, $remote) {
$this.modes = @( $this.modes = @(
'normal', 'amix', 'bmix', 'repeat', 'composite', 'tvmix', 'upmix21', 'upmix41', 'upmix61', 'normal', 'amix', 'bmix', 'repeat', 'composite', 'tvmix', 'upmix21', 'upmix41', 'upmix61',
'centeronly', 'lfeonly', 'rearonly' 'centeronly', 'lfeonly', 'rearonly'
@ -111,8 +111,8 @@ class BusMode : IBus {
} }
} }
class BusEq : IBus { class Eq : IBus {
BusEq ([int]$index, [Object]$remote) : base ($index, $remote) { Eq ([int]$index, [Object]$remote) : base ($index, $remote) {
AddBoolMembers -PARAMS @('on', 'ab') AddBoolMembers -PARAMS @('on', 'ab')
} }
@ -125,12 +125,12 @@ class PhysicalBus : Bus {
[Object]$device [Object]$device
PhysicalBus ([int]$index, [Object]$remote) : base ($index, $remote) { PhysicalBus ([int]$index, [Object]$remote) : base ($index, $remote) {
$this.device = [BusDevice]::new($index, $remote) $this.device = [Device]::new($index, $remote)
} }
} }
class BusDevice : IBus { class Device : IBus {
BusDevice ([int]$index, [Object]$remote) : base ($index, $remote) { Device ([int]$index, [Object]$remote) : base ($index, $remote) {
} }
[string] identifier () { [string] identifier () {

View File

@ -1,13 +1,8 @@
. $PSScriptRoot\meta.ps1 . $PSScriptRoot\meta.ps1
. $PSScriptRoot\inst.ps1
class Special { class Special {
[Object]$remote Special () {
Special ([Object]$remote) {
AddActionMembers -PARAMS @('restart', 'shutdown', 'show') AddActionMembers -PARAMS @('restart', 'shutdown', 'show')
$this.remote = $remote
} }
[string] identifier () { [string] identifier () {
@ -19,26 +14,18 @@ class Special {
} }
[single] Getter ($param) { [single] Getter ($param) {
return $this.remote.Getter("$($this.identifier()).$param") return Param_Get -PARAM "$($this.identifier()).$param" -IS_STRING $false
} }
[void] Setter ($param, $val) { [void] Setter ($param, $val) {
if ($val -is [Boolean]) { if ($val -is [Boolean]) {
$this.remote.Setter("$($this.identifier()).$param", $(if ($val) { 1 } else { 0 })) Param_Set -PARAM "$($this.identifier()).$param" -Value $(if ($val) { 1 } else { 0 })
} }
else { else {
$this.remote.Setter("$($this.identifier()).$param", $val) Param_Set -PARAM "$($this.identifier()).$param" -Value $val
} }
} }
[void] RunMacrobuttons() {
Start-Process -FilePath $(Join-Path -Path $(Get_VMPath) -ChildPath "VoicemeeterMacroButtons.exe")
}
[void] CloseMacrobuttons() {
Stop-Process -Name "VoicemeeterMacroButtons"
}
hidden $_hide = $($this | Add-Member ScriptProperty 'hide' ` hidden $_hide = $($this | Add-Member ScriptProperty 'hide' `
{ {
$this._hide = $this.Setter('show', $false) $this._hide = $this.Setter('show', $false)
@ -71,6 +58,6 @@ class Special {
} }
} }
function Make_Command([Object]$remote) { function Make_Command {
return [Special]::new($remote) return [Special]::new()
} }

View File

@ -1,4 +1,4 @@
function Get_VMPath { function Get_VBPath {
$reg_path = "Registry::HKEY_LOCAL_MACHINE\Software" + ` $reg_path = "Registry::HKEY_LOCAL_MACHINE\Software" + `
(& { if ([Environment]::Is64BitOperatingSystem) { "\WOW6432Node" } else { "" } }) + ` (& { if ([Environment]::Is64BitOperatingSystem) { "\WOW6432Node" } else { "" } }) + `
"\Microsoft\Windows\CurrentVersion\Uninstall" "\Microsoft\Windows\CurrentVersion\Uninstall"

View File

@ -1,54 +1,12 @@
. $PSScriptRoot\meta.ps1 . $PSScriptRoot\meta.ps1
class IRecorder { class Recorder {
[Object]$remote [Object]$remote
IRecorder ([Object]$remote) { Recorder ([Object]$remote) {
$this.remote = $remote $this.remote = $remote
}
[single] Getter ($param) {
$this.Cmd($param) | Write-Debug
return $this.remote.Getter($this.Cmd($param))
}
[void] Setter ($param, $val) {
"$($this.Cmd($param))=$val" | Write-Debug
if ($val -is [Boolean]) {
$this.remote.Setter($this.Cmd($param), $(if ($val) { 1 } else { 0 }))
}
else {
$this.remote.Setter($this.Cmd($param), $val)
}
}
[string] Cmd ($param) {
if ([string]::IsNullOrEmpty($param)) {
return $this.identifier()
}
return "$($this.identifier()).$param"
}
}
class Recorder : IRecorder {
[Object]$remote
[Object]$mode
[System.Collections.ArrayList]$armstrip
[System.Collections.ArrayList]$armbus
Recorder ([Object]$remote) : base ($remote) {
$this.mode = [RecorderMode]::new($remote)
$this.armstrip = @()
0..($remote.kind.p_in + $remote.kind.v_in - 1) | ForEach-Object {
$this.armstrip.Add([RecorderArmStrip]::new($_, $remote))
}
$this.armbus = @()
0..($remote.kind.p_out + $remote.kind.v_out - 1) | ForEach-Object {
$this.armbus.Add([RecorderArmBus]::new($_, $remote))
}
AddActionMembers -PARAMS @('play', 'stop', 'pause', 'replay', 'record', 'ff', 'rew') AddActionMembers -PARAMS @('play', 'stop', 'pause', 'replay', 'record', 'ff', 'rew')
AddFloatMembers -PARAMS @('gain')
AddChannelMembers AddChannelMembers
} }
@ -60,146 +18,32 @@ class Recorder : IRecorder {
return $this.GetType().Name return $this.GetType().Name
} }
[single] Getter ($param) {
return Param_Get -PARAM "$($this.identifier()).$param" -IS_STRING $false
}
[void] Setter ($param, $val) {
if ($val -is [Boolean]) {
Param_Set -PARAM "$($this.identifier()).$param" -Value $(if ($val) { 1 } else { 0 })
}
else {
Param_Set -PARAM "$($this.identifier()).$param" -Value $val
}
}
hidden $_loop = $($this | Add-Member ScriptProperty 'loop' ` hidden $_loop = $($this | Add-Member ScriptProperty 'loop' `
{ {
[bool]$this.mode.loop return Write-Warning ("ERROR: $($this.identifier()).mode.loop is write only")
} ` } `
{ {
param($arg) param([bool]$arg)
$this.mode.loop = $arg $this._loop = $this.Setter('mode.loop', $arg)
}
)
hidden $_samplerate = $($this | Add-Member ScriptProperty 'samplerate' `
{
$this.Getter('samplerate')
} `
{
param([int]$arg)
$opts = @(22050, 24000, 32000, 44100, 48000, 88200, 96000, 176400, 192000)
if ($opts.Contains($arg)) {
$this._samplerate = $this.Setter('samplerate', $arg)
}
else {
"samplerate got: $arg, expected one of $opts" | Write-Warning
}
}
)
hidden $_bitresolution = $($this | Add-Member ScriptProperty 'bitresolution' `
{
$this.Getter('bitresolution')
} `
{
param([int]$arg)
$opts = @(8, 16, 24, 32)
if ($opts.Contains($arg)) {
$this._bitresolution = $this.Setter('bitresolution', $arg)
}
else {
"bitresolution got: $arg, expected one of $opts" | Write-Warning
}
}
)
hidden $_channel = $($this | Add-Member ScriptProperty 'channel' `
{
$this.Getter('channel')
} `
{
param([int]$arg)
if ($arg -ge 1 -and $arg -le 8) {
$this._channel = $this.Setter('channel', $arg)
}
else {
"channel got: $arg, expected value from 1 to 8" | Write-Warning
}
}
)
hidden $_kbps = $($this | Add-Member ScriptProperty 'kbps' `
{
$this.Getter('kbps')
} `
{
param([int]$arg)
$opts = @(32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320)
if ($opts.Contains($arg)) {
$this._kbps = $this.Setter('kbps', $arg)
}
else {
"kbps got: $arg, expected one of $opts" | Write-Warning
}
} }
) )
[void] Load ([string]$filename) { [void] Load ([string]$filename) {
$this.Setter('load', $filename) $this.Setter('load', $filename)
} }
[void] GoTo ([string]$timestring) {
try {
if ([datetime]::ParseExact($timestring, "HH:mm:ss", $null)) {
$timespan = [timespan]::Parse($timestring)
$this.Setter("GoTo", $timespan.TotalSeconds)
}
}
catch [FormatException] {
"Time string $timestring does not match the required format 'hh:mm:ss'" | Write-Warning
}
}
[void] FileType($format) {
[int]$val = 0
switch ($format) {
"wav" { $val = 1 }
"aiff" { $val = 2 }
"bwf" { $val = 3 }
"mp3" { $val = 100 }
default { "Filetype() got: $format, expected one of 'wav', 'aiff', 'bwf', 'mp3'" }
}
$this.Setter("filetype", $val)
}
}
class RecorderMode : IRecorder {
RecorderMode ([Object]$remote) : base ($remote) {
AddBoolMembers -PARAMS @('recbus', 'playonload', 'loop', 'multitrack')
}
[string] identifier () {
return "Recorder.Mode"
}
}
class RecorderArm : IRecorder {
[int]$index
RecorderArm ([int]$index, [Object]$remote) : base ($remote) {
$this.index = $index
}
Set ([bool]$val) {
$this.Setter("", $(if ($val) { 1 } else { 0 }))
}
}
class RecorderArmStrip : RecorderArm {
RecorderArmStrip ([int]$index, [Object]$remote) : base ($index, $remote) {
}
[string] identifier () {
return "Recorder.ArmStrip[$($this.index)]"
}
}
class RecorderArmBus : RecorderArm {
RecorderArmBus ([int]$index, [Object]$remote) : base ($index, $remote) {
}
[string] identifier () {
return "Recorder.ArmBus[$($this.index)]"
}
} }
function Make_Recorder ([Object]$remote) { function Make_Recorder ([Object]$remote) {

View File

@ -14,15 +14,15 @@ class IStrip {
} }
[single] Getter ($param) { [single] Getter ($param) {
return $this.remote.Getter("$($this.identifier()).$param") return Param_Get -PARAM "$($this.identifier()).$param" -IS_STRING $false
} }
[string] Getter_String ($param) { [string] Getter_String ($param) {
return $this.remote.Getter_String("$($this.identifier()).$param") return Param_Get -PARAM "$($this.identifier()).$param" -IS_STRING $true
} }
[void] Setter ($param, $val) { [void] Setter ($param, $val) {
$this.remote.Setter("$($this.identifier()).$param", $val) Param_Set -PARAM "$($this.identifier()).$param" -Value $val
} }
} }
@ -38,7 +38,7 @@ class Strip : IStrip {
AddChannelMembers AddChannelMembers
AddGainlayerMembers AddGainlayerMembers
$this.levels = [StripLevels]::new($index, $remote) $this.levels = [Levels]::new($index, $remote)
} }
[string] ToString() { [string] ToString() {
@ -54,11 +54,11 @@ class Strip : IStrip {
} }
} }
class StripLevels : IStrip { class Levels : IStrip {
[int]$init [int]$init
[int]$offset [int]$offset
StripLevels ([int]$index, [Object]$remote) : base ($index, $remote) { Levels ([int]$index, [Object]$remote) : base ($index, $remote) {
$p_in = $remote.kind.p_in $p_in = $remote.kind.p_in
if ($index -lt $p_in) { if ($index -lt $p_in) {
$this.init = $index * 2 $this.init = $index * 2
@ -112,16 +112,16 @@ class PhysicalStrip : Strip {
AddFloatMembers -PARAMS @('reverb', 'delay', 'fx1', 'fx2') AddFloatMembers -PARAMS @('reverb', 'delay', 'fx1', 'fx2')
AddBoolMembers -PARAMS @('postreverb', 'postdelay', 'postfx1', 'postfx2') AddBoolMembers -PARAMS @('postreverb', 'postdelay', 'postfx1', 'postfx2')
$this.comp = [StripComp]::new($index, $remote) $this.comp = [Comp]::new($index, $remote)
$this.gate = [StripGate]::new($index, $remote) $this.gate = [Gate]::new($index, $remote)
$this.denoiser = [StripDenoiser]::new($index, $remote) $this.denoiser = [Denoiser]::new($index, $remote)
$this.eq = [StripEq]::new($index, $remote) $this.eq = [Eq]::new($index, $remote)
$this.device = [StripDevice]::new($index, $remote) $this.device = [Device]::new($index, $remote)
} }
} }
class StripComp : IStrip { class Comp : IStrip {
StripComp ([int]$index, [Object]$remote) : base ($index, $remote) { Comp ([int]$index, [Object]$remote) : base ($index, $remote) {
AddFloatMembers -PARAMS @('gainin', 'ratio', 'threshold', 'attack', 'release', 'knee', 'gainout') AddFloatMembers -PARAMS @('gainin', 'ratio', 'threshold', 'attack', 'release', 'knee', 'gainout')
AddBoolMembers -PARAMS @('makeup') AddBoolMembers -PARAMS @('makeup')
} }
@ -141,8 +141,8 @@ class StripComp : IStrip {
) )
} }
class StripGate : IStrip { class Gate : IStrip {
StripGate ([int]$index, [Object]$remote) : base ($index, $remote) { Gate ([int]$index, [Object]$remote) : base ($index, $remote) {
AddFloatMembers -PARAMS @('threshold', 'damping', 'bpsidechain', 'attack', 'hold', 'release') AddFloatMembers -PARAMS @('threshold', 'damping', 'bpsidechain', 'attack', 'hold', 'release')
} }
@ -161,8 +161,8 @@ class StripGate : IStrip {
) )
} }
class StripDenoiser : IStrip { class Denoiser : IStrip {
StripDenoiser ([int]$index, [Object]$remote) : base ($index, $remote) { Denoiser ([int]$index, [Object]$remote) : base ($index, $remote) {
} }
[string] identifier () { [string] identifier () {
@ -180,8 +180,8 @@ class StripDenoiser : IStrip {
) )
} }
class StripEq : IStrip { class Eq : IStrip {
StripEq ([int]$index, [Object]$remote) : base ($index, $remote) { Eq ([int]$index, [Object]$remote) : base ($index, $remote) {
AddBoolMembers -PARAMS @('on', 'ab') AddBoolMembers -PARAMS @('on', 'ab')
} }
@ -190,8 +190,8 @@ class StripEq : IStrip {
} }
} }
class StripDevice : IStrip { class Device : IStrip {
StripDevice ([int]$index, [Object]$remote) : base ($index, $remote) { Device ([int]$index, [Object]$remote) : base ($index, $remote) {
} }
[string] identifier () { [string] identifier () {

View File

@ -1,11 +1,9 @@
class IVban { class IVban {
[int32]$index [int32]$index
[Object]$remote
[string]$direction [string]$direction
IVban ([int]$index, [Object]$remote, [string]$direction) { IVban ([int]$index, [string]$direction) {
$this.index = $index $this.index = $index
$this.remote = $remote
$this.direction = $direction $this.direction = $direction
} }
@ -18,20 +16,20 @@ class IVban {
} }
[single] Getter ($param) { [single] Getter ($param) {
return $this.remote.Getter("$($this.identifier()).$param") return Param_Get -PARAM "$($this.identifier()).$param" -IS_STRING $false
} }
[string] Getter_String ($param) { [string] Getter_String ($param) {
return $this.remote.Getter_String("$($this.identifier()).$param") return Param_Get -PARAM "$($this.identifier()).$param" -IS_STRING $true
} }
[void] Setter ($param, $val) { [void] Setter ($param, $val) {
$this.remote.Setter("$($this.identifier()).$param", $val) Param_Set -PARAM "$($this.identifier()).$param" -Value $val
} }
} }
class Vban : IVban { class Vban : IVban {
Vban ([int]$index, [Object]$remote, [string]$direction) : base ($index, $remote, $direction) { Vban ([int]$index, [string]$direction) : base ($index, $direction) {
} }
hidden $_on = $($this | Add-Member ScriptProperty 'on' ` hidden $_on = $($this | Add-Member ScriptProperty 'on' `
@ -70,7 +68,7 @@ class Vban : IVban {
} ` } `
{ {
param([string]$arg) param([string]$arg)
if ($arg -ge 1024 -and $arg -le 65535) { if ($arg -in 1024..65535) {
$this._port = $this.Setter('port', $arg) $this._port = $this.Setter('port', $arg)
} }
else { else {
@ -106,7 +104,7 @@ class Vban : IVban {
param([int]$arg) param([int]$arg)
if ($this.direction -eq "in") { Write-Warning ('Error, read only value') } if ($this.direction -eq "in") { Write-Warning ('Error, read only value') }
else { else {
if ($arg -ge 1 -and $arg -le 8) { if ($arg -in 1..8) {
$this._channel = $this.Setter('channel', $arg) $this._channel = $this.Setter('channel', $arg)
} }
else { else {
@ -144,7 +142,7 @@ class Vban : IVban {
param([int]$arg) param([int]$arg)
if ($this.direction -eq "in") { Write-Warning ('Error, read only value') } if ($this.direction -eq "in") { Write-Warning ('Error, read only value') }
else { else {
if ($arg -ge 0 -and $arg -le 4) { if ($arg -in 0..4) {
$this._quality = $this.Setter('quality', $arg) $this._quality = $this.Setter('quality', $arg)
} }
else { else {
@ -162,7 +160,7 @@ class Vban : IVban {
param([int]$arg) param([int]$arg)
if ($this.direction -eq "in") { Write-Warning ('Error, read only value') } if ($this.direction -eq "in") { Write-Warning ('Error, read only value') }
else { else {
if ($arg -ge 0 -and $arg -le 8) { if ($arg -in 0..8) {
$this._route = $this.Setter('route', $arg) $this._route = $this.Setter('route', $arg)
} }
else { else {
@ -175,13 +173,13 @@ class Vban : IVban {
class VbanInstream : Vban { class VbanInstream : Vban {
VbanInstream ([int]$index, [Object]$remote, [string]$direction) : base ($index, $remote, $direction) { VbanInstream ([int]$index, [string]$direction) : base ($index, $direction) {
} }
} }
class VbanOutstream : Vban { class VbanOutstream : Vban {
VbanOutstream ([int]$index, [Object]$remote, [string]$direction) : base ($index, $remote, $direction) { VbanOutstream ([int]$index, [string]$direction) : base ($index, $direction) {
} }
} }
@ -191,10 +189,10 @@ function Make_Vban ([Object]$remote) {
[System.Collections.ArrayList]$outstream = @() [System.Collections.ArrayList]$outstream = @()
0..$($remote.kind.vban_in - 1) | ForEach-Object { 0..$($remote.kind.vban_in - 1) | ForEach-Object {
[void]$instream.Add([VbanInstream]::new($_, $remote, "in")) [void]$instream.Add([VbanInstream]::new($_, "in"))
} }
0..$($remote.kind.vban_out - 1) | ForEach-Object { 0..$($remote.kind.vban_out - 1) | ForEach-Object {
[void]$outstream.Add([VbanOutstream]::new($_, $remote, "out")) [void]$outstream.Add([VbanOutstream]::new($_, "out"))
} }
$CustomObject = [pscustomobject]@{ $CustomObject = [pscustomobject]@{

View File

@ -34,7 +34,6 @@ Function ParseLog {
function main() { function main() {
try { try {
$vmr = Connect-Voicemeeter -Kind $kind $vmr = Connect-Voicemeeter -Kind $kind
$vmr.command.RunMacrobuttons() # ensure macrobuttons is running before we begin
Write-Host "Running tests for $vmr" Write-Host "Running tests for $vmr"
# test boundaries by kind # test boundaries by kind
@ -73,4 +72,5 @@ function main() {
} }
main
if ($MyInvocation.InvocationName -ne '.') { main }