Realistic audio presence, in Minecraft.
Realistic audio presence, in Minecraft.
Are you working from home? Spending all day on Zoom calls?
Missing that presence that you feel when everybody’s working in the same
office?Well, why not recapture that feeling by bringing everybody together—in
Minecraft!
zoomcraft
is a single-container service that augments your Minecraft server
with real-time 3D audio presence over WebRTC. It works
with any Minecraft server with RCON capabilities (vanilla servers since 1.0.0).
It uses web audio spatialization APIs
to map the audio from other players to their in-game position, in order to
create a realistic virtual presence.
Check out a screencast of zoomcraft
‘s 3D audio
capabilties. Use headphones! (or make sure your
speakers support stereo audio).
Run the Docker image on a server with access to the Minecraft game
server (vanilla / any variant with RCON access).
docker run \
-p 8080:8080 \
-e RCON_ADDRESS=http://localhost:25575 \
-e RCON_PASSWORD=minecraft \
stevenxie/zoomcraft
Join the Minecraft server.
http://localhost:8080
and enter your player username to begin8080
on a public address to allow other players tozoomcraft
. Have fun!If you experience any connection issues or other bugs, please
submit an issue so
that I can look into it!
Not all browser fully support the web audio spec. This service was developed
and tested on Chrome, so that is the recommended browser to use withzoomcraft
.
Some bluetooth headphones have limited audio channels, so when the microphone
is active, stereo audio output is disabled (meaning that 3D audio effects will
not work). If this happens, change your computer’s audio input source to be
something other than the bluetooth headphones (e.g. your computer’s internal
speakers).
Some Chrome browser extensions may interfere with the WebRTC connection
negotiation process. Run zoomcraft
in an incognito window if you
encounter connection issues.
The first connection attempt sometimes takes much longer than future This should be a lot better starting from
attempts. Be prepared for other players to be connecting
for up to 30
seconds.v1.1.1
due to the
implementation of WebRTC negotiation timeouts. Still happening?
File an issue!
zoomcraft
consists of three components: backend
, gateway
, and client
:
backend
is responsible for querying the Minecraft server for
world and player data using RCON. It exposes this
information over a GraphQL
API.
Interested in forking
zoomcraft
to support another game? This is the
code that you should probably change!In particular, check out
backend/minecraft/player_service.go
for an implementation of getting game data throughRCON
, andbackend/graphql/minecraft.resolvers.go
to see how that service is called from theGraphQL
layer.
gateway
serves both client
and backend
, and takes care of
connection routing. In particular, it:
/api/graphql
and /api/graphiql
to backend
./*
to client
.socket.io
server at /api/socket
toclient
is a React frontend thatbackend
.Couldn’t manage to convince any friends to hang out with you on Minecraft?
Create a virtual player to test the platform!
When added, the VIRTUAL
player will spawn at your current player location,
and make intermittent sounds so that you can test the platform’s 3D audio
capabilities during solo testing / development.
The following global variables can be used to alter the behavior on client
,
by typing them into the browser console.
You must apply them before connecting in order for them to take effect.
To skip player-validation in order to test audio conferencing capabilities
without Minecraft:
ZOOMCRAFT_SKIP_VALIDATION = true;
To change the maximum audible distance (after which other players are no
longer audible):
ZOOMCRAFT_MAX_DISTANCE = /* distance in blocks */
To change the rate at which player position data is updated:
ZOOMCRAFT_POLL_INTERVAL = /* duration in milliseconds */
To use custom ICE servers for WebRTC:
ZOOMCRAFT_ICE_SERVERS = [
{
urls: [
/* ... */
],
},
];
To change the WebRTC negotiation timeout:
ZOOMCRAFT_NEGOTIATION_TIMEOUT = /* duration in milliseconds */