This is the starting point for voice communication using Steam.
There are three interfaces used for voice communication:
- SteamVoip: This is the global voice system, in which you can create rooms and clients.
- SteamVoipRoom: A room is the host for communication between clients. Clients in the same room can talk to each other.
- SteamVoipClient: A recording and playing entity that sends and receives voice to and from other clients in the same room.
To use voice communication you must first create a room.
You must then update the voice system every frame to allow communication with clients later on.
No voice is recorded at this stage since only clients deal with recording and playback. You need to create two clients on
different computers. The creator of the room, the host, can also create a client if that is desired. Only the host can add
peers to the room and other peers need to know the room ID to join the room. Therefore it is a good idea to setup two RPCs,
one for a join request and one for a join accept.
The peer that wants to create a client sends an RPC to the host.
RPC.want_to_join_room(host)
The host handles the RPC and responds by adding the peer to the room and sending back an RPC that indicates which room the
peer should join.
function CallbackObject:want_to_join_room(sender)
SteamVoipRoom.add_member(self.room_id, sender)
RPC.accept_join_room(sender, self.room_id)
end
The peer should handle the accept RPC and join the room when accepted.
function CallbackObject:accept_join_room(host, room_id)
self.client = SteamVoip.join_room(host, room_id)
end
The client peers must now update the VoIP system as well as the host. They provide a callback object to be notified of
joining members.
When a new peer is added to the room, all connected clients receive a callback that they must respond to with information
on the Timpani event to play and the sound source to play the event on. The Timpani event is a dummy event that needs to
exist to set volumes and such things for the voice.
|
Creates a room and returns a unique identifier for it.
|
Parameters | This function does not accept any parameters. |
Returns string |
The ID of the created room.
|
|
Destroys the specified room.
|
Parameters room_id : | string | The ID of the room you want to destroy. |
Returns | This function does not return any values. |
|
join_room ( host_peer_id, room_id ) : stingray.SteamVoipClient
Joins this peer to the specified room.
|
Parameters host_peer_id : | string | The ID of the room host. |
room_id : | string | The ID of the room you want to join. |
Returns
|
Leaves a room.
|
Parameters Returns | This function does not return any values. |
The specified client is destroyed.
|
Updates the voice system.
|
Parameters callback_object : | table | A table that contains a set of callback functions that are invoked to respond to changes in the room membership. |
Returns | This function does not return any values. |
The callback object will receive the following callbacks:
- room_member_added(room_id, peer_id): timpani_world, event, sound_source? : This is called
when a new client has entered the room. You must return the information required to play the voice of
the new client. First, you supply the [TimpaniWorld] to play the sound in, as returned by [stingray.World.timpani_world()].
Then you supply the Timpani event to start the voice. This can be an event for a dummy sound that will not be played.
Last, a reference must be supplied to indicate where in the world the sound will be heard. You can specify the sound
source using any of the following types:
- nil: The event will be triggered as a 2D sound source.
- Unit, object_index?: Triggers the timpani event linked to the specified unit (and object if specified).
- Matrix4x4 : Triggers the timpani event linked to the specified pose.
- Vector3, Quaternion?: Triggers a Timpani event played at the specified position and optional rotation.
- sound_source_id: Triggers an event on a sound source returned by a previous [TimpaniWorld.trigger_event()] call.
- room_member_removed(room_id, peer_id): This is called when a client leaves a room.