mirror of
https://github.com/onyx-and-iris/voicemeeter-api-powershell.git
synced 2025-12-21 20:27:47 +00:00
129 lines
3.3 KiB
PowerShell
129 lines
3.3 KiB
PowerShell
class Bus : IOControl {
|
|
[Object]$mode
|
|
[Object]$eq
|
|
[Object]$levels
|
|
|
|
Bus ([int]$index, [Object]$remote) : base ($index, $remote) {
|
|
AddBoolMembers -PARAMS @('sel', 'monitor')
|
|
AddIntMembers -PARAMS @('mono')
|
|
AddFloatMembers -PARAMS @('returnreverb', 'returndelay', 'returnfx1', 'returnfx2')
|
|
|
|
$this.mode = [BusMode]::new($index, $remote)
|
|
$this.eq = [BusEq]::new($index, $remote)
|
|
$this.levels = [BusLevels]::new($index, $remote)
|
|
}
|
|
|
|
[string] identifier () {
|
|
return 'Bus[' + $this.index + ']'
|
|
}
|
|
}
|
|
|
|
class BusLevels : IOLevels {
|
|
[int]$init
|
|
[int]$offset
|
|
|
|
BusLevels ([int]$index, [Object]$remote) : base ($index, $remote) {
|
|
$this.init = $index * 8
|
|
$this.offset = 8
|
|
}
|
|
|
|
[System.Collections.ArrayList] All() {
|
|
return $this.Getter(3)
|
|
}
|
|
}
|
|
|
|
class BusMode : IRemote {
|
|
[System.Collections.ArrayList]$modes
|
|
|
|
BusMode ([int]$index, [Object]$remote) : base ($index, $remote) {
|
|
$this.modes = @(
|
|
'normal', 'amix', 'bmix', 'repeat', 'composite', 'tvmix', 'upmix21', 'upmix41', 'upmix61',
|
|
'centeronly', 'lfeonly', 'rearonly'
|
|
)
|
|
|
|
AddBoolMembers -PARAMS $this.modes
|
|
}
|
|
|
|
[string] identifier () {
|
|
return 'Bus[' + $this.index + '].mode'
|
|
}
|
|
|
|
[string] Get () {
|
|
foreach ($mode in $this.modes) {
|
|
if ($this.$mode) {
|
|
break
|
|
}
|
|
}
|
|
return $mode
|
|
}
|
|
|
|
[void] Set ([string]$mode) {
|
|
if ($this.modes.Contains($mode)) {
|
|
$this.Setter($mode, $true)
|
|
}
|
|
else {
|
|
throw [System.ArgumentException]::new("Invalid mode: $mode")
|
|
}
|
|
}
|
|
}
|
|
|
|
class BusEq : IOEq {
|
|
BusEq ([int]$index, [Object]$remote) : base ($index, $remote, 'Bus') {
|
|
}
|
|
|
|
[string] identifier () {
|
|
return 'Bus[' + $this.index + '].EQ'
|
|
}
|
|
}
|
|
|
|
class PhysicalBus : Bus {
|
|
[Object]$device
|
|
|
|
PhysicalBus ([int]$index, [Object]$remote) : base ($index, $remote) {
|
|
$this.device = [BusDevice]::new($index, $remote)
|
|
|
|
AddBoolMembers -PARAMS @('vaio')
|
|
}
|
|
}
|
|
|
|
class VirtualBus : Bus {
|
|
[Object]$device
|
|
|
|
VirtualBus ([int]$index, [Object]$remote) : base ($index, $remote) {
|
|
if ($this.remote.kind.name -eq 'basic') {
|
|
$this.device = [BusDevice]::new($index, $remote)
|
|
}
|
|
}
|
|
}
|
|
|
|
class BusDevice : IODevice {
|
|
BusDevice ([int]$index, [Object]$remote) : base ($index, $remote) {
|
|
if ($this.index -eq 0) {
|
|
$this.AddASIO()
|
|
}
|
|
}
|
|
|
|
[string] identifier () {
|
|
return 'Bus[' + $this.index + '].Device'
|
|
}
|
|
|
|
hidden [void] AddASIO () {
|
|
Add-Member -InputObject $this -MemberType ScriptProperty -Name 'asio' `
|
|
-Value {
|
|
return Write-Warning ("ERROR: $($this.identifier()).asio is write only")
|
|
} -SecondValue {
|
|
param([string]$arg)
|
|
return $this.Setter('asio', $arg)
|
|
} -Force
|
|
}
|
|
}
|
|
|
|
function Make_Buses ([Object]$remote) {
|
|
[System.Collections.ArrayList]$bus = @()
|
|
0..$($remote.kind.p_out + $remote.kind.v_out - 1) | ForEach-Object {
|
|
if ($_ -lt $remote.kind.p_out) { [void]$bus.Add([PhysicalBus]::new($_, $remote)) }
|
|
else { [void]$bus.Add([VirtualBus]::new($_, $remote)) }
|
|
}
|
|
$bus
|
|
}
|