From Mumble Wiki
Revision as of 14:46, 22 April 2008 by Slicer (talk | contribs)
Jump to: navigation, search

Linking a game to Mumble

The "best" way to link a game to mumble is to write your own plugin. However, that may be a lot of work, so we have an alternative method.


Somewhere in your game initalization, add these lines of code:

struct LinkedMem {
#ifdef WIN32
	UINT32	uiVersion;
	DWORD	uiTick;
	uint32_t uiVersion;
	uint32_t uiTick;
	float	fPosition[3];
	float	fFront[3];
	float	fTop[3];
	wchar_t	name[256];

LinkedMem *lm = NULL;

#ifdef WIN32
static HANDLE hMapObject = NULL;
void initMumble() {
	hMapObject = OpenFileMappingW(FILE_MAP_ALL_ACCESS, FALSE, L"MumbleLink");
	if (hMapObject == NULL)

	lm = (LinkedMem *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(LinkedMem));
	if (lm == NULL) {
		hMapObject = NULL;
	wcscpy_s(lm->name, 256, L"MyGameName");
static int shmfd = -1;
void initMumble() {
  char memname[256];
  snprintf(memname, 256, "/MumbleLink.%d", getuid());

  shmfd = shm_open(memname, O_RDWR, S_IRUSR | S_IWUSR);

  if(shmfd < 0) {

  lm = (LinkedMem *) (mmap(NULL, sizeof(struct LinkedMem), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd,0));

  if (lm == (void *) (-1)) {
	lm = NULL;

Then, for each frame, do the following:

#ifndef WIN32
static const int32_t GetTickCount() {
	struct timeval tv;

	return tv.tv_usec / 1000 + tv.tv_sec * 1000;

void updateMumble() {
	if (! lm)

	// Fill lm->fPosition, fTop and fFront

	lm->uiVersion = 1;
	lm->uiTick = GetTickCount();

fPosition should be the player position in 3D space. fTop and fFront should be the orientation. The coordinate system is a left-handed one, and the units are in meters.

Mumble fetches these values 50 times a second, so please update them every frame.