9 Commits

Author SHA1 Message Date
fbfab5b4aa 3.3.0 section added to CHANGELOG
added dates for past versions
2024-06-29 10:03:32 +01:00
4d371a7582 Remove the 1 second wait from RunVoicemeeter
Write exception message to Debug
2024-06-29 07:13:11 +01:00
15b3b375bd md fix 2024-06-29 06:55:48 +01:00
c8abc6964a update RunVoicemeeter to launch x64 bit GUIs for all kinds
Keep testing login for up to 2 seconds.
If timeout exceeded throw VMRemoteError
2024-06-29 06:53:20 +01:00
907ee3e63b upd tested against 2024-06-28 11:12:01 +01:00
f3ed9c28c7 upd doc link 2024-01-03 09:38:22 +00:00
d305a4048d "\" -Join path parts 2023-08-17 15:02:03 +01:00
108731b4cf add RunMacrobuttons(), CloseMacrobuttons() 2023-08-17 03:19:05 +01:00
e7c648f1d0 fix function names 2023-08-17 03:05:32 +01:00
4 changed files with 61 additions and 21 deletions

View File

@@ -9,7 +9,19 @@ 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
## [3.2.0] - [ ]
## [3.3.0] - 2024-06-29
### Added
- Add a timeout (2s) to the login function. If timeout exceeded a VMRemoteError is thrown.
### Changed
- Launch x64 bit GUIs for all kinds if on 64 bit system.
## [3.2.0] - 2023-08-17
### Added ### Added
@@ -21,10 +33,10 @@ Before any major/minor/patch is released all test units will be run to verify th
- All CAPIErrors are now exposed to the consumer. - All CAPIErrors are now exposed to the consumer.
- The function name and error code can be retrieved using [CAPIError].function and [CAPIError].code - The function name and error code can be retrieved using [CAPIError].function and [CAPIError].code
- Set_By_Script now throws [VMError] if script length exceeds 48kB. - Set_By_Script now throws [VMRemoteError] if script length exceeds 48kB.
- parameter range checks in Vban class. - parameter range checks in Vban class.
## [3.1.0] ## [3.1.0] - 2023-08-15
### Added ### Added
@@ -33,7 +45,7 @@ Before any major/minor/patch is released all test units will be run to verify th
- More Recorder commands implemented. See Recorder section in README. - More Recorder commands implemented. See Recorder section in README.
- RunMacrobuttons, CloseMacrobuttons added to Special class - RunMacrobuttons, CloseMacrobuttons added to Special class
## [3.0.0] ## [3.0.0] - 2023-08-09
v3 introduces some breaking changes. They are as follows: v3 introduces some breaking changes. They are as follows:

View File

