5 Commits

Author SHA1 Message Date
5bda43131b upd changelog 2023-08-09 14:44:47 +01:00
1c9c400f12 VBVMR_GetLevel binding added
Get_Level implemented in base.ps1

strip.{PreFader,PostFader,PostMute} methods added

bus.{All} added
2023-08-09 14:16:27 +01:00
aee3430962 fix strip[i].device.name bug
patch bump
2022-12-19 23:19:20 +00:00
47fb880b91 remove tasklist from unreleased 2022-12-19 00:45:13 +00:00
acc078632d add strip.eq/bus.eq example to readme 2022-12-18 18:52:22 +00:00
6 changed files with 360 additions and 227 deletions

View File

@@ -9,10 +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] Implement command.load - [x] Level methods for Strip,Bus classes implemented.
- [x] Implement comp/gate parameters introduced in v3.0.2.8 of the api.
- [x] Add unit tests for new classes.
- [x] Update README with changes to Strip/Bus classes.
## [3.0.0] ## [3.0.0]

View File

@@ -79,7 +79,7 @@ Voicemeeter factory function can be:
- Get-RemoteBanana - Get-RemoteBanana
- Get-RemotePotato - Get-RemotePotato
Added in v3 you may also use the following entry/exit points: Added in `v3` you may also use the following entry/exit points:
- Connect-Voicemeeter - Connect-Voicemeeter
- Disconnect-Voicemeeter - Disconnect-Voicemeeter
@@ -90,6 +90,8 @@ for example:
```powershell ```powershell
$vmr = Connect-Voicemeeter -Kind "potato" $vmr = Connect-Voicemeeter -Kind "potato"
...
Disconnect-Voicemeeter
``` ```
#### `Through the Shell` #### `Through the Shell`
@@ -213,6 +215,20 @@ $vmr.strip[5].AppGain("Spotify", 0.5)
$vmr.strip[5].AppMute("Spotify", $true) $vmr.strip[5].AppMute("Spotify", $true)
``` ```
#### levels
The following strip.level commands are available:
- PreFader()
- PostFader()
- PostMute()
for example:
```powershell
$vmr.strip[2].levels.PreFader() -Join ', ' | Write-Host
```
### Bus ### Bus
The following bus commands are available: The following bus commands are available:
@@ -262,6 +278,18 @@ $vmr.bus[0].mode.centeronly = $true
$vmr.bus[0].mode.Get() $vmr.bus[0].mode.Get()
``` ```
#### levels
The following strip.level commands are available:
- All()
for example:
```powershell
$vmr.bus[2].levels.All() -Join ', ' | Write-Host
```
### Strip|Bus ### Strip|Bus
#### device #### device
@@ -292,6 +320,13 @@ The following strip.eq | bus.eq commands are available:
- on: boolean - on: boolean
- ab: boolean - ab: boolean
for example:
```powershell
$vmr.strip[0].eq.on = $true
$vmr.bus[0].eq.ab = $false
```
#### FadeTo | FadeBy #### FadeTo | FadeBy
- `FadeTo(amount, time)` : float, int - `FadeTo(amount, time)` : float, int

View File

@@ -203,3 +203,18 @@ function Set_By_Script {
Write-Warning $_.Exception.ErrorMessage() Write-Warning $_.Exception.ErrorMessage()
} }
} }
function Get_Level {
param(
[int64]$MODE, [int64]$INDEX
)
New-Variable -Name ptr -Value 0.0
try {
$retval = [int][Voicemeeter.Remote]::VBVMR_GetLevel($MODE, $INDEX, [ref]$ptr)
if ($retval) { throw [CAPIError]::new($retval, $MyInvocation.MyCommand) }
}
catch [CAPIError] {
Write-Warning $_.Exception.ErrorMessage()
}
[float]$ptr
}

View File

