mirror of
https://github.com/onyx-and-iris/voicemeeter-rb.git
synced 2026-04-20 01:43:32 +00:00
Compare commits
9 Commits
main
...
77adc6a71b
| Author | SHA1 | Date | |
|---|---|---|---|
| 77adc6a71b | |||
| a886e2ab2e | |||
| 3f8673ea17 | |||
| 57112fd90a | |||
| aaee848962 | |||
| 4e5aab867b | |||
| 2156cebeea | |||
| 7825b58bb1 | |||
| 68f96b64db |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -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
|
||||
|
||||
### 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
|
||||
- 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.
|
||||
- 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.
|
||||
- example user profile configs included with repo.
|
||||
|
||||
16
README.md
16
README.md
@@ -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
|
||||
|
||||
@@ -630,7 +630,7 @@ vm.vban.outstream[0].apply(on: true, name: "streamname", bit: 24)
|
||||
|
||||
`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
|
||||
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) }
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
@@ -750,7 +750,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 +772,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
|
||||
|
||||
@@ -4,18 +4,21 @@ 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
|
||||
@event =
|
||||
Events::Tracker.new(
|
||||
**(kwargs.select { |k, _| %i[pdirty mdirty ldirty midi].include? k })
|
||||
@@ -30,8 +33,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
|
||||
@@ -72,7 +73,6 @@ module Voicemeeter
|
||||
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
|
||||
|
||||
@@ -7,7 +7,7 @@ module Voicemeeter
|
||||
include Mixins::Return
|
||||
extend MetaFunctions
|
||||
|
||||
attr_reader :eq, :mode, :levels
|
||||
attr_reader :eq, :mode, :levels, :device
|
||||
attr_accessor_bool :mute, :mono, :sel, :monitor
|
||||
attr_accessor_float :gain
|
||||
attr_accessor_string :label
|
||||
@@ -21,6 +21,7 @@ module Voicemeeter
|
||||
@eq = BusEq.new(remote, i)
|
||||
@mode = BusModes.new(remote, i)
|
||||
@levels = BusLevels.new(remote, i)
|
||||
@device = BusDevice.new(remote, i)
|
||||
end
|
||||
|
||||
def identifier
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -7,7 +7,7 @@ module Voicemeeter
|
||||
end
|
||||
|
||||
def minor
|
||||
0
|
||||
1
|
||||
end
|
||||
|
||||
def patch
|
||||
|
||||
Reference in New Issue
Block a user