mirror of
https://github.com/onyx-and-iris/voicemeeter-rb.git
synced 2026-04-19 17:33:32 +00:00
Compare commits
11 Commits
2156cebeea
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ca29ccb5f | |||
| 6e3cbd5fa1 | |||
| 9709c30d31 | |||
| decb8f198c | |||
| 8469351dde | |||
| 77adc6a71b | |||
| a886e2ab2e | |||
| 3f8673ea17 | |||
| 57112fd90a | |||
| aaee848962 | |||
| 4e5aab867b |
17
CHANGELOG.md
17
CHANGELOG.md
@@ -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
|
## [1.0.1] - 2023-09-14
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
13
README.md
13
README.md
@@ -10,9 +10,9 @@ For an outline of past/future changes 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
|
||||||
|
|
||||||
@@ -723,6 +723,7 @@ You may pass the following optional keyword arguments:
|
|||||||
- `mdirty`: boolean=true, macrobutton updates
|
- `mdirty`: boolean=true, macrobutton updates
|
||||||
- `midi`: boolean=true, midi updates
|
- `midi`: boolean=true, midi updates
|
||||||
- `ldirty`: boolean=false, level 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:
|
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:
|
- The following attributes are available:
|
||||||
- `fn_name`: name of the C-API function that failed.
|
- `fn_name`: name of the C-API function that failed.
|
||||||
- `code`: error code.
|
- `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
|
### Logging
|
||||||
|
|
||||||
@@ -772,9 +773,9 @@ Bundle exec rake
|
|||||||
|
|
||||||
### 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)
|
||||||
|
|
||||||
[license]: https://github.com/onyx-and-iris/voicemeeter-rb/blob/dev/LICENSE
|
[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
|
[code style]: https://img.shields.io/badge/code_style-standard-violet.svg
|
||||||
[gem version]: https://badge.fury.io/rb/voicemeeter.svg
|
[gem version]: https://badge.fury.io/rb/voicemeeter.svg
|
||||||
|
|||||||
@@ -4,18 +4,26 @@ module Voicemeeter
|
|||||||
include Logging
|
include Logging
|
||||||
include Worker
|
include Worker
|
||||||
include Events::Director
|
include Events::Director
|
||||||
|
prepend Util::Timeout
|
||||||
prepend Util::Cache
|
prepend Util::Cache
|
||||||
|
|
||||||
attr_reader :kind, :midi, :event, :delay, :cache
|
attr_reader :kind, :midi, :event, :delay, :cache
|
||||||
|
|
||||||
RATELIMIT = 0.033
|
RATELIMIT = 0.033
|
||||||
DELAY = 0.001
|
DELAY = 0.001
|
||||||
|
LOGIN_TIMEOUT = 2
|
||||||
|
|
||||||
def initialize(kind, **kwargs)
|
def initialize(kind, **kwargs)
|
||||||
@kind = kind
|
@kind = kind
|
||||||
@sync = kwargs[:sync] || false
|
@sync = kwargs[:sync] || false
|
||||||
@ratelimit = kwargs[:ratelimit] || RATELIMIT
|
@ratelimit = kwargs[:ratelimit] || RATELIMIT
|
||||||
@delay = kwargs[:delay] || DELAY
|
@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 =
|
@event =
|
||||||
Events::Tracker.new(
|
Events::Tracker.new(
|
||||||
**(kwargs.select { |k, _| %i[pdirty mdirty ldirty midi].include? k })
|
**(kwargs.select { |k, _| %i[pdirty mdirty ldirty midi].include? k })
|
||||||
@@ -30,8 +38,6 @@ module Voicemeeter
|
|||||||
|
|
||||||
def login
|
def login
|
||||||
CBindings.call(:bind_login, ok: [0, 1]) == 1 and run_voicemeeter(kind.name)
|
CBindings.call(:bind_login, ok: [0, 1]) == 1 and run_voicemeeter(kind.name)
|
||||||
clear_dirty
|
|
||||||
logger.info "Successfully logged into #{self} version #{version}"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def logout
|
def logout
|
||||||
@@ -64,15 +70,17 @@ module Voicemeeter
|
|||||||
|
|
||||||
def run_voicemeeter(kind_id)
|
def run_voicemeeter(kind_id)
|
||||||
kinds = {
|
kinds = {
|
||||||
basic: Kinds::KindEnum::BASIC,
|
basic: ([Install::OS_BITS, @bits].all? { |v| v == 64 }) ?
|
||||||
banana: Kinds::KindEnum::BANANA,
|
Kinds::KindEnum::BASICX64 : Kinds::KindEnum::BASIC,
|
||||||
potato: (Install::OS_BITS == 64) ? Kinds::KindEnum::POTATOX64 : Kinds::KindEnum::POTATO
|
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"
|
if caller(1..1).first[/`(.*)'/, 1] == "login"
|
||||||
logger.debug "Voicemeeter engine running but the GUI appears to be down... launching."
|
logger.debug "Voicemeeter engine running but the GUI appears to be down... launching."
|
||||||
end
|
end
|
||||||
CBindings.call(:bind_run_voicemeeter, kinds[kind_id])
|
CBindings.call(:bind_run_voicemeeter, kinds[kind_id])
|
||||||
sleep(1)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def type
|
def type
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ module Voicemeeter
|
|||||||
BASIC = 1
|
BASIC = 1
|
||||||
BANANA = 2
|
BANANA = 2
|
||||||
POTATO = 3
|
POTATO = 3
|
||||||
|
BASICX64 = 4
|
||||||
|
BANANAX64 = 5
|
||||||
POTATOX64 = 6
|
POTATOX64 = 6
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,26 @@ module Voicemeeter
|
|||||||
end
|
end
|
||||||
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
|
module Cache
|
||||||
def get(name, is_string = false)
|
def get(name, is_string = false)
|
||||||
return cache.delete(name) if cache.key? name
|
return cache.delete(name) if cache.key? name
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ module Voicemeeter
|
|||||||
end
|
end
|
||||||
|
|
||||||
def minor
|
def minor
|
||||||
0
|
1
|
||||||
end
|
end
|
||||||
|
|
||||||
def patch
|
def patch
|
||||||
1
|
2
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_a
|
def to_a
|
||||||
|
|||||||
Reference in New Issue
Block a user