Compare commits

..

9 Commits

Author SHA1 Message Date
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
2156cebeea fixes config files desc in readme 2023-09-20 13:50:02 +01:00
7825b58bb1 add BusDevice to Bus class.
CHANGELOG updated.
2023-09-14 18:22:13 +01:00
68f96b64db typo 2023-09-01 11:36:59 +01:00
6 changed files with 47 additions and 14 deletions

View File

@@ -11,6 +11,18 @@ Before any major/minor/patch is released all unit tests will be run to verify th
- [ ] - [ ]
## [1.1.0] - 2023-06-28
### Added
- Configurable kwarg `login_timeout`, defaults to 2s.
## [1.0.1] - 2023-09-14
### Added
- BusDevice added to Bus class.
## [1.0.0] - 2023-09-01 ## [1.0.0] - 2023-09-01
### Added ### Added
@@ -23,6 +35,6 @@ Before any major/minor/patch is released all unit tests will be run to verify th
- `ldirty`: channel level updates - `ldirty`: channel level updates
- An entry point for fetching a Remote class for each kind of Voicemeeter (basic, banana, potato) - An entry point for fetching a Remote class for each kind of Voicemeeter (basic, banana, potato)
- Logging system for reading messages sent by getters and setters. - Logging system for reading messages sent by getters and setters.
- Strip class refinement in util.rb. It's scope should be limited to the CBindings module. - String class refinement in util.rb. It's scope should be limited to the CBindings module.
- rbs type signatures but some of them need updating. - rbs type signatures but some of them need updating.
- example user profile configs included with repo. - example user profile configs included with repo.

View File

@@ -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
@@ -630,7 +630,7 @@ vm.vban.outstream[0].apply(on: true, name: "streamname", bit: 24)
`vm.apply_config(<configname>)` `vm.apply_config(<configname>)`
You may load config files in TOML format. You may load config files in YAML format.
Three example configs have been included with the package. Remember to save Three example configs have been included with the package. Remember to save
current settings before loading a config. To set one you may do: current settings before loading a config. To set one you may do:
@@ -639,7 +639,7 @@ require "voicemeeter"
Voicemeeter::Remote.new(:banana).run { |vm| vm.apply_config(:example) } Voicemeeter::Remote.new(:banana).run { |vm| vm.apply_config(:example) }
``` ```
will load a config file at mydir/configs/banana/example.toml for Voicemeeter Banana. will load a config file at mydir/configs/banana/example.yml for Voicemeeter Banana.
## Events ## Events
@@ -750,7 +750,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 +772,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

View File

@@ -4,18 +4,21 @@ 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
@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 +33,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
@@ -72,7 +73,6 @@ module Voicemeeter
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

View File

@@ -7,7 +7,7 @@ module Voicemeeter
include Mixins::Return include Mixins::Return
extend MetaFunctions extend MetaFunctions
attr_reader :eq, :mode, :levels attr_reader :eq, :mode, :levels, :device
attr_accessor_bool :mute, :mono, :sel, :monitor attr_accessor_bool :mute, :mono, :sel, :monitor
attr_accessor_float :gain attr_accessor_float :gain
attr_accessor_string :label attr_accessor_string :label
@@ -21,6 +21,7 @@ module Voicemeeter
@eq = BusEq.new(remote, i) @eq = BusEq.new(remote, i)
@mode = BusModes.new(remote, i) @mode = BusModes.new(remote, i)
@levels = BusLevels.new(remote, i) @levels = BusLevels.new(remote, i)
@device = BusDevice.new(remote, i)
end end
def identifier def identifier

View File

@@ -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

View File

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