Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal: RPC control of positional audio parameters in the client #4575

Closed
StarGate01 opened this issue Nov 10, 2020 · 6 comments · Fixed by #3743
Closed

Proposal: RPC control of positional audio parameters in the client #4575

StarGate01 opened this issue Nov 10, 2020 · 6 comments · Fixed by #3743
Labels
client feature-request This issue or PR deals with a new feature

Comments

@StarGate01
Copy link

First of all, thank you for providing such great software as open source.

Context
For some games it would be beneficial to enable the instrumentation of the positional audio parameters in the mumble client (Minimum distance, Bloom, Maximum distance and Minimum volume). Case in Point: The game "Among Us" with my mod. For example, different roles in the games would have larger or smaller communication distances.

Describe the feature you have in mind
Addition of the following RPC commands:

  • mumble.exe rpc pa_mindist <value>
  • mumble.exe rpc pa_bloom <value>
  • mumble.exe rpc pa_maxdist <value>
  • mumble.exe rpc pa_minvol <value>

Describe alternatives you've considered
The RPC command already supports muting an unmuting, which is very useful. But support could be even more immersive. Manually setting the values is cumbersome and relies on the players.

Additional context
I am open to discussion about the syntax of the commands. Additionally, if wanted, I propose the addition of a checkbox next to the "Headphones" one, called "Enable manual control", which would give the user to override the RPC commands, just like they are ably with muting / unmuting. When this checkbox is not active, all the sliders would be disabled and could only be controlled via RPC.

Contribution
I would be willing to implement this feature, however I first want to work out a version the project lead would approve and merge.

Looking forward to any feedback.

@Krzmbrzl
Copy link
Member

Hehe, very interesting you bring this up now as I just recently finished something that could easily be extended to fulfill your needs.

