Getting host information into Csound

There will be times when your plugin will need to ask the host for certain information. Like when a track starts playing for example, or what the current tempo is. Cabbage uses reserved channels to retrieve this information. The reserved channel relating to host information are:

HOST_BPM Retrieve the currents host bpm. This will be updated whenever the host BPM changes.

IS_PLAYING Pressing play on the host transport controls will cause this channel to send a 1. Hitting stop will send a 0.

IS_RECORDING As above only for monitoring the record status of a session.

TIME_IN_SECONDS Return the current time in seconds from the start of the track.

TIME_IN_SAMPLES Return the current time in samples from the start of the track.

TIME_SIG_DENOM The signature denominator, e.g. the 4 of a 3/4 time sig

TIME_SIG_NUM The signature numerator, e.g. the 3 of a 3/4 time sig

HOST_PPQ_POS Return the position of the start of the last bar, in pulses-per-quarter-note.

All the host information can be found using the chnget opcode.

kBPM chnget "HOST_BPM"
kIsPlaying chnget "IS_PLAYING"
kIsRecording chnget "IS_RECORDING"
kTimeInSeconds chnget "TIME_IN_SECONDS"
kPPQPosition chnget "HOST_PPQ_POS"
kTimeInSamples chnget "TIME_IN_SAMPLES"
kTimeSigNum chnget "TIME_SIG_NUM"
kTimeSigDenom chnget "TIME_SIG_DENOM"

Csound will update these values on each k-cycle. In most case this is every 32 samples. If you need a more immediate update lower ksmps, but note this may cause knock on affects on other parts of your instrument.

Note that you need to be careful when querying these values. Some host will not broadcast this information until it starts playing. This can lead to a division by 0 errors. If you wish to use the host BPM to set say a delay time, you should wrap it in a divz opcode, i.e,

kDelay = divz(60, kBPM, 1)

The HostInfo.csd file in the Cabbage examples shows all the current information that can be retrieved in Csound.