P. DooM's BUZZync 1.0 beta

a present for the BUZZ community. Also available as a commercial product :)

2001 by Peter "P. DooM" Kaufmann
kaufmann@pop.agri.ch
http://combi.agri.ch/kaufmann/


What the hell is BUZZync?

BUZZync is a MIDI program that synchronizes two instances of the windows tracker BUZZ by Oskari 
Tammelin. It might be useful for people who want to use two BUZZes at the same time (for whatever  
reason) or for live performances


In a few words, how does BUZZync work?

BUZZync uses the MIDI capabilities of BUZZ. One BUZZ instance plays the role of the master. It 
sends a MIDI controller-value to BUZZync every beat. The slave-instance of BUZZ also sends a MIDI-
controller value to BUZZync in the same interval, but it also receives a MIDI-controller value from 
BUZZync. With this controller, BUZZync changes the tempo of the slave BUZZ to get in sync with the 
master, to achieve a 'match', as I call it here.


So... how do I set up BUZZ to use BUZZync?

You must be able to make a physical (or logical) MIDI connection between BUZZync and the two 
BUZZes. The master BUZZ instance must be able to send MIDI data to BUZZync, the slave needs a 
two-way connection (send and receive). The set-up of the MIDI connections is not discussed here.

Master-BUZZ:

In the Master-BUZZ (the instance of BUZZ that runs on its own tempo), do the following:
?	Insert a MIDI-out machine (e.g. vMidiOut)
?	Set the appropriate MIDI-out port in vMidiOut (options). Also make sure that the same port 
is enabled in the BUZZ preferences under 'Midi Output'. This port will then connect to 
'Master in' in BUZZync.
?	Create a new pattern that sends a value greater than 64 to controller number 1 every beat. In 
vMidiOut, this should look something like this:

 

?	this pattern must be played during the whole song. So just insert it in every row in the 
sequence editor.


Slave-BUZZ:

