Simplest Possible P2P Voice Chat Using Fire★

voicechat

Fire★ is a platform for making writing peer-to-peer applications as simple as possible. I am going to show here how to write the simplest, most dumb and basic voice chat app using Fire★. I have recently added the ability to grab sound from the microphone and play sound through the speaker. With the capability to get raw audio from a microphone, ability to play sound, and the ability to send messages, writing a very basic voice chat app is easy. All Fire★ applications are written in the Lua programming language.

Creating a mic and speaker is easy.

[code language=”javascript”]
m = app:mic("got_sound", "pcm")
s = app:speaker("pcm")
m:start()
[/code]

The constructor for the microphone takes a callback and a codec to use. In this case we will use simple pcm. Whenever audio data is captured from the microphone, got_sound will be called.

[code language=”javascript”]
function got_sound(d)
local m = app:message()
m:set_type("s")
m:set_bin("d", d)
app:send(m)
end
[/code]

“got_sound” simply takes the pcm audio data, and wraps it in a message to send to all the peers.

[code language=”javascript”]
app:when_message("s", "play_sound")
function play_sound(m)
s:play(m:get_bin("d"))
end
[/code]

The audio messages are of type ‘s’ and when a peer gets a message of type ‘s’, the “play_sound” function is called. “play_sound” simply plays the pcm audio to the speaker.

This is the code for possibly the simplest peer-to-peer voice chat application you can write. I have checked into GitHub a slightly more complicated version with the basic GUI you see in the screenshot above here: https://github.com/mempko/firestr/tree/master/src/packaged_apps/voice

Of course this is no where near a real voice chat app. I just wanted to demonstrate that there is a basic foundation that can support voice chat. Next up, video!

Subscribe to Maxim Khailo's Writing

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe