Compare commits

...

11 Commits

Author SHA1 Message Date
3ca29ccb5f unless 2024-07-01 19:02:18 +01:00
6e3cbd5fa1 section 1.1.2 added to CHANGELOG 2024-06-29 10:32:05 +01:00
9709c30d31 bits kwarg added to README Voicemeeter::Remote section 2024-06-29 10:31:50 +01:00
decb8f198c add bits kwarg, for overriding type of voicemeeter GUI launched
patch bump
2024-06-29 10:31:27 +01:00
8469351dde add BASICX64 and BANANAX64 to KindEnum
upd {Base}.run_voicemeeter
launch x64 client for all kinds if OS_BITS == 64

patch bump
2024-06-29 05:27:23 +01:00
77adc6a71b upd tested against in README 2024-06-28 11:00:08 +01:00
a886e2ab2e added 1.1.0 to CHANGELOG 2024-06-28 10:59:54 +01:00
3f8673ea17 minor bump 2024-06-28 10:59:42 +01:00
57112fd90a added a timeout to the login method
module Util::Timeout added, prepends Base
2024-06-28 10:59:34 +01:00
aaee848962 md change 2024-01-03 09:35:50 +00:00
4e5aab867b upd documentation/header file links 2024-01-03 09:34:57 +00:00
6 changed files with 62 additions and 14 deletions

View File

@@ -11,6 +11,23 @@ Before any major/minor/patch is released all unit tests will be run to verify th
- [ ]
## [1.1.2] - 2024-06-29
### Added
- kwarg `bits` for overriding the type of GUI that is launched on startup.
- Defaults to 64, set it to either 32 or 64
### Fixed
- {Remote}.run_voicemeeter now launches x64 bit GUI's for all kinds if Ruby detects a 64 bit system.
## [1.1.0] - 2023-06-28
### Added
- Configurable kwarg `login_timeout`, defaults to 2s.
## [1.0.1] - 2023-09-14
### Added

View File

@@ -10,9 +10,9 @@ For an outline of past/future changes refer to: [CHANGELOG](CHANGELOG.md)
## Tested against
- Basic 1.0.8.8
- Banana 2.0.6.8
- Potato 3.0.2.8
- Basic 1.1.1.1
- Banana 2.1.1.1
- Potato 3.1.1.1
## Requirements
@@ -723,6 +723,7 @@ You may pass the following optional keyword arguments:
- `mdirty`: boolean=true, macrobutton updates
- `midi`: boolean=true, midi updates
- `ldirty`: boolean=false, level updates
- `bits`: int=64, (may be one of 32 or 64), overrides the type of Voicemeeter GUI {Remote}.run_voicemeeter will launch.
Access to lower level Getters and Setters are provided with these functions:
@@ -750,7 +751,7 @@ vm.set("Strip[0].Gain", -3.6)
- The following attributes are available:
- `fn_name`: name of the C-API function that failed.
- `code`: error code.
- For a full list of error codes [check the VoicemeeterRemote header file][voicemeeter remote header].
- For a full list of error codes check the [VoicemeeterRemote header file][voicemeeter remote header].
### Logging
@@ -772,9 +773,9 @@ Bundle exec rake
### 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)
[license]: https://github.com/onyx-and-iris/voicemeeter-rb/blob/dev/LICENSE
[voicemeeter remote header]: https://github.com/onyx-and-iris/Voicemeeter-SDK/blob/update-docs/VoicemeeterRemote.h
[voicemeeter remote header]: https://github.com/onyx-and-iris/Voicemeeter-SDK/blob/main/VoicemeeterRemote.h
[code style]: https://img.shields.io/badge/code_style-standard-violet.svg
[gem version]: https://badge.fury.io/rb/voicemeeter.svg

View File

@@ -4,18 +4,26 @@ module Voicemeeter
include Logging
include Worker
include Events::Director
prepend Util::Timeout
prepend Util::Cache
attr_reader :kind, :midi, :event, :delay, :cache
RATELIMIT = 0.033
DELAY = 0.001
LOGIN_TIMEOUT = 2
def initialize(kind, **kwargs)
@kind = kind
@sync = kwargs[:sync] || false
@ratelimit = kwargs[:ratelimit] || RATELIMIT
@delay = kwargs[:delay] || DELAY
@login_timeout = kwargs[:login_timeout] || LOGIN_TIMEOUT
@bits = kwargs[:bits] || 64
unless [32, 64].include? @bits
logger.warn "kwarg bits got #{@bits}, expected either 32 or 64, defaulting to 64"
@bits = 64
end
@event =
Events::Tracker.new(
**(kwargs.select { |k, _| %i[pdirty mdirty ldirty midi].include? k })
@@ -30,8 +38,6 @@ module Voicemeeter
def login
CBindings.call(:bind_login, ok: [0, 1]) == 1 and run_voicemeeter(kind.name)
clear_dirty
logger.info "Successfully logged into #{self} version #{version}"
end
def logout
@@ -64,15 +70,17 @@ module Voicemeeter
def run_voicemeeter(kind_id)
kinds = {
basic: Kinds::KindEnum::BASIC,
banana: Kinds::KindEnum::BANANA,
potato: (Install::OS_BITS == 64) ? Kinds::KindEnum::POTATOX64 : Kinds::KindEnum::POTATO
basic: ([Install::OS_BITS, @bits].all? { |v| v == 64 }) ?
Kinds::KindEnum::BASICX64 : Kinds::KindEnum::BASIC,
banana: ([Install::OS_BITS, @bits].all? { |v| v == 64 }) ?
Kinds::KindEnum::BANANAX64 : Kinds::KindEnum::BANANA,
potato: ([Install::OS_BITS, @bits].all? { |v| v == 64 }) ?
Kinds::KindEnum::POTATOX64 : Kinds::KindEnum::POTATO
}
if caller(1..1).first[/`(.*)'/, 1] == "login"
logger.debug "Voicemeeter engine running but the GUI appears to be down... launching."
end
CBindings.call(:bind_run_voicemeeter, kinds[kind_id])
sleep(1)
end
def type

View File

@@ -6,6 +6,8 @@ module Voicemeeter
BASIC = 1
BANANA = 2
POTATO = 3
BASICX64 = 4
BANANAX64 = 5
POTATOX64 = 6
end

View File

@@ -18,6 +18,26 @@ module Voicemeeter
end
end
module Timeout
def login
super
err = nil
start = Time.now
begin
sleep 0.1
logger.info "Successfully logged into #{self} version #{version}"
logger.debug "login time: #{(Time.now - start).round(2)}"
err = nil
rescue Errors::VMCAPIError => e
err = e
retry if Time.now < start + @login_timeout
end
raise Errors::VMError.new "Timeout logging into the api" if err
clear_dirty
end
end
module Cache
def get(name, is_string = false)
return cache.delete(name) if cache.key? name

View File

@@ -7,11 +7,11 @@ module Voicemeeter
end
def minor
0
1
end
def patch
1
2
end
def to_a