## Ninereeds Broadcast

By Steve Horne, 21 July 1999

This generator does not generate an output signal at all. Instead, it provides a convenient way to transmit commands over the 'broadcast interface'.

The broadcast interface is a way of communicating between Buzz machines. The reasons for this are...

1. To provide a centralised form of control, so that a command defined in one place can affect the output of a number of machines simultaneously.
2. To provide a way of communicating between machines in Buzz and some external application.
3. To provide a way of sending additional information to a machine that has outgrown its parameters, without losing backward compatability.

Unfortunately, commands cannot be sent to just any machine. The machine must be written to support this capability, and must be configured to listen to the right channel.

Communication with external applications is not yet supported. Communication with a parent application that is using BuzzPlay.DLL may be possible, but synchronization is not yet supported.

### History

???
  First Release

### Global Parameters

The global parameters are...

Channel
  This parameter specifies which channels the command is to be sent over. This is constructed by adding the following values in hex...
  - 01 : Include channel 0
  - 02 : Include channel 1
  - 04 : Include channel 2
  - 08 : Include channel 3
  - 10 : Include channel 4
  - 20 : Include channel 5
  - 40 : Include channel 6
  - 80 : Include channel 7

  A value of 0F will therefore send on channels 0, 1, 2 and 3 simultaneously.

  The idea is that machines should be grouped, with each group listening to a particular channel. Commands can the be sent to one particular group, or to a number of groups, at the same time.

  The default is to send on channel 0 only.

Time
  This indicates when the command should be handled by the receiving machines...
  - 0000 : Now
  - 0080 : In half a tick
  - 0100 : In one tick
  - 1000 : In sixteen ticks

Command
  This indicates what command to send, in the range 01 to FF. The following convention for command numbers should be followed by all machines...
  01 .. 3F
    Commands in this range have standard meanings implemented by the machine.
  40 .. 7F
    Commands in this range are reserved for machine-specific user-configurable macros.
  80 - BF
    Commands in this range can be used for machine-specific non-standardised tasks.
  C0 - FF
    Commands in this range have standard meanings, which are partially or fully implemented by the broadcast library itself.

Byte Params 1..4
  These parameters specify byte data, the meaning of which depends on the command. The values are in the range 00 to FE.

Word Params 1..4
  These parameters specify word data, the meaning of which depends on the command. The values are in the range 0000 to FFFE.

The currently defined commands are...

Select Program
  Selects a particular instrument program from a bank of memorised settings.

      Command      : 01
      Byte Param 1 : Program ID

All Notes Off
  Generates a note off command in all channels simultaneously, overriding the pattern contents.

      Command      : C0

Ignore All Notes
  Ignores all note start commands in all channels until command C2 is received. Note off commands are still accepted.

      Command      : C1

Cancel Ignore All Notes
  Cancel Ignore All Notes

      Command      : C2

Transpose
  Modifies all note start commands to transpose the notes up or down by a set offset, giving an easy way to handle key changes without needing additional patterns to be defined.

  Any note that goes out of range is converted to a note off.

      Command      : C3
      Byte Param 1 : High digit = number of octaves to raise
                   : Low digit  = number of semitones to raise
      Byte Param 2 : High digit = number of octaves to lower
                   : Low digit  = number of semitones to lower

Set or Clear Controls
  Sets the values of up to four controls. Control IDs range from 0 to 7, and are intended to control things like filter cutoffs. They will usually map simply to normal global or track parameters.

  If a control ID is set but no value specified, that control is cleared - any current control slide is disabled, but no new value is given. This can be used to give control back to the pattern immediately.

      Command      : C4
      Byte Param 1 : Control ID 1, range 0..7
      Byte Param 2 : Control ID 2, range 0..7
      Byte Param 3 : Control ID 3, range 0..7
      Byte Param 4 : Control ID 4, range 0..7
      Word Param 1 : Control Value 1, range 0000..FFFE
      Word Param 2 : Control Value 2, range 0000..FFFE
      Word Param 3 : Control Value 3, range 0000..FFFE
      Word Param 4 : Control Value 4, range 0000..FFFE

Slide Controls
  Sets value slides for either one or two controls. These are the same controls as handled by command C5, but this command allows start and end values and durations to be set - the control is automatically stepped from the start to the end values every tick.

      Command      : C5
      Byte Param 1 : Control ID 1, range 0..7
      Byte Param 2 : Time 1, in ticks
      Byte Param 3 : Control ID 2, range 0..7
      Byte Param 4 : Time 2, in ticks
      Word Param 1 : Start Value 1, range 0000..FFFE
      Word Param 2 : End   Value 1, range 0000..FFFE
      Word Param 3 : Start Value 2, range 0000..FFFE
      Word Param 4 : End   Value 3, range 0000..FFFE

The following machines are known to support additional commands, in the range 80 to BF...

- Generators
  - Ninereeds NRS04
- Effects
  - None at present

### Track Parameters

This machine does not have any track parameters.

Multiple commands can be effectively sent simultaneously by...

- Using more than one Broadcast machine.
- Defining one of the commands early, and specifying a delay.

### Attributes

This machine does not have any attributes.

### Edit Dialog

This machine does not have an edit dialog.

If you have any comments or suggestions, please e-mail them to steve@lurking.demon.co.uk.