diff --git a/lib/io.ps1 b/lib/io.ps1 new file mode 100644 index 0000000..07982b9 --- /dev/null +++ b/lib/io.ps1 @@ -0,0 +1,151 @@ +class IOControl : IRemote { + IOControl ([int]$index, [Object]$remote) : base ($index, $remote) { + AddBoolMembers -PARAMS @('mute') + AddFloatMembers -PARAMS @('gain') + AddStringMembers -PARAMS @('label') + } + + [void] FadeTo ([single]$target, [int]$time) { + $this.Setter('FadeTo', "($target, $time)") + } + + [void] FadeBy ([single]$target, [int]$time) { + $this.Setter('FadeBy', "($target, $time)") + } +} + +class IOLevels : IRemote { + IOLevels ([int]$index, [Object]$remote) : base ($index, $remote) { + } + + hidden [single] Convert([single]$val) { + if ($val -gt 0) { + return [math]::Round(20 * [math]::Log10($val), 1) + } + else { + return -200.0 + } + } + + [System.Collections.ArrayList] Getter([int]$mode) { + [System.Collections.ArrayList]$vals = @() + $this.init..$($this.init + $this.offset - 1) | ForEach-Object { + $vals.Add($this.Convert($(Get_Level -MODE $mode -INDEX $_))) + } + return $vals + } +} + +class IOEq : IRemote { + [System.Collections.ArrayList]$channel + [string]$kindOfEq + + IOEq ([int]$index, [Object]$remote, [string]$kindOfEq) : base ($index, $remote) { + $this.kindOfEq = $kindOfEq + + AddBoolMembers -PARAMS @('on', 'ab') + + $this.channel = @() + for ($ch = 0; $ch -lt $remote.kind.eq_ch[$this.kindOfEq]; $ch++) { + $this.channel.Add([EqChannel]::new($ch, $remote, $this.identifier())) + } + } + + [void] Load ([string]$filename) { + $param = 'Command.Load{0}Eq[{1}]' -f $this.kindOfEq, $this.index + $this.remote.Setter($param, $filename) + } + + [void] Save ([string]$filename) { + $param = 'Command.Save{0}Eq[{1}]' -f $this.kindOfEq, $this.index + $this.remote.Setter($param, $filename) + } +} + +class EqChannel : IRemote { + [System.Collections.ArrayList]$cell + [string]$eqId + + EqChannel ([int]$index, [Object]$remote, [string]$eqId) : base ($index, $remote) { + $this.eqId = $eqId + + $this.cell = @() + $cellCount = $this.remote.kind.cells + for ($c = 0; $c -lt $cellCount; $c++) { + $this.cell.Add([EqCell]::new($c, $remote, $this.identifier())) + } + } + + [string] identifier () { + return '{0}.Channel[{1}]' -f $this.eqId, $this.index + } +} + +class EqCell : IRemote { + [string]$channelId + + EqCell ([int]$index, [Object]$remote, [string]$channelId) : base ($index, $remote) { + $this.channelId = $channelId + + AddBoolMembers -PARAMS @('on') + AddIntMembers -PARAMS @('type') + AddFloatMembers -PARAMS @('f', 'gain', 'q') + } + + [string] identifier () { + return '{0}.Cell[{1}]' -f $this.channelId, $this.index + } +} + +class IODevice : IRemote { + IODevice ([int]$index, [Object]$remote) : base ($index, $remote) { + } + + hidden $_name = $($this | Add-Member ScriptProperty 'name' ` + { + $this.Getter_String('name') + } ` + { + return Write-Warning ("ERROR: $($this.identifier()).name is read only") + } + ) + + hidden $_sr = $($this | Add-Member ScriptProperty 'sr' ` + { + [int]$this.Getter('sr') + } ` + { + return Write-Warning ("ERROR: $($this.identifier()).sr is read only") + } + ) + + hidden $_wdm = $($this | Add-Member ScriptProperty 'wdm' ` + { + return Write-Warning ("ERROR: $($this.identifier()).wdm is write only") + } ` + { + param([string]$arg) + return $this.Setter('wdm', $arg) + } + ) + + hidden $_ks = $($this | Add-Member ScriptProperty 'ks' ` + { + return Write-Warning ("ERROR: $($this.identifier()).ks is write only") + } ` + { + param([string]$arg) + return $this.Setter('ks', $arg) + } + ) + + hidden $_mme = $($this | Add-Member ScriptProperty 'mme' ` + { + return Write-Warning ("ERROR: $($this.identifier()).mme is write only") + } ` + { + param([string]$arg) + return $this.Setter('mme', $arg) + } + ) +} \ No newline at end of file