IN the Slave-BUZZ (the instance of BUZZ that gets synced to the Master-BUZZ), do the following:
?	Insert a MIDI-out machine (vMidiOut) and do exactly the same as for the Master-BUZZ (see 
above), with a different MIDI-port. This port will connect to 'Slave in' in BUZZync.
?	If you haven't set up the MIDI-in port of BUZZ before: Go to preferences  'Midi Input', select 
the MIDI input device which comes from BUZZync (called 'Slave out' in BUZZync) and create 
a new controller: 1.
?	Open the Master-machine and bind controller 1 to BPM (right-click on BPM, 'Bind to Midi 
Controller')


And what do I set up in BUZZync??

The easier part. Just two things to do:

First, select all 3 MIDI-ports:
?	Master in: corresponds to output from the MIDI-out machine of Master-BUZZ.
?	Slave out: corresponds to Slave-BUZZ MIID input.
?	Slave in: corresponds to output from MIDI-out machine of Slave-BUZZ

If all MIDI-ports are at a reasonable setting, 'Overall MIDI-status' should say 'OK' (in BUZZync, this is).

Second, set the song tempo. This must be the same as the tempo (BPM) of master-BUZZ. Perhaps 
you wonder why you have to set the tempo manually. The reason is: MIDI is not accurate enough to 
keep the tempo perfectly, so it helps BUZZync a lot if it knows what the tempo of the song should be!


Everything set up. How to start jamming?

The best way to start a synced play is to follow these steps, in that exact order:

?	Set both BUZZes to the same BPM (tempo). 
?	Make sure everything is set up (MIDI machines, MIDI ports, MIDI ports in BUZZync, tempo in 
BUZZync).
?	Start one BUZZ, then start the other one and try to get them synced by ear! For example 
you start Master-BUZZ first, then go to Slave-BUZZ, set the cursor to tick 64 and start playing 
when Master-BUZZ arrives at tick 64. (You can also do this just by looking at the moving 
cursor of Master-BUZZ). Note: this doesn't have to be perfect! It's just a help for BUZZync, so 
it knows which beats should go together.
?	If everything went ok so far, the Master in and the Slave in  LED should be lit!
?	Press the Start-button in BUZZync. 


All controls of BUZZync

MIDI engine:
?	Master in, Slave out, Slave in: the MIDI ports. See above.
?	Overall MIDI-status: If all MIDI ports are opened successfully, this should say 'OK'
?	Start/Stop: start and stop syncing. 
?	Master in-LED: indicates an incoming sync controller (1) from Master-BUZZ
?	Slave out-LED: a tempo change is sent to Slave-BUZZ. This LED doesn't have to be lit all the 
time, only when tempo changes are necessary.
?	Slave in-LED: indicates an incoming sync controller (1) from Slave-BUZZ


match indicator:
Shows how good the two beats are synced. In the middle position (0 ms) sync is perfect, if the slider 
moves to the right, Slave-BUZZ is ahead of Master-BUZZ and the tempo will be changed accordingly

tempo:
?	Song tempo: Enter the song tempo (BPM) here. This is an important setting! If this doesn't 
match the BPM of the Master-BUZZ, BUZZync will have a very hard job! Note: Actually, this 
doesn't have to match the BPM of Master-BUZZ. It is the tempo of the incoming sync-
controllers (e.g. created with vMidiOut). And this also depends on the TPB setting in BUZZ. 
Example: if you set BPM to 140 and TPB to 4 and made the same pattern for vMidiOut as 
shown above, you can set the song tempo to 140, too. See below for more information about 
special tempo settings.
?	Playing at: the tempo currently sent to Slave-BUZZ. Fractional tempos will be translated to 
short, jerkish tempo changes, according to some math formula.
 
match parameters:
Here you can change the behavior of the synchronization. 
?	React on mismatch: When Slave-BUZZ is ahead of Master-BUZZ (too early), the tempo must 
be set to a lower value. This slider sets the amount of changes made to the tempo if there is 
no match. If the slider is set to 'lazy', it will only change the song tempo little, so it may take 
some time until the sync is re-established. If it is set to 'overreact', much bigger adjustments 
will be made to the tempo. This may cause an overreaction: The tempo is changed so much 
that it overshoots the perfect match. (e.g. Slave was too early before, it gets much too late 
after the automatic adjustment).
?	Force to song tempo: To prevent that overshooting mentioned above, this setting will gradually 
'suck' the tempo to the desired song tempo (see 'tempo' above). Like a magnet. 
?	Default: Set 'react on mismatch' and 'force to song tempo' to default values.
?	HELP!!: show this documentation

Note: the effects of these two settings depend on each other! If 'react on mismatch' is set to a high 
value, you may get good results with a high 'force to tempo'-setting, but a low 'react on mismatch' 
setting and a high 'force to tempo' setting will make the tempo almost bound to the song tempo.
You will have to play around with these settings a bit to achieve the best results. Some general hints:
?	A low 'react on mismatch' setting works good if you know that the two BUZZes work stable, 
without dropouts. They might, however, drift a little after a certain time without the use of 
BUZZync. Such slow, non-jerky sync problems can be best controlled with a low 'react on 
mismatch' setting, and some 'force to song tempo'. Don't set 'force to song tempo' too high in 
this case, because this will make it hard for the matcher to get away from the song tempo and 
make the necessary adjustments.
?	A high 'react on mismatch' and a high 'force to song tempo' setting are good if you know that 
one (or both) of the BUZZes will make glitches, dropouts, clicks/pops etc.. from time to time, 
which would destroy the sync totally without BUZZync. The high 'react on mismatch' setting 
will assure that the mismatch gets fixed as quick as possible (it will, however, take some 
seconds to get in sync again if it was a big dropout). The high 'force to song tempo' setting will 
re-establish the song tempo as soon as possible.

 
Special tempos / TPB other than 4

Everything described above was meant for a TPB setting of 4 (in BUZZ). If you want to use other TPB 
settings, you'll have to change the vMidiOut-pattern (see pic above) a bit. E.g. for TPB=8, you must 
send the controller every 8 ticks only. The song tempo in BUZZync will be the same as TPB in BUZZ. 
You can also sync one BUZZ with TPB=4 to another with TPB=8, of course. Just make the appropriate 
vMidiOut-patterns.
If you use this program, you should be smart enough and know BUZZ by heart anyway, so you should 
be able to figure out how to set the song tempo in BUZZync and how to make the vMidiOut pattern 
yourself :). 



Hint

If you've read this manual attentively so far, you'll perhaps have noticed that BUZZync doesn't work 
with some kind of 'song position' mechanism. This has some important pros and cons:
?	Con: If a big dropout happens, or a MIDI transmission error or something, which kicks the 
Slave-BUZZ completely out of sync, it WILL get back in sync again. But perhaps it won't sync 
to the same beat again. So it might be, that after a really bad dropout, it is always exactly one 
note behind (or ahead) of the Master-BUZZ. 
?	Pro: You can DJ around with BUZZ. Take this scenario: You got two BUZZes playing in sync 
with BUZZync. Now you can just set the song position pointer (in Slave or Master) to a new 
tick. You count, 2-3-4-1-2-3-4, and on the next 1 you set the song position. So Slave-BUZZ 
will now play a totally different part. Now the benefit of BUZZync drops in: If you didn't catch 
the beat exactly on 1 (which will be quite certainly the case), BUZZync matches the beat 
automatically! After some ticks, or some seconds (depending on the settings and your 
counting abilities), it will be in sync again!


Known Problems
?	vMidiOut stops sending midi data after some time. I experienced this problem here, I don't 
know why it happens or if it will happen with your PC, too. You may try another MIDI out 
machine which can send midi controllers, if you don't like vMidiOut
?	Midi output in BUZZ is far from accurate. Try to get a low latency, as this is said to help. Check 
out the BUZZ FAQ or the mailing list for never-ending discussions about latency problems


Info

This is still a beta-release! Please don't spread it, check my homepage for updates and the final 
version. Please report all bugs or new ideas!

? Check out my homepage for other cool programs, like 'MidiMap', a mapping program for MIDI 
controllers.

2001 by Peter "P. DooM" Kaufmann
kaufmann@pop.agri.ch
http://combi.agri.ch/kaufmann/
