Mumble Positional Audio

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Propellator

Betreff: Mumble Positional Audio

BeitragFr, Jun 15, 2012 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist Mumble?
Mumble ist eine open source Software, welche zur Voice-Over-IP Kommunikation dient, und ähnlich wie Teamspeak aufgebaut ist.

Was ist Positional Audio?
Positional Audio bezeichnet ein Feature von Mumble, durch welches es die Spielfigurenpositionen in einem Spiel aufnimmt, und dann das Sprach-Audio der einzelnen Spielern in Mumble so modifiziert, dass es sich anhört als käme ihre Sprache von den Spielfiguren. Eine genauere Erklärung gibt es auf dem Mumble Wiki.

Was macht dieses Modul?
Das Modul ermöglicht Entwicklern von BlitzMax-Spielen einen einfachen Weg dieses Feature mit Hilfe des mitgelieferten Link-PlugIns in ihr Spiel einzubauen.

Dokumentation
BlitzMax: [AUSKLAPPEN]
Function MumbleInitLink:TMumbleLink()

Initialisiert den Mumble Link. Gibt eine neue Instanz von TMumbleLink zurück, falls es erfolgreich war. Bei einem Fehler (z.B. wenn Mumble nicht läuft) wird Null zurückgegeben.

BlitzMax: [AUSKLAPPEN]
Method SetPlayerIdentity( identity:String )

Setzt die Spieler-Identität. Diese ermöglicht es Mumble den Spieler eindeutig zu identifizieren, und muss daher einzigartig sein. Zudem sollte sie unter 256 Zeichen lang sein.

BlitzMax: [AUSKLAPPEN]
Method SetPlayerContext( context:String )

Setzt den Kontext, in welchem sich die Spieler befinden. Nur Spieler im gleichen Kontext hören sich positionsabhängig. Der Kontext muss einzigartig sein, z.B. Server + Port, und unter 2048 Zeichen lang.

BlitzMax: [AUSKLAPPEN]
Method SetPluginInfo( name:String, description:String )

Setzt Infos über das PlugIn, z.B. "MeinSpiel" und "Es ist toll.".

BlitzMax: [AUSKLAPPEN]
Method SetAvatar( front_x:Float, front_y:Float, front_z:Float, top_x:Float, top_y:Float, top_z:Float, pos_x:Float, pos_y:Float, pos_z:Float )

Setzt

  1. Den Vektor, welcher aus den Augen der Spielfigur kommt
  2. Den Vektor, welcher gerade nach oben aus der Spielfigur sticht
  3. Die Position des Spielers, in Meter.


BlitzMax: [AUSKLAPPEN]
Method SetCamera( front_x:Float, front_y:Float, front_z:Float, top_x:Float, top_y:Float, top_z:Float, pos_x:Float, pos_y:Float, pos_z:Float )

Siehe SetAvatar. Gleiches Prinzip, nur für Spiele in denen die Kamera nicht direkt an der Spielfigur liegt.

BlitzMax: [AUSKLAPPEN]
Method SetCameraToAvatar()

Setzt die Kamera-Koordinaten zur Spielfigur, z.B. für Ego-Shooter.

BlitzMax: [AUSKLAPPEN]
Method Update()

Sollte jedes Frame ausgeführt werden, teilt die Informationen mit Mumble. Mumble fragt diese 50 mal pro Sekunde ab.

Installation
mumbleposaudio.mod nach BlitzMax/mod/elephant.mod/ kopieren. Danach in der IDE mit CTRL+D das Modul kompilieren. Benötigt einen funktionierenden GCC (MinGW, ...)

Das Modul wurde unter Windows erfolgreich getestet, unter Linux noch nicht all zu sehr. Zur Zeit sollte es fehlerfrei auf Windows funktionieren.

Download .zip
Lizenz: zlib/libpng

Beispielcode, 2D:
BlitzMax: [AUSKLAPPEN]
SuperStrict
Framework BRL.Blitz
Import Elephant.MumblePosAudio
Import BRL.GLMax2D
Import BRL.Max2D
Import BRL.Timer
Import BRL.StandardIO

Const UNIT_MULTIPLIER:Float = 0.1

Local link:TMumbleLink = MumbleInitLink()
If link = Null Then RuntimeError("Mumble is not running. :(")
link.SetPlayerContext("bar")
link.SetPluginInfo("Fratti's Test Plugin", "Lolomat")

Type TPlayer
Global List:TList = New TList ' not really used, intended to do network stuff, but didn't due to lazyness
Field x:Float
Field z:Float
Field rotation:Float

Method New()
List.AddLast(Self)
EndMethod

Method Control()
Self.rotation = (Self.rotation + (KeyDown(KEY_RIGHT) - KeyDown(KEY_LEFT)) * 4) Mod 360
Self.x = Self.x + Cos(Self.rotation) * (KeyDown(KEY_UP) - KeyDown(KEY_DOWN)) * 3
Self.z = Self.z + Sin(Self.rotation) * (KeyDown(KEY_UP) - KeyDown(KEY_DOWN)) * 3
EndMethod

Method Draw()
SetOrigin(Self.x, Self.z)
SetRotation(Self.rotation)
SetHandle(20,20)
DrawPoly([0.0, 0.0, 0.0, 40.0, 40.0, 20.0])
SetHandle(0,0)
SetRotation(0)
SetOrigin(0, 0)
EndMethod
EndType

Graphics(800,600)
Local FrameTimer:TTimer = CreateTimer(60)
Local lplayer:TPlayer = New TPlayer
lplayer.x = 400
lplayer.z = 300

link.SetPlayerIdentity(Input("Choose an identity: "))

While Not KeyHit(KEY_ESCAPE)
Cls
lplayer.Control()
For Local p:TPlayer = EachIn TPlayer.List
p.Draw()
Next

SetColor(255,0,0)
DrawLine(lplayer.x, lplayer.z, lplayer.x + Cos(lplayer.rotation)*30, lplayer.z + Sin(lplayer.rotation)*30)
SetColor(255,255,255)

link.SetAvatar(-Cos(lplayer.rotation), 0, -Sin(lplayer.rotation), 0, 1.0, 0, lplayer.x * UNIT_MULTIPLIER, 0, lplayer.z * UNIT_MULTIPLIER)
link.SetCameraToAvatar()
link.Update()

DrawText("X: " + lplayer.x + ", sent to Mumble: " + lplayer.x * UNIT_MULTIPLIER, 0, 0)
DrawText("Z: " + lplayer.z + ", sent to Mumble: " + lplayer.z * UNIT_MULTIPLIER, 0, 12)
Flip 0
WaitTimer(FrameTimer)
Wend
End


Wer will kann mich auch ordentlich auf GitHub forken.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group