Menu

HCMP messaging protocol

SunnyFish

HCMP Messaging (alpha 0.1)

OSC message

OSC message is used to control the conductor directly, by which one can use a external device to control playback and tempo. Since OSC messages are based on UDP, such messages are functionally limited and assumed to be transfered locally.
Address is: /hcmp
Message content: one integer.

Type Message Comments
Tap -3 Indicate a beat point to the conductor.
Play -1 start conducting
Stop -2 stop conducting and tell the players to stop
Cue 0 ~ 999 Let the conductor to send a cue to players.

ZMQ message

  • Messages are in Strings and are separated by whitespace " ".
  • In one message, the first String is fixed to "Hcmp".
  • The second string is the operation's identifier, for example, tm (for updating time map)
  • The next several strings are parameters, which in this version are all converted to Strings.

The following table shows the messages used by HCMP. Note that <something> means a number and the "something" inside is the variable's name.

Control Messages
Type Direction Message Comments
Play c->p* play start playing
Stop c->p stop stop playing
Update time-map c->p tm k b Send new time-map (vtime = rtime * k + b) to the player
Set Position c->p pos vtime set position to beat vtime
PlayAll p->c** ID *** play indicate the conductor to play
StopAll p->c ID stop indicate the conductor to stop
Ready p->c ID ready tell the conductor that this player is ready to play
Position p->c ID pos vtime indicate the conductor to go to position vtime

* c->p means from conductor to player
** p->c means from player to conductor
*** the ID of the player.

Clock Sync Messages
Type Direction Message Comments
ReSync/StartSync p->c resync Phase 1: tell the conductor to start clock sync
Send Conductor Time c->p cclk time Phase 2: tell the player clock sync starts and send conductor's local time by time
Send Player's Time p->c pclk time Phase 3: send the conductor the player's local time
Send Player Latency c->p clat latency Phase 4: send the latency between sending cclk and receiving pclk to the player.

Related

Wiki: Introduction