As you might now already (or maybe not, idk) I have created support for actual (more or less) general purpose plugins for Mumble (see #3743 - it's not yet merged as you can see, but it is already usable). On top of that, I have built a JSON interface that can be used to use the plugin API from outside of Mumble.
Have a look at https://github.com/mumble-voip/mumble-json-bridge

Therefore the plugin interface had to be extended in order to expose the positional audio settings (it already has a general settings framework. Thus you/we only had to add the specific settings needed) and that should be more or less it.

The whole thing then works by providing a Mumble plugin (JSON Bridge) that has to be enabled in Mumble's preferences. After that the CLI wrapper that is provided in the linked repo as well, can be used to send JSON requests to Mumble (all of the plugin API is accessible via JSON as well). For the specific syntax, have a look at the linked repo.

This obviously only works for Mumble clients that already include the changes from my plugin PR, but I expect the PR to be merged in the upcoming months and it is planned that 1.4.0 will be released with the plugin framework as a new feature.

@Krzmbrzl Krzmbrzl added client feature-request This issue or PR deals with a new feature labels Nov 10, 2020
@StarGate01
Copy link
Author

This is great news!

So we would just have to extend your plugin a little bit, and then wait for version 1.4 of mumble, which will (hopefully) support your plugin? Is there any timeframe for release?

In that case, I would like to extend your plugin to fit my needs. Should I open an issue in your repo?

Thank you in advance!

@Krzmbrzl
Copy link
Member

Yes - though the plugin isn't what needs extension. It's the plugin framework.

The changes necessary to expose a few extra settings is rather minimal though, so I could even do that for you. Are the settings mentioned in your initial request all that you need? You'll get read and write settings to them ☝️

Is there any timeframe for release?

Not really. Initially we wanted to release 1.4.0 somewhat soon after the plugin PR has been merged but we also wanted to start distributing snapshot releases earlier (some complications in regards to the Windows installer and the new build-chain prevented that though). Depending on when the plugin PR gets merged we'll probably still wait a bit in order for volunteers to test the changes in 1.4.0 before releasing it as a stable release.

The plugin PR itself will probably be merged in the matter of 1-2 months. Maybe earlier. I can't really tell as it is currently being reviewed by a third-party group.

@StarGate01
Copy link
Author

StarGate01 commented Nov 10, 2020

Are the settings mentioned in your initial request all that you need?

Yes, setting those four values would be all I would need for now. If you want to add that, that of course would be cool - thank you very much!

In terms of release, that sounds promising. I will check back when there are public stable builds available.

Edit: if there are any usable beta versions, I would like to test those too.

@Krzmbrzl
Copy link
Member

Edit: if there are any usable beta versions, I would like to test those too.

Well I hope we can offer snapshot releases in 2-3 weeks. Until then there'd always be the possibility of compiling the branch for my plugin PR yourself or grabbing one of the CI artifacts :)

@Krzmbrzl Krzmbrzl mentioned this issue Nov 10, 2020
27 tasks
@Krzmbrzl
Copy link
Member

Krzmbrzl commented Nov 10, 2020

If you want to add that, that of course would be cool

Here you go: 19ba1af
Note that the commit ID will probably change at some point in the future as my PR branch is rebased somewhat regularly in order to keep up with the current master branch.

Krzmbrzl added a commit to Krzmbrzl/mumble that referenced this issue Apr 14, 2021
This commit introduces a new plugin framework into the codebase of the
Mumble client. Note that "plugin" here really refers to a (more or less)
general purpose plugin and is therefore not to be confused with the
previously available positional data plugins (only responsible for
fetching positional data from a running game and passing that to
Mumble).

The plugin interface is written in C, removing the compiler-dependence
the old "plugins" had. Instead plugins can now be written in an
arbitrary language as long as that language is capable of being compiled
into a shared library and also being capable of being C-compatible.

As already indicated a plugin is essentially a shared library that
provides certain functions that allow Mumble to interface with it.

Inside Mumble the so-called PluginManager is responsible for managing
the plugins and relaying events to the respective callbacks. Plugins
themselves can also interact with Mumble on their own initiative by
using the provided API functions.

Fixes mumble-voip#2455
Fixes mumble-voip#2148
Fixes mumble-voip#1594
Fixes mumble-voip#2051
Fixes mumble-voip#3742
Fixes mumble-voip#4575
Fixes mumble-voip#4751
Krzmbrzl added a commit to Krzmbrzl/mumble that referenced this issue Apr 15, 2021
This commit introduces a new plugin framework into the codebase of the
Mumble client. Note that "plugin" here really refers to a (more or less)
general purpose plugin and is therefore not to be confused with the
previously available positional data plugins (only responsible for
fetching positional data from a running game and passing that to
Mumble).

The plugin interface is written in C, removing the compiler-dependence
the old "plugins" had. Instead plugins can now be written in an
arbitrary language as long as that language is capable of being compiled
into a shared library and also being capable of being C-compatible.

As already indicated a plugin is essentially a shared library that
provides certain functions that allow Mumble to interface with it.

Inside Mumble the so-called PluginManager is responsible for managing
the plugins and relaying events to the respective callbacks. Plugins
themselves can also interact with Mumble on their own initiative by
using the provided API functions.

Fixes mumble-voip#2455
Fixes mumble-voip#2148
Fixes mumble-voip#1594
Fixes mumble-voip#2051
Fixes mumble-voip#3742
Fixes mumble-voip#4575
Fixes mumble-voip#4751
Krzmbrzl added a commit to Krzmbrzl/mumble that referenced this issue Apr 16, 2021
This commit introduces a new plugin framework into the codebase of the
Mumble client. Note that "plugin" here really refers to a (more or less)
general purpose plugin and is therefore not to be confused with the
previously available positional data plugins (only responsible for
fetching positional data from a running game and passing that to
Mumble).

The plugin interface is written in C, removing the compiler-dependence
the old "plugins" had. Instead plugins can now be written in an
arbitrary language as long as that language is capable of being compiled
into a shared library and also being capable of being C-compatible.

As already indicated a plugin is essentially a shared library that
provides certain functions that allow Mumble to interface with it.

Inside Mumble the so-called PluginManager is responsible for managing
the plugins and relaying events to the respective callbacks. Plugins
themselves can also interact with Mumble on their own initiative by
using the provided API functions.

Fixes mumble-voip#2455
Fixes mumble-voip#2148
Fixes mumble-voip#1594
Fixes mumble-voip#2051
Fixes mumble-voip#3742
Fixes mumble-voip#4575
Fixes mumble-voip#4751
Krzmbrzl added a commit that referenced this issue Apr 16, 2021
This commit introduces a new plugin framework into the codebase of the
Mumble client. Note that "plugin" here really refers to a (more or less)
general purpose plugin and is therefore not to be confused with the
previously available positional data plugins (only responsible for
fetching positional data from a running game and passing that to
Mumble).

The plugin interface is written in C, removing the compiler-dependence
the old "plugins" had. Instead plugins can now be written in an
arbitrary language as long as that language is capable of being compiled
into a shared library and also being capable of being C-compatible.

As already indicated a plugin is essentially a shared library that
provides certain functions that allow Mumble to interface with it.

Inside Mumble the so-called PluginManager is responsible for managing
the plugins and relaying events to the respective callbacks. Plugins
themselves can also interact with Mumble on their own initiative by
using the provided API functions.

Fixes #2455
Fixes #2148
Fixes #1594
Fixes #2051
Fixes #3742
Fixes #4575
Fixes #4751
Krzmbrzl added a commit that referenced this issue Apr 26, 2021
This commit introduces a new plugin framework into the codebase of the
Mumble client. Note that "plugin" here really refers to a (more or less)
general purpose plugin and is therefore not to be confused with the
previously available positional data plugins (only responsible for
fetching positional data from a running game and passing that to
Mumble).

The plugin interface is written in C, removing the compiler-dependence
the old "plugins" had. Instead plugins can now be written in an
arbitrary language as long as that language is capable of being compiled
into a shared library and also being capable of being C-compatible.

As already indicated a plugin is essentially a shared library that
provides certain functions that allow Mumble to interface with it.

Inside Mumble the so-called PluginManager is responsible for managing
the plugins and relaying events to the respective callbacks. Plugins
themselves can also interact with Mumble on their own initiative by
using the provided API functions.

Fixes #2455
Fixes #2148
Fixes #1594
Fixes #2051
Fixes #3742
Fixes #4575
Fixes #4751
frelon pushed a commit to frelon/mumble that referenced this issue May 3, 2021
This commit introduces a new plugin framework into the codebase of the
Mumble client. Note that "plugin" here really refers to a (more or less)
general purpose plugin and is therefore not to be confused with the
previously available positional data plugins (only responsible for
fetching positional data from a running game and passing that to
Mumble).

The plugin interface is written in C, removing the compiler-dependence
the old "plugins" had. Instead plugins can now be written in an
arbitrary language as long as that language is capable of being compiled
into a shared library and also being capable of being C-compatible.

As already indicated a plugin is essentially a shared library that
provides certain functions that allow Mumble to interface with it.

Inside Mumble the so-called PluginManager is responsible for managing
the plugins and relaying events to the respective callbacks. Plugins
themselves can also interact with Mumble on their own initiative by
using the provided API functions.

Fixes mumble-voip#2455
Fixes mumble-voip#2148
Fixes mumble-voip#1594
Fixes mumble-voip#2051
Fixes mumble-voip#3742
Fixes mumble-voip#4575
Fixes mumble-voip#4751
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
client feature-request This issue or PR deals with a new feature
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants