VRChat World Integration
VRChat Worlds x Pulsoid
Last updated
VRChat Worlds x Pulsoid
Last updated
At a high level, Pulsoid exposes heart rate data via the Pulsoid MIDI Protocol. A VRChat world can listen to the beats per minute transmitted through . As a result, the VRChat world can receive and react to this data.
The Demo World showcases the following features:
Displaying all heart rates on a board
Changing the floor color based on the combined heart rate
Showing individual heart rate on the wrist
The MIDI (Musical Instrument Digital Interface) protocol is a technical standard that enables electronic musical instruments, computers, and other devices to communicate and synchronise with each other by transmitting musical performance data, such as note pitches, timings, and control signals, over a serial connection. It allows for the control of multiple instruments from a single controller, facilitating complex and synchronised musical compositions and performances.
Pulsoid supports transmitting heart rate data via MIDI protocol by Pulsoid MIDI Protocol.
MIDI message consists of 3 bytes:
message byte
data 1 byte
data 2 bytes
Message byte is used to define command and channel number. There are 7 different commands and 16 different channels.
To transfer heart rate data, the Pulsoid MIDI Protocol uses
Note ON command
1 channel
So the format of first(message) byte is always the same.
Each data byte can transfer up to 7 bits of information (1 bit is reserved), which is equal to a number from 0 to 127 inclusive. However, heart rate is typically in the range of 30 to 230.
To transfer a heart rate value over the MIDI protocol, we need to encode the value from the range [30, 230] into two ranges: [0, 127] (data byte 1) and [0, 127] (data byte 2).
To achieve this, we will split the beats per minute (BPM) value into two parts:
• Number of tens
• Number of ones
For example:
• bpm = 134, number of tens = 13, number of ones = 4
• bpm = 98, number of tens = 9, number of ones = 8
Then, the number of tens is transferred as the byte 1 value and the number of ones is transferred as the byte 2 value.
67 bpm transferred by Pulsoid MIDI Protocol
90 - message type 9(Note on) on the first channel (0)
07 - number of ones
06 - number of tens
To decode bpm back 6 * 10 + 7 = 67
We’ve provided for Unity, but you’re free to integrate them in your own way.
MIDI message format explained
WebMIDI.js
Github Repo
Midi in Udon