Vibra - ZX Spectrum beeper music engine
by utz 07'2017
1tracker version by Shiru 01'2018


Vibra is a ZX Spectrum beeper music engine with two tone channels and a 
dedicated noise channel. The tone channels support customizable vibrato and
slide effects. The vibrato effect has 7 speed settings, and 255 depth levels. 
Effective vibrato speed depends on the note frequency used. Tone channels are 
unbalanced, that means the second channel will play at approx. 80% volume of the
first channel.

A general problem is that the vibrato speed is tied to the note frequency.
This makes it impossible to have consistent vibratos across the note range.

The noise channel supports 255 pitch levels, and 127 volume levels. Noise 
generator is only updated if there is enough free CPU time, so data reads etc.
may affect the noise timbre.

The usual interrupting click drums are absent from this engine, as the available
effects should be sufficient to create drum sounds.

The engine reloads song data on the fly during playback, thus mitigating the
common problem of row transition noises for the most part.

Technical details:

- 12-bit note frequency dividers
- 8-bit noise pitch dividers
- 7-bit noise volume
- 3-bit vibrato speed (relative to note frequency)
- 8-bit vibrato depth
- 8-bit slide speed
- mixing at 7812.5 Hz


The columns are:

Sp T1 d EDpS T2 d EDpS NpNv
.. .... .... .... .... ....
   |       | |       | |  |
   +--ch1--+ +--ch2--+ +ch3
   
Sp : Speed, 1..99

T1,T2 : Tone channels
  Tn : Note, C-0..B-7
   d : Detune, 1..9
   E : Nothing for vibrato, 1 slide up, 2 slide down
  Dp : Vibrato or slide depth, 1..99
   S : Vibrato speed
   
NpNv : Noise channel
 Np : Noise pitch, 1..99 (lowest to highest)
 Nv : Noise volume, 1..99 (lowest to loudest)