@@ -47,6 +47,9 @@ function Setup_DLL {
[DllImport(@"$dll")] [DllImport(@"$dll")]
public static extern int VBVMR_SetParameters(String param); public static extern int VBVMR_SetParameters(String param);
[DllImport(@"$dll")]
public static extern int VBVMR_GetLevel(Int64 mode, Int64 index, ref float ptr);
"@ "@
Add-Type -MemberDefinition $Signature -Name Remote -Namespace Voicemeeter -PassThru | Out-Null Add-Type -MemberDefinition $Signature -Name Remote -Namespace Voicemeeter -PassThru | Out-Null

View File

@@ -33,6 +33,7 @@ class IBus {
class Bus : IBus { class Bus : IBus {
[Object]$mode [Object]$mode
[Object]$eq [Object]$eq
[Object]$levels
Bus ([int]$index, [Object]$remote) : base ($index, $remote) { Bus ([int]$index, [Object]$remote) : base ($index, $remote) {
AddBoolMembers -PARAMS @('mono', 'mute') AddBoolMembers -PARAMS @('mono', 'mute')
@@ -41,6 +42,7 @@ class Bus : IBus {
$this.mode = [Mode]::new($index, $remote) $this.mode = [Mode]::new($index, $remote)
$this.eq = [Eq]::new($index, $remote) $this.eq = [Eq]::new($index, $remote)
$this.levels = [Levels]::new($index, $remote)
} }
[void] FadeTo ([single]$target, [int]$time) { [void] FadeTo ([single]$target, [int]$time) {
@@ -52,6 +54,37 @@ class Bus : IBus {
} }
} }
class Levels : IBus {
[int]$init
[int]$offset
Levels ([int]$index, [Object]$remote) : base ($index, $remote) {
$this.init = $index * 8
$this.offset = 8
}
[float] Convert([float]$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
}
[System.Collections.ArrayList] All() {
return $this.Getter(3)
}
}
class Mode : IBus { class Mode : IBus {
[System.Collections.ArrayList]$modes [System.Collections.ArrayList]$modes

View File

@@ -27,6 +27,8 @@ class IStrip {
} }
class Strip : IStrip { class Strip : IStrip {
[Object]$levels
Strip ([int]$index, [Object]$remote) : base ($index, $remote) { Strip ([int]$index, [Object]$remote) : base ($index, $remote) {
AddBoolMembers -PARAMS @('mono', 'solo', 'mute') AddBoolMembers -PARAMS @('mono', 'solo', 'mute')
AddIntMembers -PARAMS @('limit') AddIntMembers -PARAMS @('limit')
@@ -35,6 +37,8 @@ class Strip : IStrip {
AddChannelMembers AddChannelMembers
AddGainlayerMembers AddGainlayerMembers
$this.levels = [Levels]::new($index, $remote)
} }
[string] ToString() { [string] ToString() {
@@ -50,6 +54,52 @@ class Strip : IStrip {
} }
} }
class Levels : IStrip {
[int]$init
[int]$offset
Levels ([int]$index, [Object]$remote) : base ($index, $remote) {
$p_in = $remote.kind.p_in
if ($index -lt $p_in) {
$this.init = $index * 2
$this.offset = 2
}
else {
$this.init = ($p_in * 2) + (($index - $p_in) * 8)
$this.offset = 8
}
}
[float] Convert([float]$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
}
[System.Collections.ArrayList] PreFader() {
return $this.Getter(0)
}
[System.Collections.ArrayList] PostFader() {
return $this.Getter(1)
}
[System.Collections.ArrayList] PostMute() {
return $this.Getter(2)
}
}
class PhysicalStrip : Strip { class PhysicalStrip : Strip {
[Object]$comp [Object]$comp
[Object]$gate [Object]$gate
@@ -148,7 +198,7 @@ class Device : IStrip {
return "Strip[" + $this.index + "].Device" return "Strip[" + $this.index + "].Device"
} }
hidden $_device = $($this | Add-Member ScriptProperty 'device' ` hidden $_name = $($this | Add-Member ScriptProperty 'name' `
{ {
$this.Getter_String('name') $this.Getter_String('name')
} ` } `