Game Development Community

Mumble Plugin

by Quinton Delpeche · in Torque 3D Professional · 11/15/2012 (4:54 am) · 10 replies

Anyone looked at using Mumble (mumble.sourceforge.net/) in their game. They have a positional audio plugin system that looks interesting ... and I am wondering if anyone has tried to get the plugin working.

Positional Audio - mumble.sourceforge.net/Positional-Audio

There are two different approaches for Mumble to get this information.

One: The Game itself has a routine that transmits this data from within the program to the mumble client.

Two: The Mumble client can use a specially crafted plugin to peek into the memory of a game to get the needed information. This approach is done from outside of the program. If a program gets updated and stores the position on a different memory offset the plugin has to be updated as well to work again.

I am going to look in to this for my current project H.A.Z. ... but I am keen to see if someone else would like to help me or would like to collaborate on this.

About the author

Gobbo Games is an Independent Games Development company operating from Durban in South Africa. We believe in creating high-quality cost-effective games that remain true to the belief of Independent Game Developers around the world.


#1
11/15/2012 (4:59 am)
No, but it will solve an issue I had not had time to look at. Thanks for the heads up.
#2
11/15/2012 (5:12 am)
http://www.garagegames.com/community/blogs/view/21601/1#comment-187187
#3
11/15/2012 (5:14 am)
@ahsan: Cool ... looked at that, but isn't what I am looking for.

I have found some more information on Mumble that might make the implementation easier.

If you can change the sourcecode of the game you want to add positional audio support to you can save yourself the trouble of creating your own plugin by using the facilities supplied by the link plugin.

All code listed below is in the public domain and can be used, shared or modified freely.

mumble.sourceforge.net/Link
#4
11/15/2012 (8:25 am)
Mumble looks interesting. I have a question about its positional audio: is this all done client side? So if I have 20 people talking around me in-game, then there are 20 audio streams coming from the Mumble server (using up bandwidth) and they are all mixed on the client end based on position?

Or is the position information sent to the Mumble server, all mixing is done there, and a single stereo audio stream is sent to the client?

- Dave
#5
11/15/2012 (12:57 pm)
Traditionally in cases of Teamspeak and Ventrilo all the audio mixing is done client side only as the server does nothing more than enforce policy rules as to what clients can do and muxes the individual incoming talking client voice streams that the server receives into a single stream to distribute/duplicate to each listening client.

In the case of mumble I'm sure they're doing the exact same thing. So bandwidth usage does increase for each talker and of course distributing those streams to each listener.
#6
11/15/2012 (5:45 pm)
Quinton, there are two types of implementation for mumble, the one you linked is the simple (with the memory write), and in practice requires the original mumble client, installed and running. In any case, you must associate each player online with its mumble user.

To implement Mumble in order more rooted, requires a knowledge almost absolute, of the same mumble. And the extrapolation of the code needed for this purpose, from the libraries included in the client. I seemed to understand over the years that there is no documentation of its full integration in a separate project.

In practice, if you do not have in-depth knowledge of Mumble framework, the result will always be, in the best cases, equivalent to that of a "home-made" service.
#7
11/15/2012 (8:02 pm)
@Alfio: Thanks for the information. I will carry on doing some research and see what I turn up.

@David: From what I have gathered, Nathan is right.


@All: When I get some free time I will mess around a little with this and see what I turn up. Another option I was looking at was an Asterisk server running in real-time configuration mode using one of the low bandwidth codecs ... this would unfortunately not do positional audio.

I will do some more research and see what I can turn up.
#8
11/16/2012 (12:33 pm)
@Quinton: I believe you will find Asterisk far more complicated due to the way SIP was designed which is emulate a phone service rather than just voice over internet protocol. I suggest just learning and figuring out mumble as that is your best option.
#9
11/16/2012 (12:50 pm)
I was looking at Raknet's VoIP examples with this same thing in mind, but though I could get their example working just fine my own experiments just wouldn't work.

Hmm, perhaps I'll go back and look at that again. It would be good to integrate this with T3D's server side and let that handle deciding which clients get which streams....
#10
11/16/2012 (9:02 pm)
@Nathan: Appreciate your comment. I have been building Asterisk solutions since 2007 and have been responsible for a signed Java Applet that connect to an Asterisk server from your browser and a PHP Implementation of the Asterisk AGI Interface.

I would not be using SIP as my protocol but instead I would use IAX2 with a low bandwidth codec.

By using Real Time configuration, I could create and tear down dynamic conference rooms.

Granted this is not the ideal solution for a voice chat server, but for my requirements where players can only chat if in a group ... it would work. I also would not get any positional audio or the other benefits from tru in-game chat ... but that would have to be acceptable Not the best solution, but it would be the quickest solution.


I would love to use Mumble or look at Raknet's VoIP ... but my main forte is Java and not C++ ... so I am at a bit of a disadvantage there. I can help myself in C++ and do most common tasks ... but integrating something like Mumble would take me quite a while to get integrated.


What I have decided to do is to get a basic Mumble Client Server implemented outside of the game (i.e. No positional audio). I could skin the client and host a private server during the test phases ... linking the Mumble user to an in-game user would be pretty easy with my GameStream service.

I am hoping that as I attract more members to my project ... I might be able to get a C++ expert to look at Mumble integration for the project.


My original post here was to see if anyone had integrated Mumble already or had some other solution that is Indie friendly.


@All: Thanks for the comments and suggestions ... I will put them forward to the rest of my team and see what they say.

Thanks again.