@@ -8,9 +8,9 @@ For past/future changes to this project refer to: [CHANGELOG](CHANGELOG.md)
## Tested against ## Tested against
- Basic 1.0.8.8 - Basic 1.1.1.1
- Banana 2.0.6.8 - Banana 2.1.1.1
- Potato 3.0.2.8 - Potato 3.1.1.1
## Requirements ## Requirements
@@ -402,6 +402,8 @@ The following commands are available:
The following methods are available: The following methods are available:
- Load($filepath): string - Load($filepath): string
- RunMacrobuttons(): Launches the macrobuttons app
- CloseMacrobuttons(): Closes the macrobuttons app
example: example:
@@ -411,6 +413,8 @@ $vmr.command.show
$vmr.command.lock = $true $vmr.command.lock = $true
$vmr.command.Load("path/to/filename.xml") $vmr.command.Load("path/to/filename.xml")
$vmr.command.RunMacrobuttons()
``` ```
### Recorder ### Recorder
@@ -566,4 +570,4 @@ Run tests from repository root in a subshell and write logs, like so:
### Official Documentation ### Official Documentation
- [Voicemeeter Remote C API](https://github.com/onyx-and-iris/Voicemeeter-SDK/blob/update-docs/VoicemeeterRemoteAPI.pdf) - [Voicemeeter Remote C API](https://github.com/onyx-and-iris/Voicemeeter-SDK/blob/main/VoicemeeterRemoteAPI.pdf)

View File

@@ -20,8 +20,27 @@ function Login {
} }
} }
$timeout = New-TimeSpan -Seconds 2
$sw = [diagnostics.stopwatch]::StartNew()
$exception = $null
do {
Start-Sleep -m 100
try {
"Successfully logged into Voicemeeter [" + $(VmType).ToUpper() + "] Version " + $(VmVersion) | Write-Verbose
$exception = $null
break
}
catch [CAPIError] {
$exception = $_
$exception | Write-Debug
}
} while ($sw.elapsed -lt $timeout)
if ($null -ne $exception) {
throw [VMRemoteError]::new("Timeout logging into the API.")
}
while (P_Dirty -or M_Dirty) { Start-Sleep -m 1 } while (P_Dirty -or M_Dirty) { Start-Sleep -m 1 }
"Successfully logged into Voicemeeter [" + $(VmType).ToUpper() + "] Version " + $(VmVersion) | Write-Verbose
} }
function Logout { function Logout {
@@ -38,8 +57,8 @@ function RunVoicemeeter {
[string]$kindId [string]$kindId
) )
$kinds = @{ $kinds = @{
"basic" = 1 "basic" = $(if ([Environment]::Is64BitOperatingSystem) { 4 } else { 1 })
"banana" = 2 "banana" = $(if ([Environment]::Is64BitOperatingSystem) { 5 } else { 2 })
"potato" = $(if ([Environment]::Is64BitOperatingSystem) { 6 } else { 3 }) "potato" = $(if ([Environment]::Is64BitOperatingSystem) { 6 } else { 3 })
} }
@@ -47,13 +66,12 @@ function RunVoicemeeter {
if ($retval -notin @(0)) { if ($retval -notin @(0)) {
throw [CAPIError]::new($retval, "VBVMR_RunVoicemeeter") throw [CAPIError]::new($retval, "VBVMR_RunVoicemeeter")
} }
Start-Sleep -s 1
} }
function P_Dirty { function P_Dirty {
$retval = [Voicemeeter.Remote]::VBVMR_IsParametersDirty() $retval = [Voicemeeter.Remote]::VBVMR_IsParametersDirty()
if ($retval -notin @(0, 1)) { if ($retval -notin @(0, 1)) {
throw [CAPIError]::new($retval, "VBVMR_RunVoicemeeter") throw [CAPIError]::new($retval, "VBVMR_IsParametersDirty")
} }
[bool]$retval [bool]$retval
} }
@@ -61,7 +79,7 @@ function P_Dirty {
function M_Dirty { function M_Dirty {
$retval = [Voicemeeter.Remote]::VBVMR_MacroButton_IsDirty() $retval = [Voicemeeter.Remote]::VBVMR_MacroButton_IsDirty()
if ($retval -notin @(0, 1)) { if ($retval -notin @(0, 1)) {
throw [CAPIError]::new($retval, "VBVMR_RunVoicemeeter") throw [CAPIError]::new($retval, "VBVMR_MacroButton_IsDirty")
} }
[bool]$retval [bool]$retval
} }
@@ -156,7 +174,7 @@ function MB_Get {
New-Variable -Name ptr -Value 0.0 New-Variable -Name ptr -Value 0.0
$retval = [int][Voicemeeter.Remote]::VBVMR_MacroButton_GetStatus($ID, [ref]$ptr, $MODE) $retval = [int][Voicemeeter.Remote]::VBVMR_MacroButton_GetStatus($ID, [ref]$ptr, $MODE)
if ($retval -notin @(0)) { if ($retval -notin @(0)) {
throw [CAPIError]::new($retval, $MyInvocation.MyCommand) throw [CAPIError]::new($retval, "VBVMR_MacroButton_GetStatus")
} }
[int]$ptr [int]$ptr
} }
@@ -189,7 +207,7 @@ function Set_By_Script {
[string]$script [string]$script
) )
if ($script.Length -gt 48000) { if ($script.Length -gt 48000) {
throw [VMError]::new("Script size cannot be larger than 48kB") throw [VMRemoteError]::new("Script size cannot be larger than 48kB")
} }
$retval = [int][Voicemeeter.Remote]::VBVMR_SetParameters($script) $retval = [int][Voicemeeter.Remote]::VBVMR_SetParameters($script)
if ($retval -notin @(0)) { if ($retval -notin @(0)) {

View File

@@ -1,11 +1,17 @@
function Get_VMPath { function Get_VMPath {
$REG_KEY = "Registry::HKEY_LOCAL_MACHINE\Software" + ` $REG_KEY = @(
(& { if ([Environment]::Is64BitOperatingSystem) { "\WOW6432Node" } else { "" } }) + ` "Registry::HKEY_LOCAL_MACHINE",
"\Microsoft\Windows\CurrentVersion\Uninstall" "Software",
$VM_KEY = "\VB:Voicemeeter {17359A74-1236-5467}\" (& { if ([Environment]::Is64BitOperatingSystem) { "WOW6432Node" } else { "" } }),
"Microsoft",
"Windows",
"CurrentVersion",
"Uninstall"
).Where({ $_ -ne "" }) -Join "\"
$VM_KEY = "VB:Voicemeeter {17359A74-1236-5467}"
try { try {
return $(Get-ItemPropertyValue -Path ($REG_KEY + $VM_KEY) -Name UninstallString | Split-Path -Parent) return $(Get-ItemPropertyValue -Path (@($REG_KEY, $VM_KEY) -Join "\") -Name UninstallString | Split-Path -Parent)
} }
catch { catch {
throw [VMRemoteError]::new("Unable to fetch Voicemeeter path from the Registry.") throw [VMRemoteError]::new("Unable to fetch Voicemeeter path from the Registry.")