home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Audio Version 4.94
/
audioversion4.94knowledgemediaresourcelibraryoctober1994.iso
/
msdos
/
musicbox
/
mbdoc.arc
/
MUSICBOX.TXT
Wrap
Text File
|
1988-03-20
|
187KB
|
5,160 lines
MusicBox Version 2.12PD
COPYRIGHT (C) 1986 John Dunn, All Rights Reserved
Entered into the Public Domain, March 20, 1988
Use and copying of this software and documentation, and preparation
of derivative works based upon this software and documentation are
permitted. Any distribution of this software or derivative works
must comply with all applicable United States export control laws.
This software is made available AS IS, and the author makes no
warranty about the software, its performance, or its conformity to
any specification.
Table of Contents:
Overview. . . . . . . . . . . . . . . . . . . . . . . . . 2
Getting Started . . . . . . . . . . . . . . . . . . . . . 3
MENU Commands . . . . . . . . . . . . . . . . . . . . . . 5
General Information . . . . . . . . . . . . . . . . . . . 8
Hexadecimal Numbers and Boolean Logic . . . . . . . . . . 11
Tutorial. . . . . . . . . . . . . . . . . . . . . . . . . 14
SWITCH Modules. . . . . . . . . . . . . . . . . . . . . . 20
INDEX Modules . . . . . . . . . . . . . . . . . . . . . . 22
MATH Modules. . . . . . . . . . . . . . . . . . . . . . . 25
LOGIC Modules . . . . . . . . . . . . . . . . . . . . . . 27
SEQUENCE Modules. . . . . . . . . . . . . . . . . . . . . 29
MIX Modules . . . . . . . . . . . . . . . . . . . . . . . 32
PROGRAM Modules . . . . . . . . . . . . . . . . . . . . . 34
CLOCK Modules . . . . . . . . . . . . . . . . . . . . . . 36
TRIGGER Modules . . . . . . . . . . . . . . . . . . . . . 41
ONESHOT Modules . . . . . . . . . . . . . . . . . . . . . 44
TEST Modules. . . . . . . . . . . . . . . . . . . . . . . 47
RANDOM Modules. . . . . . . . . . . . . . . . . . . . . . 49
PATTERN Modules . . . . . . . . . . . . . . . . . . . . . 53
MIDI Modules. . . . . . . . . . . . . . . . . . . . . . . 57
DISPLAY Modules . . . . . . . . . . . . . . . . . . . . . 62
SLEW Modules. . . . . . . . . . . . . . . . . . . . . . . 64
SAMPLE Modules. . . . . . . . . . . . . . . . . . . . . . 67
BOUNDS Modules. . . . . . . . . . . . . . . . . . . . . . 69
OCTAVE Modules. . . . . . . . . . . . . . . . . . . . . . 71
SPECIAL Modules . . . . . . . . . . . . . . . . . . . . . 72
SYSTEM Modules. . . . . . . . . . . . . . . . . . . . . . 75
1
======================================================================
OVERVIEW
MusicBox was designed to be a flexible, open-ended working
environment that is particularly suited to developing original
material. Although the software is capable of recording incoming
MIDI data, it is not intended to be used as a MIDI recorder. MusicBox
is compatible with conventional hardware and software sequencers, and
works well with them. But it is conceptionally different from them
because it is a composition tool rather than a recording and
arranging tool.
While MusicBox is unlike anything currently available on the
MIDI marketplace, it will be instantly recognizable to anyone who has
used a modular synthesizer. The program consists of an abbreviated
menu, a multi-page workspace, and a "toolbox" of some 150 different
computation functions, graphically represented as function "modules",
complete with output and inputs.
Like the big analog synthesizers, programming MusicBox is a
matter of patching the outputs of modules to the inputs of other
modules. Unlike the analogs, there are no patchcords to fuss with,
patches are automatically labeled as they are made, and since the
computer is perfectly willing to make multiple copies of the modules,
there are always enough of them.
MusicBox is process oriented as opposed to the more traditional
score or data orientation. This means that rather than playing back
notes that have been previously entered as a score or a MIDI
recording, MusicBox calculates notes "on the fly". Composing with
MusicBox is an iterative process, of first making a simple "patch"
(grouping of modules), then expanding it, refining it, and
integrating it with other patches.
Although MusicBox is designed as a MIDI output controller, it
can be used for non-MIDI and even non-musical applications. The
chapter on "SPECIAL" modules describes tools that allow use of
MusicBox as a non-specific process control program.
MusicBox is not a particularly efficient approach for composing
with a single instrument. It is intended to be used with a large
number of MIDI instruments playing simultaneously, such as a TX816
rack. In this context, MusicBox becomes both powerful and elegant,
giving the composer the ability to quickly move from control of the
overall sound of the electronic orchestra to an individual parameter
of a single instrument.
Like most musical instruments, MusicBox will allow subtle,
interesting music only in proportion to the investment made in
acquiring skill in its use. It is not an easy instrument to learn.
It is not possible to learn at all without reading the manual. The
most interesting modules are not intuitive, and many of the module
icons are cryptic. To make matters worse, the number values are in
hexadecimal. The good news is that once learned, MusicBox gives the
composer a degree of control and agility in working with complex
musical events that is simply not available with more conventional
approaches.
2
======================================================================
GETTING STARTED
Hardware required:
512K IBM-PC/XT/AT
Color monitor
Microsoft compatible mouse
Roland MPU-401
Computer:
Any PC-compatible will work. If very large compositions are
intended, the extra speed of an AT gives added flexibility. Must
have 512K or more system memory.
Color monitor:
The EGA, or similar high resolution color display is by far the
best choice. While MusicBox will work with a CGA, many of these cards
will produce objectionable "snow" due to the software's multiple fast
screen updates. A color monitor is absolutely necessary because the
module functions are all color coded.
Microsoft compatible mouse:
Any mouse that includes a Microsoft compatible mouse driver and
has two or more pushbuttons should work. The Microsoft compatable
mouse driver must be present for the program to run properly. This
is software that will have been supplied with your mouse. If you
use the Microsoft internal mouse card, set the jumper to location 3.
Roland MPU-401:
MusicBox will work fine with one MPU or compatable, but it also
will support a second MPU, giving a total of 32 MIDI channels. The
2nd MPU must be jumpered properly for the 2nd MPU port. Remove MPU
cover. Cut jumper tracing to port 1, and solder in tracing to port
2. Only use one MPU-PC interface card. Connect the MPU's in
parallel to the one "D" connector at the computer card. Use a ribbon
cable with one "D" connector for the computer at one end and two "D"
connectors for the MPUs at the other end, separated by a few inches.
Software installation:
After running the install program, INSTALL.COM, you should have
a copy of MB.EXE, which is the MusicBox program. This is normally
the only file you need to run MusicBox.
Before attempting to run MusicBox, be sure you have installed
the Microsoft compatible driver for your mouse. If this driver is
not present MusicBox will not run.
To make the task of learning MusicBox a little less formidable,
you should initially run MB from a directory that contains the
tutorial screen file TUTOR.SCR. This is a overlay to the Page 0
toolbox screen, with all but a few of the modules subdued. If
TUTOR.SCR is not in the current directory when MB is first run, the
normal toolbox screen will appear.
3
From a directory that contains the file TUTOR.SCR, run MusicBox
by typing "MB". Once MusicBox has signed on, you will be presented
with a screen of 21 labeled blue boxes, and a square blue mouse
cursor toward the center of the screen. Each box contains one or two
white icons, and several dark grey icons. Ignore the dark grey icons
for now. They are modules that have been inactivated by TUTOR. Thier
icons remain onscreen to help in identifying the positions of the
active modules.
The Tutorial section of this manual contains step by step
directions for four simple patches. Try them out, then continue to
work with the TUTOR overlay, referring all the while to the module
documentation in the latter part of this manual. By the time you
have used each of the 32 modules in TUTOR, you will be ready to
remove TUTOR.SCR from your working directory, and to tackle the full
complement of over 150 MusicBox modules.
4
======================================================================
MENU COMMANDS
MusicBox uses two sets of menus. The working menu that is
available on the left margin of all work pages and the file menu that
is only on page 0.
----------------------------------------------------------------------
Working Menu Commands
0-7 Change display page. With the EGA, all 8 pages are available,
with the CGA, only pages 0-3 can be used. The highlighted
number indicates the current page number, the highlighted
arrow indicates the page that will be switched to when
mouse button #2 is pressed. Except for page 0, the module
source page, all display pges are equal, and modules may be
moved from page to page, even while running, without
restriction.
ESC Escape from pending command. This command will kill any
pending (highlighted) command. It may be used at any time.
DEL Delete a module. Any module may be deleted at any time,
even when other modules are connected to it. To use,
select DEL, then select the module to be deleted. The
module is actually "put to sleep", rather than deleted, so
that other modules that are connected do not get confused
(the last values of the deleted module will remain
constant). The module source icon on page 0 is marked with
"X" to indicate that this module is available to be
"reincarnated". Upon reincarnation, all values are reset to
zero, but connections from other modules, if any, will
remain intact. On page 0, DEL is used to delete files.
Select, then select a file in the Name area. The selected
file is deleted.
SET Write current workspace to the hidden temporary file. Used
with REDO, which restores the workspace to the last SET, and
SWAP, which swaps the workspace to the last SET or SWAP.
HLT Halt modules, much as if an Alpha halt signal was given.
(See SYSTEM chapter for info on the Alpha module.) Select
again to continue.
OFF Issue "All Notes Off" on all MIDI channels. Also puts all
channels in Omni-off/Poly-on mode.
Measure Readout: Display (in decimal) the current measure count.
This is reset by the Hold input of Alpha module, described
in the chapter on System modules.
Elapsed Time: Display (in seconds, in decimal) the elapsed time
since the last Alpha module Hold.
Decimal Readout: When module input values are changed with the
mouse, this readout changes to high intensity color and
becomes a decimal readout of the module input, which is
displayed at the module in hexadecimal.
5
Note Value Readout: When module input values are changed with the
mouse, this readout changes to high intensity color and
becomes a note readout. It assumes C major scale
ascending, with Octave 5 = Middle C, which is MIDI value 3C
hex, 60 decimal.
Mute Flags: The 16 numerals set/clear a 16 bit word that is
accessible through the Mute Flag module, in the SPECIAL
box. When a numeral is highlighted, its corresponding flag
is TRUE. Although these flags can be used as general ON/OFF
logic switches, they are optimized for controlling the MIDI
Note Output module in the MIDI box. Used as such, when the
numerals are highlighted the modules are "on", allowing the
them to pass MIDI data. The colon separating each pair of
numerals can be used to set/clear both at once. Default
operation is as a bank of mute switches, each time one of
the numerals is selected by the mouse, its on/off state is
reversed. Setting the Mute/Solo input of the Alpha module
will change the action to solo switches: each time a
numeral is selected, that flag is turned on, and all others
are turned off.
----------------------------------------------------------------------
File Menu Commands
QUIT Exits MusicBox without saving the workspace. Double click.
EXIT Does an auto SAVE, then exits. Double click.
MPAB Flags to load Module, Program, or Sequencer A or B data.
Although the Save command only makes one file, the file is
composed of the four sections given above. All sections
are always saved, but you can load selectivly by selecting
the flags. Only the sections that correspond to a
highlighted letter will be loaded. Default is all four
flags ON and highlighted, entire workspace is loaded.
SWAP Swap current workspace with temporary file.
REDO Restore the current workspace with the temporary file.
Current workspace is lost, temporary file is unchanged.
Both SWAP and REDO are used in conjunction with the SET
command, which saves the current workspace to the (invisible)
temporary file. Upon startup, MusicBox will do an auto SET,
so the first REDO, prior to a SET or SWAP will clear the
workspace. If SWAP was used, a second SWAP will restore to
the original workspace. Both require double click.
SAVE Save the entire workspace, using the current filename and
the current directory. If a there is a name conflict, the
old file will be renamed to PREVIOUS. The old PREVIOUS,
if it exists, is overwritten. Requires double click.
TEMP This is the current filename. It is changed by selecting
the area with the mouse, then writing the new name with
the console keyboard. Requires double click.
6
Path area changes directory and/or disk drive. Select with the
mouse, then use the console keyboard to type in a letter to
change drive, a backlash and name to change directory, or
a full pathname to change both.
Name area is a directory of the MB files in the selected directory.
Selecting any name with the mouse will load that file
into the workspace. The grey number is the remaining disk
space expressed in MB files. When 0, SAVE is disabled.
7
======================================================================
GENERAL INFORMATION
Mouse Control:
All commands are initiated by positioning the mouse cursor over
the area of interest, and pressing the LEFT mouse button. The RIGHT
mouse button is used only to swap display pages.
Creating Modules:
Select a module to be created by placing the mouse cursor over
the white label on the page 0 source screen. When the left mouse
button is pressed and released the module will appear. Pressing the
button again causes it to disappear, to allow the modules to be
examined without committing to create them. With the module "on",
switch to any page other than page 0, position the module as desired,
and press the left button. The module will be deposited, and is
automatically activated.
Moving Modules:
Place the cursor over the white label of the module to be moved.
Press and release the left button to "pick up" the module. Drag the
module to the new position, either on the current page or on another
page (changing pages while dragging the module is permissible), press
and release left button to deposit.
Color Conventions:
Each module is represented on page 0 by its white label icon and
the current module number. Up to 16 copies of a module may be
created. Modules are actually representations of assembly language
functions which take any number of input parameters, and return only
one output value. Thus, modules have a variable number of inputs,
but only one (or none) outputs. Various parts of the modules are
color coded:
White: Label and handle. Use the label to pick up a module, to
move it to a new position.
Grey: Module calculation priority. Sometimes the order in
which the modules are calculated is important. For
example, the MIDI output module should be the last module
calculated for a given voice, or a double note may be
heard. Priority can be swapped by selecting the gray
priority label (it will highlight to bright white), then
selecting the priority label of any other module.
Cyan: Module output. Selecting the cyan output label will flag
the module's output to be the next selected input.
Selecting the output the a second time (double-clicking)
will highlight all inputs on all work pages that are
presently connected to that output.
Blue: Module input. Input can be of two kinds, direct values
or output from other modules. If an input is selected
while a module output is active (the output label will be
highlighted), the input becomes connected to the flagged
module's output. The input will label itself with the
8
output module's label icon, and turn green to indicate that
input is now from that module. If input is selected when
there is no active module output, the input will highlight
to bright blue, and left/right mouse movement will "dial
in" the input value. Releasing the mouse button removes
the highlight, and "sets" the value.
Yellow: Yellow is used for information labeling, and is not
affected by the mouse.
Red: Also used only for information. Red is used like a panel
light, usually to indicate a non-zero value.
Magenta: User input. Similar to blue inputs, but can only be
changed by direct input from the mouse.
Logic State Conventions:
Throughout MusicBox, numerical values also can be used as logical
values, or as ON/OFF states. The convention used is:
zero = Logical FALSE = switch/flag/state OFF
any non-zero = Logical TRUE = switch/flag/state ON
Although Logical TRUE is anything other than zero, most modules
that return a logic state will return 1 for TRUE.
Output Icon Conventions:
The yellow icon labels to the left of the cyan output values
are either an arrow pointing left, or an equal sign. The left arrow
implies the output is a value, usually in the range of 0 - FF hex.
The equal sign implies the output is a Logical State, TRUE or FALSE.
Modules with the equal sign output icon will also have a red diamond
preceding the white label tag. This will become highlighted if the
value is TRUE, and will be low intensity if the value is FALSE, much
like a LED panel light.
9
Input Icon Conventions:
Many module inputs perform similar functions, which makes it
possible to follow a standard set of conventions for input labeling.
There are exceptions, and there are instances of similar but not
identical input functions. These will be identified in the
individual module documentation. As a general but not absolute rule,
the following conventions apply:
Value (right arrow): General value input. This is usually the
"main" input that will be worked upon in some way by the
module.
Clock (heart): Clock input. The module will not calculate a new
output until the next clock cycle. A clock cycle is
defined as a zero value (OFF) followed by any non-zero
value (ON). Once the ON is detected, the module will wait
for an OFF value followed by another ON before performing
the next output calculation.
Strobe "!": Do it. Same as the Clock input, but is usually more
of a one-time action than a repeated cycle.
Hold (check): Reset/Hold input. If the input is ON, the module
will ignore further Clock inputs. Many modules will also
reset the output either to 0 or to the value at the ARROW
input. The Hold input of the Alpha module is a global
hold, with non-zero causing all other active modules with a
Hold input to act as if they had also received the Hold.
Offset "+": Offset to value. The value at this input will be
added to the output. The addition will wrap around. That
is, if the sum is greater than the FF hex value limit, it
will assume an imaginary limit of 1FF hex, with only the
two least significant digits showing. This means that the
values 80 hex to FF hex can be seen as negative offsets.
FF hex is equivalent to -1, FE hex to -2, and so on.
Number "#": Often used as a "magic number" value.
Count "c": Number of counts per cycle. Usually used to divide
down an internal or external clock.
AND "&": Logical AND. The output will be ANDed with the value
at this input. Some modules will AND another input rather
than the output.
Scale "%": Scale the output with this value. This is a
hexadecimal percentage, with 80% hex equal to 50% decimal.
40% hex is equal to 25% decimal, and C0% hex is equal to
75% decimal.
Write protect (omega): Used in modules that write to memory.
Zero inhibits writing, usually acting as a Hold for the
module. Set to non-zero to enable memory writes.
10
======================================================================
HEXADECIMAL NUMBERS AND BOOLEAN LOGIC
Module numerical values are expressed in hexadecimal. Although
this system appears foreign to the uninitiated, eventually it becomes
far more helpful than if decimal numbers were used. This is because
many module functions employ Boolean logic functions, which are easy
to visualize in hexadecimal, but very difficult to visualize in
decimal for values greater than 8. The modules employ Boolean logic
because it works so well in the context of musical applications.
It is a well known observation that some of the best computer
programmers are musicians. One reason for this may be that the
language of music shares many characters with the language of
computers. The binary number system is central to silicon based
computers. It also happens to be at the heart of music notation.
Quarter notes are double eighth notes, half of whole notes. Octaves
are exact doublings of pitch, and so on. The hexadecimal numbering
system is a power-of-two system, as such it is naturally suited to
work with the computer's binary organization. As such, it is also
naturally suited to work with musical organization.
Hexadecimal ("hex") is the same as decimal but with six more
base digits. The hex digits are: 0 1 2 3 4 5 6 7 8 9 A B C D E F. In
hexadecimal A is the same as decimal 10, B as 11, C as 12, D as 13, E
as 14, and F as 15. Hex 10 is equivalent to decimal 16. The
advantage of hexadecimal in dealing with binary numbers is that the
hex digits 0 to F can be expressed with exactly four binary digits.
As will be seen later, this is what makes Boolean logic easier to
visualize in hex than in decimal.
Decimal Hex Binary
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
Boolean logic is a logical arithmetic that is very useful in
describing logical process of almost any type, from digital circuits
to legal documents. Boolean digits are the logical states TRUE and
FALSE. In MusicBox, as in most computer applications, the binary
digit ("bit") zero represents logical FALSE, and one represents
logical TRUE. Boolean logic can be applied to a number in a bit-wise
fashon, or it can be applied to the number as a whole. When applied
to the whole number, zero is again logical FALSE, and any non-zero
value is logical TRUE.
11
The four principal Boolean operators are OR, AND, XOR NOT.
Boolean NOT is a unary (requires only one argument) function
that simply reverses the truth of the argument.
NOT 0 NOT 1
----- -----
1 0
NOT 1011 binary NOT B hex NOT 11 decimal
--------------- --------- --------------
0100 binary 4 hex 4 decimal
NOT 1011 0101 binary NOT B5 hex NOT 181 decimal
-------------------- ---------- ---------------
0100 1010 binary 4A hex 74 decimal
Note that the binary number 10110101 can be mapped into
hexadecimal as 1011 0101 = B5. The NOT of 1011 0101 is 0100 1010,
which can be directly mapped to 0100 = 4, 1010 = A, therefor 4A. No
such direct mapping works for decimal.
Boolean OR is a binary (requires two arguments) function that
states if either of two values are TRUE, the result is TRUE.
0 1 1 0
OR 0 OR 1 OR 0 OR 1
------ ------ ------ ------
0 1 1 1
1011 B 1011 0101 B5
OR 0101 OR 5 OR 1000 0110 OR 86
-------- ------ -------------- -------
1111 F 1011 0111 B7
Boolean AND is a binary function that states if either of two
values are FALSE, the result is FALSE.
0 1 1 0
AND 0 AND 1 AND 0 AND 1
------ ------ ------ ------
0 1 0 0
1011 B 1011 0101 B5
AND 0101 AND 5 AND 1000 0110 AND 86
-------- ------ -------------- -------
0001 1 1000 0100 84
Note that the AND function can be used as logical masking tape.
The 0's in the bottom digit are the tape, forcing the result to 0,
regardless of the truth of the top digit; while the 1's in the bottom
digit acts as the unmasked area, passing through the top digit
unchanged. Because of this, one of the arguments in the AND function
(it does not matter which one) is often referred to as a mask, and
the AND function itself is sometimes called a masking function.
12
Boolean XOR (exclusive OR) is a binary function that states if
the truth of the two arguments are identical, the result is FALSE; if
the arguments are different, the result is TRUE.
0 1 1 0
XOR 0 XOR 1 XOR 0 XOR 1
------ ------ ------ ------
0 0 1 1
1011 B 1011 0101 B5
XOR 0101 XOR 5 XOR 1000 0110 XOR 86
-------- ------ -------------- -------
1110 E 0011 0011 33
Note that any argument XOR'd with itself is 0, any argument
XOR'd with 0 passes through unchanged, and any argument XOR'd with 1
passes through inverted.
1011 1011 1011
XOR 1011 XOR 0000 XOR 1111
-------- -------- --------
0000 1011 0100
13
======================================================================
TUTORIAL
----------------------------------------------------------------------
This first attempt isn't much. It just runs a random tone
through the PC speaker.
1. Place the mouse cursor over the note icon in the first row
and the first column (position 1,1) of the CLOCK box, which is the
middle box on the left of the screen. Depress and release the LEFT
mouse button. This will "pick up" the Note Clock module. A copy of
the module will replace the blue square as the mouse cursor.
2. Press the RIGHT mouse button to go to a work page. The
screen will appear blank except for the menu along the left side of
the screen.
3. Move the Note Clock module with the mouse to a blank spot
somewhere toward the left of the screen. Press the LEFT mouse button
to deposit and activate the module.
4. Press the RIGHT mouse button to return to Page 0. Move the
cursor to the box labeled RANDOM, toward the center of the screen.
Pick up the Random Number Generator module, position 1,1 of RANDOM,
and deposit it on the workpage as before.
5. Dial in an offset to the Random module of 30 hex, 48
decimal. To do this, place the square mouse cursor over the blue
number next to the yellow "+" input label at the bottom of the Random
module. Press the LEFT mouse cursor and release. The cursor will
disappear, and the blue numbers will be highlighted.
6. Now moving the mouse left or right will change the number.
While you are setting the value, look at the menu area on the left
of the screen. A highlighted blue set of numbers, representing the
decimal value you are dialing in will appear about halfway down the
menu column, and a Note/Octave readout will appear just below that.
7. Move the mouse to the right until the number at the module
reads 30. The decimal readout on the left of the screen will read 48.
Press the LEFT mouse button. The input number will freeze at the last
value, and will return to its normal dark blue, and the square blue
mouse cursor will reappear.
8. Dial in a limit to the Random module of 20 hex. The limit
input is the up arrow just above the offset input.
9. Connect the Note Clock module output to the Random module's
clock input. To do this, first place the cursor over the cyan
(turquoise) output value near the top of the Note Clock. Press and
release the LEFT mouse button. The numbers will hilight, indicating
that the output of the Note Clock module is ready to be patched into
the input of another module.
10. Move the cursor to the Random module. Place the
cursor over the blue number next to the yellow heart. Press and
release the LEFT mouse button. The input will turn green and take on
the label of the Note Clock module (a note icon and the number 0),
and at the same time the highlighted output of the Note Clock module
will return to normal. The output of the Note Clock module is now
14
patched into the clock input of the Random module. The Random module
will now be producing a new output between 30 hex (the offset) and 50
hex (offset+limit) at every tick of the Clock module.
11. Pick up the PC Speaker Output module, located in the SYSTEM
box, row 2, column 3 (SYSTEM 2,3). Deposit it somewhere near the
Random module.
12. Connect the Note Clock output to the PC Speaker clock
input, as before. You should hear a steady beat of quarter notes at
a tempo of about 120.
13. Connect the Random output to the PC Speaker value (arrow)
input. Now you should hear random tones.
14. Try altering the note value input and the sustain input of
the Clock module, which are labeled with a note and an "s",
respectively. Also try changing the limit and offset inputs to the
Random module. You can turn the thing off by dialing a number into
the hold (check) input of the Note Clock, or by the menu HLT command.
15
----------------------------------------------------------------------
This next patch assumes a MIDI synthesizer connected to your
computer and MPU. It further assumes the synthesizer is set to
receive on MIDI channel 1. The patch will play an arpeggiated C
Major chord, still random but slightly more controlled.
1. If the other patch is still on, get rid of it by selecting
REDO (twice) from the Files Menu on page 0.
2. Fetch a Note Clock module (CLOCK 1,1), and Random module
(RANDOM 1,1), as before. Also as before, connect the Note Clock
output to the Random clock (heart) input.
3. Set the limit (up-arrow) input to the Random module to 4.
It should now be generating random numbers between 0 and 3.
4. Fetch a Switch/Sequencer module (SWITCH 1,3). Into the
inputs labeled "1", "2", and "3", dial the values 4, 7, and C hex.
This gives the intervals in semitones of 0, 4, 7, and 12: a major
triad.
5. Connect the Random output to the address "@" input of the
Switch/Sequencer module. This effectively translates the random
numbers 0-3 to the interval numbers 0, 4, 7, and C hex.
6. Fetch a MIDI Note Output module (MIDI 1,1). Activate it by
setting the mute input (second blue input from top, looks something
like "/o/") to 1. Dial 30 hex (octave C4, 1 8ve below middle C) into
one of the transpose "t" inputs.
7. Connect the Switch/Sequencer output to the first note value
"A" input of the MIDI module, then connect the Note Clock output to
the first note velocity "a" input. At this point you should be
getting a sound, but it will probably be very faint. Even if there
is no sound yet, go on to the next step.
8. Set the sustain "s" input of the Note Clock module to 80
hex. This gives a half on, half off cycle. Set the velocity value
"v" input to the Note Clock module to about 40 hex. The sound should
be ok now. If not try a few different patches on your synth.
9. If you are not getting sound from your synth at this point,
first check that you have made the MusicBox connections according to
the steps given here. If you are sure they are correct, check that
your synth is functioning properly, and that it is properly connected
to the computer through the MPU. If all else fails, try running the
install program again. You might have forgotten to install it with
MIDI output enabled.
10. Assuming you have sound, now make it a little more
interesting. First, speed up the clock from quarter notes to eighth
notes by changing the note value (note label) input of the Note Clock
from 3 to 4.
16
11. Fetch the Dither Switch module (RANDOM 2,2). Connect the
Note Clock module output to the clock (heart) input. Set the dither
value "%" input to 40 hex, which is equivalent to 25%. Set the value
input to 18 hex, 24 decimal. Now connect the Switch/Sequencer module
output to the offset "+" input. You can't hear it yet, but the
Dither module is bumping the arpeggiated triad up two octaves 25% of
the time.
12. Connect the output of the Dither module into the "A" input
of the MIDI Note module. This replaces the patch that was from the
Switch/Sequencer. It probably will sound awful.
13. What is happening, is the module calculation priority is
out of order. The MIDI Note Output module is seeing the Dither
module output a full cycle AFTER it has already seen the Note Clock
output. This causes it to play the note at the old pitch for the out
of sync cycle, which gives a 64th note glitch.
14. Fix it by swapping priority with the Dither module. Select
the priority number (the grey number between the white label icon and
the cyan output number) of the Dither module -- it will highlight to
bright white, then select the priority of the MIDI module. The
priority numbers will swap, and the glitch will go away. In general,
you will want to have the MIDI Note Output module as the last in the
calculation chain for a particular voice.
16. Set up to mute the module from the menu. Fetch the Mute
Flag module (SPECIAL 3,3). Connect it to the mute input ("/o/") of
the MIDI Note Output module. The sound will stop. Set the mute mask
"&" input of the MIDI Note module to 1, and set the mask input of the
Mute module to FF hex. Now selecting the yellow mute switch "0" in
the lower left of the menu will turn the voice on and off.
17. Save the patch by selecting SAVE from the page 0 File Menu.
The file will be named TEMP, which is the default filename, and it
will immediately show up in the file area below the File Menu.
18. If you saved the patch with the sound on, you can bring it
up and running from DOS by running MB with the filename. From the
DOS command line, typing "MB TEMP". MusicBox will come on, then
load the file and play it.
17
----------------------------------------------------------------------
This next patch assumes you have two MIDI synthesizers, or one
synthesizer with two voices. One voice is set to MIDI channel 1, the
other to MIDI channel 2. It will be a variation of the previous
patch with the 2nd voice a delayed version of the first. If you have
a stereo setup, send one voice to the left speaker and one to the right.
1. Load the previous patch by selecting (twice) the name
("TEMP", unless you changed it) from the File Load area below the
Page 0 File Menu.
2. Fetch the Echo module (SAMPLE 1,1). Connect the Note Clock
module output to the clock input. Connect the Dither module output
to the value (arrow) input. The output should be the same as the
Dither module output.
3. Fetch another MIDI Note Output module (MIDI 1,1). Set the
MIDI channel "c" input to 1 (if you have an instrument receiving on
channel 2). Note that MIDI channels are numbered from 1 to 16,
whereas the funny numbers we use here are from 0 to F.
4. Set one of the transpose "t" inputs to 30 hex. Set the mute
mask "&" input to 2. Connect the Mute module output to the mute
"/o/" input. Connect the Echo module output to the 1st note value
"A" input. Connect the Note Clock output to the 1st note velocity
"a" input.
5. Set the Menu Mute switches 0 and 1 to ON (highlighted).
There should be essentially the same sound coming from both voices.
You can switch back and forth between the voices by turning one Menu
Mute off, then selecting the colon between the two numbers. One will
go on while the other goes off. When you get tired of this, set both
voices ON.
6. Set the delay ">>" input of the Echo module to 5. You
should now be hearing an echoed pattern, most noticeable on the
dithered octave kicks.
7. Fetch two MIDI Control Output modules (MIDI 2,1). Set the
MIDI channel "c" input of the 2nd module to 1. Set the hold (check)
input of both modules to 0. You probably will hear a change in
sound, as the module sends its default parameters out.
8. Select two Step Pushbutton modules (ONESHOT 3,3). Connect
the output of each into the corresponding program change "Pt" input
of the MIDI Control modules. Change patches on your synth by
stepping the switches up and down.
9. Swap priority with the MIDI Note Output modules and the
Step Pushbutton modules, to keep the MIDI output at the end of the
calculation chain.
10. Save the patch. First select the WHITE filename (should be
"TEMP", unless you saved the previous patch under another name) in
the File Menu area. The area will go blank. Type in the name of
your choice, and press the Enter key. With the mouse, select SAVE
(twice). The file now should appear in yellow in the Load area.
18
---------------------------------------------------------------------
And now for something completely different. This is a simple
little polyrhythm patch, right out of Schillinger. Again, it assumes
you have two MIDI synthesizers, or one synthesizer with two voices,
with one set to MIDI channel 1, the other to MIDI channel 2.
1. If the workspace is not already clear, clear it with REDO.
Fetch the Mu Clock module (CLOCK 3,1). Set the count "c" input to 6.
2. Fetch two Beat Pattern Generator modules (TRIGGER 2,1).
Connect the Mu Clock output to the clock inputs. Set the cycle "c"
inputs of the first to 3, 5, 8, and C hex. Set the second to 4, 6,
7, and C hex.
3. Fetch the Mute Flag module (SPECIAL 3,3) and then fetch two
MIDI Note Output modules (MIDI 1,1). Set the channel "c" input of
the 2nd Note module to 1.
4. Connect the Mute Flag module to the mute input ("/o/") of
the MIDI Note Output module. Set the mute mask "&" input of the MIDI
Note modules to 1 and 2, respectively and set the mask input of the
Mute module to FF hex.
5. Set the 1st note value "A" inputs of both MIDI modules to
about 18 hex. Set the velocity offsets "v" to about 60 hex. Connect
the Beat Pattern modules to the note velocity "a" inputs of the
respective MIDI modules.
6. Turn on the sound with the menu mute flags, 0 & 1.
7. Play with it.
19
======================================================================
SWITCH MODULES
----------------------------------------------------------------------
16-input Switch/Sequencer SWITCH 1,1 w
Purpose: Can act as an static value sequencer or an input switch,
or both in combination.
General: One of 16 inputs, selected by the Address input, is
sent to the output. If inputs are set to values, this will
act as a sequencer, if inputs are connected to other module
outputs, it will act as a switch. The currently selected
input is indicated by a highlighted red label reminiscent of
the old modular sequencer stage lights.
Output: Unchanged copy of the selected input.
Address "@" input: Selects one of the 16 inputs that is to be
copied to the output. Numbers greater than 15 are rolled over,
so that 16 selects the first input, 17 selects the second, 33
also selects the second, etc.
Stage "0-F" inputs: Value inputs, may be connected to any source.
----------------------------------------------------------------------
8-input Switch/Sequencer SWITCH 1,2 x
4-input Switch/Sequencer SWITCH 1,3 y
2-input Switch/Sequencer SWITCH 1,4 z
General: Identical to 16-input version, but has fewer inputs.
----------------------------------------------------------------------
2-input Switch SWITCH 2,1 \D6
2-input Switch with Offset SWITCH 2,2 \B7
Purpose: Switch between two inputs.
Output: An unmodified copy of the selected input.
Switch "1/2" input: Non-zero switches output source from input "1"
to input "2".
Inputs "1" and "2": Any value.
Input "+": Offset value to be added to output.
----------------------------------------------------------------------
Toggle Switch SWITCH 2,3 \C2
Output: An unmodified copy of the Value input, or 0. The red
diamond in the label will highlight if the output of the module is
non-zero.
Switch "<->" input: Non-zero will cause the Value input to pass
through to the output; zero will set the output to zero,
regardless of the Value input.
Value "-->" input: Any value.
20
---------------------------------------------------------------------
Toggle Switch with AND Gate SWITCH 2,4 \D1
Output: An unmodified copy of the Value input, or 0. The red
diamond in the label will highlight if the output of the module is
non-zero.
AND "&" inputs: A Boolean AND function is performed with these two
inputs. A result of non-zero will cause the Value input to pass
through to the output; a zero result will set the output to zero,
regardless of the Value input.
Value "-->" input: Any value.
----------------------------------------------------------------------
2-input Switch with AND Gate SWITCH 3,1 u
2-input Switch with AND Gate and Offset SWITCH 3,2 v
Output: An unmodified copy of the selected input.
AND "&" inputs: A Boolean AND function is performed with these two
inputs. A result of non-zero switches output source from input
"a" to input "b".
Switch inputs "a" and "b": Any value.
Input "+" (2nd module only): Offset value to be added to output.
----------------------------------------------------------------------
Latest Change SWITCH 3,3 \0C
General: Allow the latest changed input to pass through to the
output.
Output: An unmodified copy of the last input that has changed.
Inputs "a" - "h": Any value. These inputs are identical, except
that the computer tests for a change starting with the first "a"
input, and as soon as a changed input is detected, that value is
sent to the output, and no further processing is done during that
calculation cycle. Thus, if all eight inputs changed at the same
time, each output would be sent out over the next eight
calculation cycles, starting with "a" and ending with "h".
21
======================================================================
INDEX MODULES
Index modules count. They differ in the sophistication in
controlling how the counting is to be done. While obvious uses of
these modules is to address sequencers and switches, they are also
useful for other things, such as timing or pattern generation.
----------------------------------------------------------------------
I-index INDEX 1,1 I
Purpose: Simple increment/decrement by 1 counter.
Output: Count of 0-FF hex.
Clock (heart) input: Any non-zero after zero causes the current
output value to be incremented (or decremented, if the Up/Down
input is non-zero).
Hold (check) input: Non-zero sets output to zero, count starts when
returned to zero.
Up/Down "+/-" input: Increment if zero, decrement if non-zero.
----------------------------------------------------------------------
J-index INDEX 1,2 J
Purpose: Increment by N counter.
Output: Count of 0-FF hex.
Clock (heart) input: Any non-zero after zero causes the Offset input
to be added to the current output value (or subtracted from it, if
the Up/Down input is non-zero).
Hold (check) input: Non-zero sets output to zero, count starts when
returned to zero.
Offset "+" input: Added to the current output each clock cycle.
Thus, if it is 1, the module will increment by 1; if FF hex, it
will decrement by 1, if 2 it will increment by 2, if FE hex it
will decrement by 2, etc.
----------------------------------------------------------------------
K-index INDEX 2,1 K
Purpose: Increment by N counter with upper limit. Advantage over J-
index is that an upper limit can be set (I-index and J-index
rollover at FF hex with no option to set an upper limit).
Output: Count of 0 to upper limit (or upper limit to 0).
Clock (heart) input: Any non-zero after zero causes the Offset input
to be added to the current output value (or subtracted from it, if
the Up/Down input is non-zero).
Hold (check) input: Non-zero sets output to zero, count starts when
returned to zero.
22
Offset "+" input: Added/subtracted to the current output each clock
cycle.
Up/Down "+/-" input: Add Offset if zero, subtract if non-zero.
Count "#" input: Sets upper limit. This number is inclusive (if set
to 8, the count will reach 8 and not stop at 7).
----------------------------------------------------------------------
L-index INDEX 2,2 L
Purpose: Increment by N counter with both an upper and a lower limit.
Output: Count of lower limit to upper limit (or upper to lower).
Clock (heart) input: Any non-zero after zero causes the Offset input
to be added to the current output value (or subtracted from it, if
the Up/Down input is non-zero).
Hold (check) input: Non-zero sets output to zero, count starts when
returned to zero.
Offset "+" input: Added/subtracted to the current output each clock
cycle.
Up/Down "+/-" input: Add Offset if zero, subtract if non-zero.
MAX (up arrow) input: Sets upper limit. This number is inclusive
(if set to 8, the count will reach 8 and not stop at 7).
MIN (down arrow) input: Sets lower limit. Inclusive.
----------------------------------------------------------------------
M-index INDEX 3,1 M
Purpose: Increment by N counter, useful as a pattern (melody)
generator, with both an upper and a lower limit, with automatic
reset to 3/4 of the difference between the upper and lower limits
when counting up and to 1/4 the difference when counting down.
General: This modules looks like the I-index, but it is different in
three important ways. The first is given above; the second is
that the upper limit is actually one more than that what is set.
This has consequences when the upper limit is set to FF hex. The
third difference is that changing the Up/Down input will cause a
change in value at the next clock instead of repeating the current
count value at the next clock.
Output: Count of lower limit to upper limit-1 (or upper-1 to lower).
Clock (heart) input: Any non-zero after zero causes the Offset input
to be added to the current output value (or subtracted from it, if
the Up/Down input is non-zero).
Hold (check) input: Non-zero sets output to zero, count starts when
returned to zero.
Offset "+" input: Added/subtracted to the current output each clock
cycle.
23
Up/Down "+/-" input: Add Offset if zero, subtract if non-zero.
MAX (up arrow) input: Sets upper limit. This number is inclusive
plus one (if set to 8, the count will stop at 9).
MIN (down arrow) input: Sets lower limit. Inclusive.
----------------------------------------------------------------------
N-index INDEX 3,2 N
Purpose: Increment/decrement by 1 counter with an expanded range of
16 bits, (0 - 65535 decimal, 0 - FFFF hex), rather than the usual 8
bit range of 0 - FF hex.
Output: Count value shifted right by shift input.
Clock (heart) input: Any non-zero after zero causes the current
output value to be incremented.
Hold (check) input: Non-zero sets output to zero, count starts when
returned to zero.
Address "@" input: Upon receiving a Reset strobe, the module will
reset the low 8 bits of the output to this value.
Page (paragraph-symbol) input: Upon receiving a Reset strobe, the
module will reset the high 8 bits of the output to this value.
Some sequencers can address up to 65K. These use the Address value
as a starting low order address, and the Page value as a starting
high order address. It can also be thought of as 256 runs (Page)
of 256 bytes each (Address).
Reset strobe "!" input: Resets the output to the values in the
Address and Page inputs. This input is active even when the Hold
input is non-zero.
Shift ">>" input: Number of shifts to perform at the output. Each
left shift is the same as a division by 2. A shift value of 8
will return the Page count.
----------------------------------------------------------------------
O-index INDEX 3,3 O
Purpose: Simple increment counter with mask output.
Output: Count of 0-FF hex, logically ANDed with Mask input.
Clock (heart) input: Any non-zero after zero causes the current
output value to be incremented.
Hold (check) input: Non-zero sets output to zero, count starts when
returned to zero.
Mask "&" input: Logically ANDed with index count, prior to output.
24
======================================================================
MATH MODULES
----------------------------------------------------------------------
Add MATH 1,1 +
Output: Sum of the 3 "+" inputs.
Add "+" inputs: Any value. Note that overflow will wrap around,
just as Offset inputs on other modules.
----------------------------------------------------------------------
Add/Subtract MATH 1,2 \F1
Add/Subtract MATH 1,3 -
Note: These two modules are identical in function.
Output: Sum of the 2 "+" inputs minus the "-" input.
Add "+" inputs: Any value.
Subtract "-" input: Any value.
----------------------------------------------------------------------
Multiply/Divide MATH 2,1 *
Output: Product of first two inputs, optionally divide by the third
input.
Multiply "*" inputs: The 16 bit product of the two Multiply inputs
is internally stored to allow accurate division by the third
input. Only the least significant 8 bits (0-FF hex) are displayed.
Divide (divide-symbol) input: Integer division of the product of the
first two inputs. Fractions are truncated. If the input is zero,
no action is taken.
----------------------------------------------------------------------
Scale MATH 2,2 %
Output: Scaled input plus offset.
Value "-->" input: Value to be scaled.
Scale "%" input: The hexadecimal percentage of the value input that
will be sent to the output, with 80% hex equal to 50% decimal.
40% hex is equal to 25% decimal, and C0% hex is equal to 75%
decimal. Thus, 80 hex returns 1/2 of Value input, 40 hex returns
1/4, C0 hex returns 3/4, etc.
Offset "+" input: Added to results of scaled value.
----------------------------------------------------------------------
Modulus MATH 2,3 /
Output: Remainder of Value input divided by Slash input.
Value "-->" input: Dividend. Any value.
Slash "/" input: Divisor. No action taken if zero.
25
----------------------------------------------------------------------
Left Shift MATH 3,1 \AE
Purpose:
Output: Value input shifted, then ANDed.
Value "-->" input: Value to be shifted.
Shift "<<" input: Number of shifts to perform. Each left shift is
the same as a multiplication by 2. Since all displayed values are
8 bit integers, values greater than 8 are meaningless, and are
internally normalized to 0-7.
Mask "&" input: Shift results are logically ANDed with this value
before being sent to the output.
----------------------------------------------------------------------
Right Shift MATH 3,2 \AF
Output: Value input shifted, then ANDed.
Value "-->" input: Value to be shifted.
Shift ">>" input: Number of shifts to perform. Each left shift is
the same as a division by 2. Since all displayed values are 8 bit
integers, values greater than 8 are meaningless, and are
internally normalized to 0-7.
Mask "&" input: Shift results are logically ANDed with this value
before being sent to the output.
----------------------------------------------------------------------
Power of Two MATH 3,3 ^
Output: Input to the power of two.
Value "-->" input: Exponent of 2^n operation. Since all displayed
values are 8 bit integers, values greater than 8 are meaningless,
and are internally normalized to 0-7.
26
======================================================================
LOGIC MODULES
----------------------------------------------------------------------
AND/XOR LOGIC 1,1 &
Output: Logical AND of the first two inputs XORd with the third.
Boolean AND "&" inputs: Any value. Since a value ANDed with FF hex
is itself, setting one of these to FF hex effectively disables the
AND function, leaving the module as an XOR function only.
XOR "x" input: Any value. Since a value XORd with 0 is itself,
leaving this input at 0 effectively disables the XOR function,
leaving the module as an AND function only.
----------------------------------------------------------------------
AND/Offset LOGIC 1,2 \91
Output: Logical AND of the first two inputs, added to the third.
Boolean AND "&" inputs: Any value. The two inputs are logically
ANDed.
Offset "+" input: Added to the current output.
----------------------------------------------------------------------
OR LOGIC 1,3 |
Output: Logical OR of the three Value inputs.
Value "-->" input: Any value
----------------------------------------------------------------------
Mask and Left Shift LOGIC 2,1 \A9
Output: Binary left shift of results of the two AND inputs, useful
to isolate a bit (mask), then to shift it into place.
Boolean AND "&" inputs: A logical AND operation is performed on
these two inputs, with the results going to the shift function.
Shift "<<" input: Number of shifts to perform. Each left shift is
the same as a multiplication by 2. Since all displayed values are
8 bit integers, values greater than 8 are meaningless, and are
internally normalized to 0-7.
27
---------------------------------------------------------------------
Mask and Right Shift LOGIC 2,2 \AA
Output: Binary right shift of results of the two AND inputs, useful
to isolate a bit, then to shift it into place.
Boolean AND "&" inputs: A logical AND operation is performed on
these two inputs, with the results going to the shift function.
Shift ">>" input: Number of shifts to perform. Each left shift is
the same as a division by 2. Since all displayed values are 8 bit
integers, values greater than 8 are meaningless, and are
internally normalized to 0-7.
----------------------------------------------------------------------
Identity LOGIC 2,3 #
Purpose: Convenience module to display or echo an input.
Output: Unmodified copy of input.
Value "-->" input: Any value
----------------------------------------------------------------------
NOT AND LOGIC 3,1 \ED
Output: Logical NOT (one's complement) of the first input followed
by a logical AND with the second input.
NOT (circle with slash) input: Value to be logically inverted.
AND input: Mask value.
----------------------------------------------------------------------
Negate LOGIC 3,2 \A5
Output: 2's complement (minus) of input.
Value "-->" input: Any value
----------------------------------------------------------------------
Identity with Decimal Readout LOGIC 3,3 \01
Purpose: Convenience module to display or echo an input.
Output: Unmodified copy of input.
Display output: Decimal representation of the input.
Value "-->" input: Any value
28
======================================================================
SEQUENCE MODULES
Sequencers read or write values to/from specific memory locations, by
either random or sequential access. The modules are entirely
general. They can control note values, dynamics, timing, anything at
all. They can be run as individual sequencers, or ganged together to
make multiple output sequencers.
Usually, sequencers will be driven by one of the index modules, which
in turn is driven by a clock module. As is true of all modules, each
sequencer has just one output. Multiple output sequencers can easily
be built by driving several modules with the same index module. The
output of the module is always an unmodified copy of the memory cell
at the given address (or address+offset), and can be any value from 0
to FF hex. All memory cells are initialized to 0, so stepping
through a sequencer that has not been programmed will result in a
steady output of 0.
There are 8 sequencer modules, 4 that can address a 64K memory area,
("A" of MPAB in the page 0 menu) and 4 which address a 4K area ("B"
of MPAB) as one of 16 blocks of 256 bytes. The two memory areas, "A"
and "B" are automatically saved whenever a "SAVE" command is given.
Individual sequences can be loaded by setting and clearing
appropriate "MPAB" flags. See the "MENU" chapter for details.
Sequencer memory area "A" is also used for system exclusive loads and
dumps; area "B" at block 15 (F hex) is used as a buffer for incoming
MIDI data. Both memory areas may also used to display ASCII
characters. See the "MIDI", "SYSTEM", and "DISPLAY" chapters for
details these special usages.
----------------------------------------------------------------------
64K Read/Write Sequencer SEQUENCE 1,1 P
Purpose: Read from or write to memory locations within the "A"
memory block.
Output: Contents of addressed memory cell.
Address "@" input: Current read/write address. Since input values
are limited to 0-FF hex (0-255 decimal), this input can address
256 memory locations.
Page (paragraph symbol) input: Current high address. Since this
sequencer can address up to 65K, it uses Address input as a
low order address, and the Page input as a high order address.
Can also be thought of as 256 runs (Page) of 256 bytes each
(Address).
Write enable (omega) input: A non-zero value allows writing into
(programming) the sequencer. When ON, the Value input is written
into the memory cell addressed by Address and Page, when OFF
(zero), the memory cell can be read. Be careful with this input,
inadvertently setting it ON will clobber existing data.
Value "-->" input: Only meaningful while programming the module,
this is the value that will be written to the currently addressed
memory cell when the write enable input is non-zero.
29
Write mask "&" input: Only meaningful while programming the module.
Allows individual bits in a given memory cell to be written
without affecting the other bits. Only bits set ON at this input
are written to the addressed memory cell, with the value of the
bits taken from the Value input. This input can be effectively
disabled by setting it to FF hex (the default), all bits ON. When
set to zero, the input acts as a second write protect.
----------------------------------------------------------------------
256-step Read/Write Sequencer SEQUENCE 1,2 p
Purpose: Read from or write to memory locations within the "B"
memory block.
Magenta User Input (just left of label tag): Current 256-step run.
There are 16 sequencer runs available. This input is used to
manually set the desired run, 0-F hex.
Note that run 15 (F hex) is used by the MIDI Data Input module as
an input buffer. See chapter "SYSTEM" for details.
Output: Contents of addressed memory cell.
Address "@" input: Current read/write address. Since input values
are limited to 0-FF hex (0-255 decimal), this input can address
256 memory locations.
Write enable (omega) input: A non-zero value allows writing into
(programming) the sequencer. When ON, the Value input is written
into the memory cell addressed by Address and Page, when OFF
(zero), the memory cell can be read. Be careful with this input,
inadvertently setting it ON will clobber existing data.
Value "-->" input: Only meaningful while programming the module,
this is the value that will be written to the currently addressed
memory cell when the write enable input is non-zero.
Write mask "&" input: Only meaningful while programming the module.
Allows individual bits in a given memory cell to be written
without affecting the other bits. Only bits set ON at this input
are written to the addressed memory cell, with the value of the
bits taken from the Value input. This input can be effectively
disabled by setting it to FF hex (the default), all bits ON. When
set to zero, the input acts as a second write protect.
30
---------------------------------------------------------------------
64K Read-only Sequencer SEQUENCE 2,1 Q
64K Read-only Sequencer SEQUENCE 2,2 R
64K Read-only Sequencer SEQUENCE 2,3 S
Purpose: Read from memory locations within the "A" memory block.
Output: Contents of addressed memory cell.
Address "@" input: Current read/write address. Since input values
are limited to 0-FF hex (0-255 decimal), this input can address
256 memory locations.
Page (paragraph symbol) input: Current high address. Since this
sequencer can address up to 65K, it uses Address input as a
low order address, and the Page input as a high order address.
Can also be thought of as 256 runs (Page) of 256 bytes each
(Address).
Read Address Offset (up-down arrow) input: Number of steps away from
current address to read output data from. No effect when set to 0.
----------------------------------------------------------------------
256-step Read-only Sequencer SEQUENCE 3,1 q
256-step Read-only Sequencer SEQUENCE 3,2 r
256-step Read-only Sequencer SEQUENCE 3,3 s
Purpose: Read from or write to memory locations within the "B"
memory block.
Magenta User Input (just left of label tag): Current 256-step run.
There are 16 sequencer runs available. This input is used to
manually set the desired run, 0-F hex.
Output: Contents of addressed memory cell.
Address "@" input: Current read/write address. Since input values
are limited to 0-FF hex (0-255 decimal), this input can address
256 memory locations.
Read Address Offset (up-down arrow) input: Number of steps away from
current address to read output data from. No effect when set to 0.
31
======================================================================
MIX MODULES
----------------------------------------------------------------------
Adder Switch (high nybble control) MIX 1,1 a
Adder Switch (high nybble control) MIX 2,1 c
Purpose: Switch and/or add offsets. Optimized to be used with the
Program module output.
Output: Sum of all highlighted "+" inputs.
Value "+" inputs: When highlighted, the value at these inputs are
added and sent to the output.
Switch input: Selects which of the four "+" inputs will be active.
The most significant 4 bits (high nybble: 10, 20, 30, 40 hex) at
this input control which value inputs will be summed and sent to
the output. For example, 10 hex turns the first input on (the "+"
will highlight, and the value will be sent to the output), 20 hex
turns the 2nd input on, and 30 hex turns on both the 1st and the
2nd inputs, causing the sum of the two to be sent to the output.
----------------------------------------------------------------------
Adder Switch (low nybble control) MIX 1,2 b
Adder Switch (low nybble control) MIX 2,2 d
Purpose: Switch and/or add offsets. Optimized to be used with the
Program module output.
Output: Sum of all highlighted "+" inputs.
Value "+" inputs: When highlighted, the value at these inputs are
added and sent to the output.
Switch input: Selects which of the four "+" inputs will be active.
The least significant 4 bits (low nybble: 1, 2, 3, 4) at this input
control which value inputs will be summed and sent to the output.
For example, 1 turns the first input on (the "+" will highlight,
and the value will be sent to the output), 2 turns the 2nd input
on, and 3 turns on both the 1st and the 2nd inputs, causing the sum
of the two to be sent to the output.
----------------------------------------------------------------------
Adder Switch (shift nybble control) MIX 3,1 e
Adder Switch (shift nybble control) MIX 3,2 f
Purpose: Switch and/or add offsets.
Output: Sum of all highlighted "+" inputs.
Value "+" inputs: When highlighted, the value at these inputs are
added and sent to the output.
Switch input: Selects which of the four "+" inputs will be active.
Shift ">>" input: Shift switch input right. Setting this to 4 shifts
the high 4 bits of the switch input to the low position. Used to
allow a single 8 bit value to control two Adder Switches.
32
---------------------------------------------------------------------
Adder Switch (8-input) MIX 3,3 \F0
Purpose: Switch and/or add offsets.
Output: Sum of all highlighted "+" inputs.
Value "+" inputs: When highlighted, the value at these inputs are
added and sent to the output.
Switch input: Selects which of the eight "+' inputs will be active.
----------------------------------------------------------------------
Sum MIX 1,3 \E4
Output: Sum of the 5 Value inputs, scaled and offset by the
respective inputs.
Value "-->" inputs: Any value. These inputs are added as 16 bit
integers to avoid overflow.
Scale "%" input: Scale the 16 bit sum of the Value inputs with this
value. This is a hexadecimal percentage, with 80% (hex) equal to
50% (decimal). 40% (hex) is equal to 25% (decimal), and C0% (hex)
is equal to 75% (decimal).
Offset "+" input: Added to the current output.
----------------------------------------------------------------------
Mixer MIX 2,3 \EE
Output: Sum of the 3 Value inputs, each scaled by their respective
Scale input, and finally summed with the Offset input.
Value "-->" inputs: Any value. The difference between the Mixer
module and the Sum module, described above, is that the Mixer
scales each input prior to adding it to the total, while the Sum
module adds all five inputs, then scales the final result.
Scale "%" inputs: Scale the individual Value inputs with this value
prior to adding them to the other scaled Value inputs.
Offset "+" input: Added to the current output.
33
======================================================================
PROGRAM MODULES
This group of modules consists of one Program Sequencer module plus
11 Stage Output modules.
The Program Sequencer is the main sequencer for most musical
applications. It is a 256 step sequencer, with stages for 12
simultaneous values. Four of the stages can be faded from one value
to the next, allowing smooth transitions between steps.
Although set up as separate modules to get around the "one output per
module" rule, the 11 Stage Output modules are really a continuation
of the Program Sequencer. The modules have only an output, no input.
The output value corresponds to the Program Sequencer stage with the
same letter name.
----------------------------------------------------------------------
Program Sequencer PROGRAM 1,1 \EA
General: The Program Sequencer works in close concert with the Alpha
module. In particular, it is switched between programming mode and
playing mode by the write protect (omega icon) input of the Alpha.
When Alpha write-protect is non-zero, the Program module is in
playing mode, otherwise it is in programming mode. Also, the
address "@" input of the Alpha module is the global address value
for all active Program Sequencer modules. Information on the
Alpha module is in the "SYSTEM" chapter.
Note that all inputs are magenta "user inputs" not the normal blue
inputs. This "user input only" setup is the result of the
module's action as a programming module, rather than as a
processing module.
Buffers: The module uses 4 different 12 byte data buffers.
1. the output buffer, always displayed.
2. the sequencer.
3. the Undo buffer.
4. the Save buffer.
While playing, each time the sequencer steps, the stored values in
all the stages are transferred to the output buffer. The Undo
buffer and the Save buffer are ignored.
While programming, the output buffer contents can be copied into
the Save buffer with the SAVE command, and the Save buffer
contents can be transferred to the output buffer with RECALL.
The Undo buffer is automatically filled, again only while
programming. Each time the sequencer step address is changed, the
current output buffer contents are first stored into the Undo
buffer, then the stored sequencer values are transferred to the
output buffer. Selecting the STORE command will transfer the
sequencer data to the Undo buffer (Undo contents are lost), then
the output buffer is copied into the sequencer locations. When an
individual value is changed, that value in the current output
buffer is first copied into the Undo buffer. Selecting the UNDO
command will always exchange the output buffer with the Undo
buffer. Thus, it possible to undo Undo.
34
Output: Current sequencer address (step) for the module.
Address "@": The current sequencer address. While playing, this
value is stepped according to the value in the Measures input.
When Measures reaches 0, the next address is set, and new
sequencer values are brought in. While programming, "@" serves as
a quick address locater. This input is overridden by the Alpha
module's Programmer Address input.
Address End "e": When playing, upon reaching this address, the
sequencer will halt. Ignored if it is equal to or less than the
current address (leaving it at 0 disables).
Undo "U": Exchanges contents of the output buffer with the Undo
buffer. Inhibited while playing.
Store "!!": Store contents of output buffer into the sequencer, with
sequencer contents saved in the Undo buffer. Inhibited when
playing.
Recall "R": Transfer contents of Save buffer into the output buffer,
with output buffer contents saved in the Undo buffer. Inhibited
when playing.
Save "S": Transfer contents of the output buffer into the Save
buffer. Inhibited when playing.
Measures to next stage "|": This value is essentially the time
control value. While playing, it decrements after each measure
until it reaches 0, then it bumps the sequencer address, which
starts off the next event. The actual time value of a measure is
based on the Tempo and time signature values of the Alpha module.
Stage outputs "X, Y, Z" and "A, B, C, D": General output stages.
Output goes to the corresponding Stage Output module.
Stage outputs with slew "E/e" to "H/h": These outputs are slewed.
They all have a lower case slew rate label directly under the
uppercase value label. Slewing works by adding (or subtracting,
depending on direction) a slew value to (from) the current value
until it reaches the new value. The higher the slew rate value,
the faster the slew, except that a slew rate of 0 means no slew.
Output goes to the corresponding Stage Output module.
----------------------------------------------------------------------
Stage Output Modules PROGRAM 1,2 to 3,4 X,Y,Z, A-H
Magenta User Input (just left of label tag): Must be set to
corresponding Program Sequencer module number. This is the number
(0-F hex) that is part of the Program Sequencer module's label.
Select with mouse, move cursor left or right to set.
Output: Value of current stage of corresponding Program Sequencer
module and stage.
35
======================================================================
CLOCK MODULES
These modules generate timing pulses which in turn are used to
trigger events throughout the rest of the modules. Most of the time
the output from the Clock modules will be sent to the "heart" input
of function modules such as the Index modules. It is important to
realize that MusicBox operates on the MIDI 24 beat/quarter note
standard. This means that the computer will recalculate all active
modules exactly 24 times for each quarter note, 12 times for each
eighth note, etc.
Since strobe -- or any other change of state -- requires 2
cycles to be detected: one cycle for the "on" state and one cycle for
the "off" state, it is easy to confuse the 24 clocks per quarter note
standard with 12 on/off states per quarter note. This is especially
confusing when using clocks at their fastest rate, which would have
to be 12 strobe cycles per quarter note. Since most of the clocks
will generate a strobe of only 1 cycle duration, the problem
goes away when dealing with cycles of 3 and more. As an aside, 3
clock cycles corresponds to a thirty-second note, which is the
fastest practical note duration. Of course the number of clocks in a
given note (3 for a 32nd, 6 for a 8th, etc.) have nothing whatsoever
to do with the actual time duration of the note. Tempo is set by the
Alpha module and can range from as low as 6 quarter note beats per
minute to as high as 256 beats per minute.
----------------------------------------------------------------------
Note Clock CLOCK 1,1 \0D
Note Clock CLOCK 1,2 \0E
Purpose: Main note-generating clocks. The two modules are
identical. Two are given to allow up to 32 copies of the module,
rather than the usual 16.
Output: Clock between a copy of the "v" (value) input, or 0.
Hold (check) input: When non-zero, output will hold at 0. When
released, the output will synchronize to the next non-zero Sync
input. Note that a Hold at the Alpha system module will act
exactly like a hold at this input (as well as at the Hold input of
all other modules), allowing all clocks to be held and sync'd with
just the one Alpha Hold.
Sync "S" input: After a HLT, or a local or Alpha module Hold, the
clock will not resume until a non-zero value is detected at this
input. Thus, clocks can be synced to other clocks, or to any
other event. By leaving the sync at non-zero (the default), an
Alpha hold will cause all active clocks to sync to the system
measure start.
36
Note value (note) input: Sets clock rate as a note duration time.
Add 10 hex to flag triplets, 20 hex to flag dotted notes.
Example: 3 = quarter note,
13 hex = quarter note triplet,
23 hex = dotted quarter note.
input note clocks clocks clocks
value value normal triplet dotted
0 = Double whole 192 128 255 *
1 = Whole note 96 64 144
2 = Half note 48 32 72
3 = Quarter note 24 16 36
4 = Eighth note 12 8 18
5 = Sixteenth 6 4 9
6 = Thirty second 3 2 4 *
7 = Sixty fourth 2 * 2 * 2 *
* = not accurate representations.
Sustain value "s" input: Note on time as a hexadecimal percentage of
total note duration, with 80% hex equal to 50% decimal. 40% hex is
equal to 25% decimal, and C0% hex is equal to 75% decimal. A
value of 0 will give a note on time of 1 clock.
Delay Offset "o" input: Offset value of note start, in clocks.
Although the Offset value is always a delay, it is possible to
lead the note by giving offset values greater than half the note
value. Note that every time the offset value changes, the module
is automatically re-sync'd to the sync pulse plus the delay.
Velocity Value "v" input: This value is sent to the module output at
clock-on, at clock-off, the module output is set to zero. The
purpose of this input is to allow for the clock pulse to directly
control the MIDI velocity input of the MIDI output module. When
the note clock output is used as a general ON/OFF flag, the value
can be left at its default value of 1. If this value is set to
zero, it has the effect of holding the module off without
resetting the sync.
----------------------------------------------------------------------
Measure Clock CLOCK 2,1 \B3
Purpose: To clock measure starts, with time offset into the measure.
Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly
one calculation cycle (1/24 of a quater note).
Hold (check) input: When non-zero, output will hold at 0. When
released, the output will synchronize to the next measure start,
plus the given offset. Note that a Hold at the Alpha system
module will act exactly like a hold at this input.
Delay Offset "o" input: Offset value from measure start, in clocks.
Although the offset value is always a delay, it is possible to
lead the measure by giving offset values greater than half the
measure value.
37
----------------------------------------------------------------------
Multiple Measure Clock CLOCK 2,2 \BA
Purpose: Measures clock. A good clock to trigger slow events.
Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly
one calculation cycle (1/24 of a quater note).
Hold (check) input: When non-zero, output will hold at 0.
Measure Count "c" input: Number of measures between strobes. When
set to 1, a strobe is generated at the start of each measure
(measure timing & beats per measure are set by the Alpha module).
When set to 2, a strobe is generated every 2nd measure; when set
to FF hex, a strobe is generated at the start of every 255th
measure, etc. When set to 0, no strobe is generated.
----------------------------------------------------------------------
Seconds Clock CLOCK 2,3 \92
Purpose: Real-time clock. Runs at an unchanging rate of one count
per second.
Output: Seconds or minutes count, depending on "m" input.
Display (yellow) output: Decimal display of Output.
Hold (check) input: When set to non-zero, output will hold, when
returned to zero, output goes to 0.
Minutes flag "m" input: Set output as follows:
0 = direct send of seconds count, 0 - FF hex.
1 = direct send of seconds count, 0 - 60 decimal.
2 = direct send of minutes (seconds / 60).
38
----------------------------------------------------------------------
Mu Clock CLOCK 3,1 \E6
Purpose: General purpose event clock, similar in operation to an
analog LFO. Changing values in the Count input will give
accelrando or ritardando.
Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly one
calculation cycle (1/24 of a quater note).
Hold (check) input: When non-zero, output will hold. When returned
to zero, the beat cycle will start at that moment, allowing the
Hold input to also act as a sync input.
Count "c" input: Number of clocks between strobes, with 1 the shortest
duration, 255 the longest. When 0, the clock is stopped.
---------------------------------------------------------------------
Gamma Clock CLOCK 3,2 \E7
Purpose: General purpose event clock. A good clock to trigger fast
events. Also useful for generating leading or lagging beats.
Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly
one calculation cycle (1/24 of a quater note).
Hold (check) input: When non-zero, output will hold at 0. When
returned to zero, the beat cycle will start at that moment, allowing
the Hold input to also act as a sync input.
Count "c" input: Number of clocks between strobes, with 1 the
shortest duration, 255 the longest. When 0, the clock is stopped,
when 1 it strobes every calculation cycle, with a complete on/off
clock cycle occurring every two calculation cycles. Since the
on/off strobe cycle is only meaningful with a minimum of 2 beats,
there is no pratical difference between a setting of 1 and of 2,
and in fact it acts as if the minimum active setting was 2.
Offset "o" input: While the beat cycle is controlled by the Count
input, above, the offset into the beat where the strobe will occur
is set by this input. When the Offset value is 0, the strobe will
occur at the start of the beat; when 1, then it happens one clock
after the start of the beat, and so on. If the Offset input is set
to a value equal to or greater than the Count input, the strobe
occurs at the start of the beat, just as if it were set to 0.
39
----------------------------------------------------------------------
Lambda Clock CLOCK 3,3 \E2
Purpose: General clock/loop counter. Simply counts calculation
cycles (also called "loops", because the program loops back to the
start after each cycle). For each loop, the output of the clock
is incremented by one. When the count reaches FF hex (255
decimal), it rolls over to 0.
Output: Count of 0-FF (hex), masked by the AND input.
Hold (check) input: When non-zero, output will hold at 0.
Shift ">>" input: Reduce the count period by powers of 2. A value
of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
Since the internal count register is 16 bits while only 8 bits can
be displayed, shifting can also be used to count beyond the normal
255 maximum (16 bits gives a maximum of 65,535).
Mask "&" input: Bit mask for output. The value of the input is
logically ANDed with the loop count prior to sending it to the
output. Thus, with the input set to 0, the output will remain 0,
if the input is set to FF (hex), the output will count from 0 to
FF, and repeat continuously. Useful input values are powers of 2
(1, 2, 4, 8, 10 hex, 20 hex, 40 hex, 80 hex), which will give
clock ticks which half in frequency for each power of two.
Note that one loop cycle is the same as one MIDI clock, but since
the AND input wants to do things in powers of 2, and since the
MIDI clock standard is 24 beats per quarter note (which works out
to be powers of three), this module is usually not the best choice
to directly generate note timing.
----------------------------------------------------------------------
Beta Clock CLOCK 3,4 \E1
Purpose: Real-time clock/loop counter, independent of the system
Tempo setting of the Alpha module. Runs at an unchanging rate
some 580 counts/second. For each clock tick, the output of the
module is incremented by one. When the output reaches FF hex (255
decimal), it rolls over to 0.
Output: Count of 0-FF (hex), masked by the AND input.
Hold (check) input: When non-zero, output will hold at 0.
Shift ">>" input: Reduce the count period by powers of 2. A value
of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
Since the internal count register is 16 bits while only 8 bits can
be displayed, shifting can also be used to count beyond the normal
255 maximum (16 bits gives a maximum of 65,535).
Mask "&" input: Bit mask for output. The value of the input is
logically ANDed with the tick count prior to sending it to the
output. Thus, with the input set to 0, the output will remain 0,
if the input is set to FF (hex), the output will count from 0 to
FF, and repeat continuously.
40
======================================================================
TRIGGER MODULES
----------------------------------------------------------------------
Synchronizer TRIGGER 1,1 \EF
Purpose: Synchronize one clock event with another, or a random event
with a clock cycle, or two random events with each other.
Output: Pulse (0 to 1 to 0) synchronized in time according the two
inputs.
Trigger "t" input: A strobe at this input will cause an output pulse
to be generated at the next Sync input.
Sync "s" input: Once a Trigger input is received, a strobe at this
input will be produce a pulse at the output. Normal usage is to
patch a clock at this input, and a random pulse at the Trigger
input. This will sync the random pulse to the clock. Can also be
used as a one-shot pulse generator by "loading" with the Trigger
input, and "shooting" with the Sync input.
----------------------------------------------------------------------
Flip-Flop TRIGGER 1,2 \E9
Output: TRUE (1) or FALSE (0), depending on the last "s" or "r"
input.
Set "s" input: Non-zero after zero will set the output to TRUE.
Reset "r" input: Non-zero after zero will set the output to FALSE.
----------------------------------------------------------------------
Beat Pattern Generator TRIGGER 2,1 \9B
Purpose: Generate a beat pattern by the interference of up to four
beat frequencies.
Output: Pulses (0 to 1 to 0) grouped in time according to Cycle
inputs.
Clock (heart) input: Master clock for the module. Output will be
derived from and synchronized to this input.
Hold (check) input: When non-zero, output will hold at 0. When
released, the output will synchronize (all counts will start at
the same time).
Cycle "c" inputs: The number of clock cycles to run before sending a
pulse to the output. Each of the four inputs are independent of
the others, and are identical in function. When an input value is
0, that input is effectively disabled. Note that whenever any
Cycle input value is changed, all four cycle counts will be reset,
causing the module to automatically resync. Normally this is
desirable because it gives a stable, known pattern for each
setting. When strange offsets to the beat pattern are desired,
use the Beat Pattern Modulator, described below.
41
----------------------------------------------------------------------
Beat Pattern Modulator TRIGGER 2,2 \03
Purpose: Generate a beat pattern by the interference of up to four
independent clock inputs.
Output: Pulses (0 to 1 to 0) grouped in time according to Cycle
inputs.
Hold (check) input: When non-zero, output will hold at 0.
Clock (heart) inputs: Clock pulses at these inputs will be combined
into a single pulse at any one calculation cycle, and sent out as
an output strobe. Each of the four inputs are independent of the
others, and are identical in function. Unused inputs are ignored.
----------------------------------------------------------------------
Random Strobe TRIGGER 2,3 \C1
Purpose: General purpose event trigger, with random dither.
General: This is the same as the Gamma Clock module, except it has a
dithered strobe output. Handy for generating polyrhythms.
Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly
one calculation cycle (1/24 of a quater note), with frequency set
by the Count input, and probability set by the Dither input.
Hold (check) input: When non-zero, output will hold at 0. When
returned to zero, the beat cycle will start at that moment,
allowing the Hold input to also act as a sync input.
Count "c" input: Number of clocks between strobes, with 1 the
shortest duration, 255 the longest. When 0, the clock is stopped,
when 1 it strobes every calculation cycle, with a complete on/off
clock cycle occurring every two calculation cycles. Since the
on/off strobe cycle is only meaningful with a minimum of 2 beats,
there is no pratical difference between a setting of 1 and of 2,
and in fact it acts as if the minimum active setting was 2.
Offset "o" input: While the beat cycle is controlled by the Count
input, above, the offset into the beat where the strobe will occur
is set by this input. When the Offset value is 0, the strobe will
occur at the start of the beat; when 1, then it happens one clock
after the start of the beat, and so on. If the Offset input is set
to a value equal to or greater than the Count input, the strobe
occurs at the start of the beat, just as if it were set to 0.
Dither "%" input: The value at this input is compared to an
internally generated random number in the range of 0-FF (hex).
The effect of this is the higher the Dither value, the more often
the output strobe will occur. If the value is 0, the strobe will
be disabled; if 40 (hex), it will occur 1/4 of the time; if 80
(hex), it will occur 1/2 of the time; if C0 (hex), it will occur
3/4 of the time; if FF (hex) it will occur 255/256 of the time.
42
----------------------------------------------------------------------
Change Detector TRIGGER 3,1 \0B
Output: TRUE pulse if the Value input has changed. Pulse is active
for one complete module calculation cycle, then returns to zero.
Value "-->" input: Any value.
----------------------------------------------------------------------
Slope Detector TRIGGER 3,2 \5C
Output: True (1) when the current value is greater than the
preceding value (positive slope), False (0) when the current value
is less than the preceding value (negative slope). No change when
the preceding value equals the current input.
Value "-->" input: Any value.
----------------------------------------------------------------------
Delta Test TRIGGER 3,3 \A6
Output: TRUE (1) when the absolute difference between the current
Value input and the last different Value input is equal to the
Delta value input.
Hold (check) input: When non-zero, output will hold at 0.
Delta value (delta) input: Value that will be compared with the
input delta.
Octave normalize "o" input: When non-zero, the input will be
normalized to one octave (0-11), before it is compared with the
Delta value.
Input "-->": Any changing value.
43
======================================================================
ONESHOT MODULES
----------------------------------------------------------------------
Timer ONESHOT 1,1 \D9
Purpose: Signal an event after a given number of MIDI clocks, with
optional delay. Based on internal MIDI clock speed, which is
dependent on the Tempo setting of the Alpha module.
Output: After an optional delay, goes from 0 to 1, then returns to 0
again.
Strobe "!" input: A zero to non-zero transition starts the timer.
Further inputs are ignored until the module completes its cycle.
Delay "d" input: Number of clocks delay, after the Strobe input is
clocked, before output goes to 1. When 0, there is no delay.
Hold "h" input: Number of clocks the pulse will remain on. When 0,
the output will not return to zero. This is useful when used with
the "d" input to control an event start that will never retrigger.
----------------------------------------------------------------------
Clocked Timer ONESHOT 1,2 \BE
Purpose: Signal an event after a given number of clock ticks, with
optional delay. Based on an external clock speed.
Output: After an optional delay, goes from 0 to 1, then returns to 0
again.
Clock (heart) input: Any non-zero after zero will increment the
internal counters.
Strobe "!" input: A zero to non-zero transition starts the timer.
Further inputs are ignored until the module completes its cycle.
Delay "d" input: Number of clocks delay, after the Strobe input is
clocked before output goes to 1. When 0, there is no delay.
Hold "h" input: Number of clocks the pulse will remain on. When 0,
the output will not return to zero. This is useful when used with
the "d" input to control an event start that will never retrigger.
44
----------------------------------------------------------------------
Absolute Timer ONESHOT 2,1 \BC
Purpose: Signal an event after a given time setting, with optional
delay. One-shot timer based on the internal 580 ticks/second
real-time clock speed, which is independent of the Tempo setting
of the Alpha module.
Output: After an optional delay, goes from 0 to 1, then returns to 0
again.
Strobe "!" input: A zero to non-zero transition starts the timer.
Further inputs are ignored until the module completes its cycle.
Delay "d" input: Number of clocks delay, after the Strobe input is
clocked, before output goes to 1. When 0, there is no delay.
Hold "h" input: Number of clocks the pulse will remain on. When 0,
the output will not return to zero. This is useful when used with
the "d" input to control an event start that will never retrigger.
Shift ">>" input: Reduce the count period by powers of 2. A value
of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
----------------------------------------------------------------------
Seconds Timer ONESHOT 2,2 \BD
Purpose: Signal an event after a given time setting, with optional
delay. One-shot timer based on the internal 1/second real-time
clock speed, which is independent of the Tempo setting of the
Alpha module.
Output: After an optional delay, goes from 0 to 1, then returns to 0
again.
Strobe "!" input: A zero to non-zero transition starts the timer.
Further inputs are ignored until the module completes its cycle.
Delay "d" input: Number of clocks delay, after the Strobe input is
clocked, before output goes to 1. When 0, there is no delay.
Hold "h" input: Number of clocks the pulse will remain on. When 0,
the output will not return to zero. This is useful when used with
the "d" input to control an event start that will never retrigger.
Shift ">>" input: Reduce the count period by powers of 2. A value
of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
45
----------------------------------------------------------------------
Strobe Pushbutton ONESHOT 3,1 \09
Output: ON pulse, returning to OFF.
Magenta User Input: Clicking the left mouse button when the cursor
is over magenta user input pad will change the output from 0 to 1
for 1 calculation cycle, then return to 0.
----------------------------------------------------------------------
Gate Pushbutton ONESHOT 3,2 \E3
Output: 0/1
Magenta User Input: Clicking the left mouse button when the cursor
is over magenta user input pad will change the output from 0 to 1
(or from 1 to 0).
----------------------------------------------------------------------
Step Pushbutton ONESHOT 3,3 \12
Output: 0-FF (hex)
Magenta User "#" Input: This value is echoed to the output.
Magenta User (up & down arrows) Input: Clicking the left mouse
button when the cursor is over the left side of the magenta input
pad will increment the value at the output, the right side of the
pad will decrement the output.
46
======================================================================
TEST MODULES
This group of modules will test for a particular condition, and
report TRUE (output=1, red tag indicator highlighted) if the
condition is met, and FALSE (output=0, red tag indicator not
highlighted), if the condition is not met.
----------------------------------------------------------------------
Zero? TEST 1,1 \07
Output: TRUE if the Value input is zero, else FALSE.
Value "-->" input: Any value.
----------------------------------------------------------------------
Equal? TEST 1,2 =
Output: TRUE if the two Value inputs are equal, else FALSE.
Value "-->" inputs: Any value.
----------------------------------------------------------------------
Different? TEST 1,3 \A7
Output: TRUE if the two Value inputs are not equal, else FALSE.
Value "-->" inputs: Any value.
----------------------------------------------------------------------
Greater? TEST 2,1 >
Output: TRUE if value input "a" is greater than value input "b",
else FALSE.
Value inputs "a" and "b": Any value.
----------------------------------------------------------------------
Less? TEST 2,2 <
Output: TRUE if value input "a" is less than value input "b", else
FALSE.
Value inputs "a" and "b": Any value.
----------------------------------------------------------------------
Within? TEST 2,3 \CA
Output: TRUE if Value input is within limits set by MAX input and
MIN input, else FALSE.
Value "-->" input: Any value.
MAX (up arrow) input: Upper limit of test condition, inclusive.
MIN (down arrow) input: Lower limit of test condition, inclusive.
47
----------------------------------------------------------------------
True? TEST 3,1 "
Output: TRUE if the Value input is non-zero, else FALSE.
Value "-->" input: Any value.
----------------------------------------------------------------------
Negative? TEST 3,2 \A4
Output: True if the input value is greater than 7F hex, 127 decimal.
Since all displayed values are in the range of 0-FF hex, values
greater than 7F hex can be treated as negative numbers. FF hex is
equivalent to -1, FE hex to -2, and so on. The module also is
useful for warning when an output value is beyond the legal MIDI
range of 0-7F hex.
Value "-->" input: Any value.
----------------------------------------------------------------------
Bit Set TEST 3,3 \FE
Purpose: Convert a zero/non-zero value to one of 8 individual bit
positions in the output.
Output: 8-bit value representing the ON/OFF state of the 8 Logic
inputs.
Logic "0" to "7" inputs: From top to bottom, the zero/non-zero state
of these inputs are translated to ON/OFF bits positioned from
right to left in the 8 bit Output value.
48
======================================================================
RANDOM MODULES
----------------------------------------------------------------------
Random Number Generator RANDOM 1,1 ?
Output: A random number within set limits. Uses a simple, fast
algorithm to produce a uniformly distributed pseudo random value.
Clock (heart) input: Non-zero after zero will cause a new random
number to be generated.
Hold (check) input: Non-zero resets the seed to the value at the
Seed input, and holds output at that value. If two modules have
the same seed value, and they are given a hold pulse at the same
time, they will then produce exactly the same string of random
numbers. This is also the effect of Alpha module Random Reset
input. However, the Alpha hold input simply freezes the output,
and does not generate a new seed.
Seed "S" input: The seed value for a new random number run. The
module is capable of producing 256 different random runs, one for
each possible seed value of 0-FF hex. After setting the new seed
value, a Hold or a Alpha Random Reset is required put it into
effect. Note that for the module to produce a unique set of
random numbers, it must be started with a unique seed. Conversely,
two or more modules will have the same set of numbers if they are
given the same seed value.
Limit (up-arrow) input: Set upper limit that can be generated.
Exclusive: a setting of 8 will produce 0-7.
Offset "+" input: Added to the current output.
49
----------------------------------------------------------------------
Up/Down Random Number Generator RANDOM 1,2 \A8
Output: A random number within set limits. Uses program code as the
random number source, allowing successive numbers to be accessed
as a forward or backward run, at some sacrifice of uniformity in
distribution.
Clock (heart) input: Non-zero after zero will cause a new random
number to be generated.
Hold (check) input: Non-zero resets the seed to the value at the
Seed input, and holds output at that value. If two modules have
the same seed value, and they are given a hold pulse at the same
time, they will then produce exactly the same string of random
numbers. This is also the effect of Alpha module Random Reset
input. However, the Alpha Hold simply freezes the output, and
does not generate a new seed.
Seed "S" input: The seed value for a new random number run. The
module is capable of producing 256 different random runs, one for
each possible seed value of 0-FF hex. After setting the new seed
value, a Hold or a Alpha Random Reset is required put it into
effect. Note that for the module to produce a unique set of
random numbers, it must be started with a unique seed. Conversely,
two or more modules will have the same set of numbers if they are
given the same seed value.
Up/down "+/-" input: Changing from zero to non-zero (or vice versa)
changes the direction of the random number run, causing successive
numbers to be repeated in an inverse run.
Limit (up-arrow) input: Set upper limit that can be generated.
Exclusive: a setting of 8 will produce 0-7.
----------------------------------------------------------------------
Random Logic RANDOM 1,3 \AD
Output: TRUE (1) or FALSE (0) at 50% probability.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated.
50
----------------------------------------------------------------------
Dither Logic RANDOM 2,1 \04
Output: TRUE (1) or FALSE (0), the probability of which is set by
the Dither input.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated.
Dither "%" input: The value at this input is compared to an
internally generated random number in the range of 0-FF (hex). If
the the value is greater than the random number, the output will
be TRUE, if less or equal it will be FALSE. The effect of this is
the higher the Dither value, the more often the output will be
TRUE. If the value is 0, the output will always be FALSE; if 40
(hex), it will be TRUE 1/4 of the time; if 80 (hex), it will be
TRUE 1/2 of the time; if C0 (hex), it will be TRUE 3/4 of the
time; if FF (hex) it will be TRUE 255/256 of the time.
----------------------------------------------------------------------
Dither Toggle Switch RANDOM 2,2 \05
Output: A copy of the Value input or 0, the probability of which is
set by the Dither input.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated.
Dither "%" input: The value at this input is compared to an
internally generated random number in the range of 0-FF (hex). If
the the value is greater than the random number, the output will
be a copy of the Value input, if less or equal it will be 0. A
value of 20 (hex) will switch to the Value input 1/8 of the time,
and to 0 7/8 of the time.
Value "-->" input: Any value.
----------------------------------------------------------------------
Dither Switch RANDOM 2,3 \06
Output: A copy of the value at input "a" or "b", the probability of
which is set by the Dither input.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated.
Dither "%" input: The value at this input is compared to an
internally generated random number in the range of 0-FF (hex). If
the the value is greater than the random number, the output will
be a copy of the "b" input, if less or equal it will be a copy of
the "a" input. A value of 40 (hex) will switch to the "a" input
3/4 of the time, and to the "b" input 1/4 of the time.
Value "a" and "b" inputs: Any value.
Offset "+" input: Added to the current output.
51
----------------------------------------------------------------------
Odds Switch RANDOM 3,1 \AC
Output: A copy of the value at input "a", "b", "c", or "d", with the
odds of selecting a particular input geometrically decreasing.
Odds of selecting the "a" input is 1:2, of "b" is 1:4, of "c" is
1:8, of "d" is 1:16.
Clock (heart) input: Any non-zero after zero will cause a new input
to be selected.
Inputs "a", "b", "c", and "d": Any value.
Offset "+" input: Added to the current output.
----------------------------------------------------------------------
Odds Generator RANDOM 3,2 \84
Output: One of the numbers 0-7 with the odds of generating a
particular number geometrically decreasing. Odds of producing 0
is 1:2, of 1 is 1:4, of 2 is 1:8, .... , of 7 is 1:256.
Clock input: Any non-zero after zero will cause a new number to be
generated.
----------------------------------------------------------------------
Interference Pattern Dither RANDOM 3,3 \8E
Purpose: Generate a pattern by the interference of up to four
independent dither inputs.
Output: Values of 0 - F (hex), weighted according to dither input
values.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated.
Dither "%" inputs: These four dither values each determine the
frequency weighting of a bit position of the output value that
will be on or off. If only the first is used, the output pattern
will be 0 - 1. If the first two are used the pattern will be 0 -
3, etc. When set to zero, the inputs are disabled.
52
======================================================================
PATTERN MODULES
----------------------------------------------------------------------
Interval Generator PATTERN 1,1 !
Pattern Generator PATTERN 1,2 \13
Purpose: Generate a new pattern for the Chord Value Reader modules
to read. The two modules are identical, except that the Interval
Generator has one value input and three inputs that are offsets to
the base value, where the Pattern Generator has four independent
value inputs.
Output: Address of the base value, 0-3. This is always 0 unless the
Sort input is ON. After a sort, it is sometimes useful to know
where the base value went.
Page (paragraph symbol) input: These modules, plus the two Chord
Value Reader modules and the Chord Value Writer module all use a
group of sixteen four-byte memory cells as the data area. The Page
input determines which of the 16 different chord groups is to be
used.
Base value "-->" input: This input will go to the zeroth (base) cell
in the chord group.
Interval value ">>" inputs to Interval Generator: These three inputs
are each added to the Base value input, then they are sent to their
respective locations in the chord group.
Pattern value "-->" inputs to Pattern Generator: These three inputs
are each sent directly to their respective locations in the chord
group.
Octave normalize "o" flag input: When non-zero, the four chord
values will be normalized to the one octave range of 0 - 11.
Offset "+" input: This value is added to the four chord values. If
the octave normalize flag is non-zero, the offset value will be
added AFTER normalizing.
Sort "<->" flag input: When non-zero, the four chord values will be
sorted in ascending order prior to writing them to the chord group
table.
Octave fold "f" input: Active when Sort flag is non-zero. Sets the
octave range within which the four chord values will be folded. 0
sets a range of 0-11, 1 sets 0-23, 2 sets 0-35, etc.
Write Strobe "!" input: Non-zero after zero will cause a the
currently paged four-value chord group to be written with the
module's values.
53
----------------------------------------------------------------------
Chord Value Writer PATTERN 1,3 @
Purpose: Allow writing to individual values of the chord table.
Output: Previous value.
Page (paragraph symbol) input: Set which of the 16 different chord
groups is to be written to.
Position "@" input: Determines the position in the four-value chord
table to which the input will be written. Zero writes to the
first value in the table, one writes to the second, etc.
Value "-->" input: This input will go to the addressed cell in the
chord group.
Octave normalize "o" flag input: When non-zero, the input value will
be normalized to the one octave range of 0 - 11.
Offset "+" input: This value is added to the input value prior to
writing to the chord table. If the octave normalize flag is non-
zero, the offset value will be added AFTER normalizing.
Write Strobe "!" input: Non-zero after zero will cause the addressed
chord table value to be replaced by the module's current value
input. The previous chord table value is sent to the output.
----------------------------------------------------------------------
Chord Value Reader PATTERN 2,1 \80
Chord Value Reader PATTERN 2,2 \87
Purpose: Up to four modules can be used together to read chords, or
single modules can be used to generate patterns. The two modules
are identical. Two are given to allow up to 32 copies of the
module, rather than the usual 16.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated.
Page (paragraph symbol) input: Set which of the 16 different chord
groups is to be read from.
Position/Order "@" input: When the Sort input is zero, this input
determines the position in the four-value chord table from which
the output will be read. Zero reads the first value in the table,
one reads the second, etc. When the Sort is non-zero, this input
determines the ascending order that will be read. Zero reads the
lowest of the four values, one reads the next higher, etc.
Sort "<->" flag input: When non-zero, the module will determine the
ascending order of the values in the chord table, and send the
value selected by the Order input to the output. The actual
position of the values in the chord table is unchanged.
Offset "+" input: This value is added to the output.
54
----------------------------------------------------------------------
Pattern Line Generator PATTERN 3,1 :
Purpose: Generate a pattern line for bass patterns, etc. by adding
or subtracting an input value with the current output value.
Output: Accumulated pattern value.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated.
Hold (check) input: When non-zero, output will hold at its current
setting, and the clock input is ignored.
Reset "!" strobe: Non-zero after zero causes the Start value input
to be sent to the output.
Start value "-->" input: Value that starts the module after a reset,
and the value that the module returns to when an overflow beyond
the Range limit is detected. Acts as a "center" to the pattern
that will be generated.
Range limit "#" value: Sets the limit above and below the Start
value. When the output plus the next step exceeds this limit, the
module automatically resets to the Start value. Must be greater
than zero for a pattern to be generated.
Up/Down "+/-" input: Add "+" input to the output if zero, subtract
"-" input from the output if non-zero.
Positive value "+" input: Any value.
Negative value "-" input: Any value.
----------------------------------------------------------------------
Tone Row Generator PATTERN 3,2 \EC
Purpose: Produce a 12 note tone row. The values are 0-11, non-
repeating. The order is randomized each time a Strobe input is
given.
Output: Value of 0 - 11, as accessed by the Address input, and as
ordered by the most recent Strobe.
Address "@" input: Values of 0-11 will address one of the 12 tone
values in the tone row. Values greater than 11 are normalized to
the 0 - 11 range.
Strobe "!" input: Non-zero after zero will cause a new tone row to
be generated.
55
----------------------------------------------------------------------
Interference Pattern Generator PATTERN 3,3 \8F
Purpose: Generate a pattern by the interference of up to four
independent strobe inputs.
Output: Values of 0 - F (hex), according to Strobe input pattern.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated.
Strobe "!" inputs: These four input strobes each determine a bit
position of the output value that will be on or off. If only the
first is used, the output pattern will be 0 - 1. If the first two
are used the pattern will be 0 - 3, etc.
56
======================================================================
MIDI MODULES
These modules typically go at the end of the computation loop
(highest priority numbers). This is important because when the
computer calculates a value after sending a previous value to the
output, a glitch may be heard that is the result of the sound being
delayed one MIDI clock cycle.
As their function is to send data out of the computer, usually to a
MIDI device (rather than to another module), most do not have the
cyan module output display.
----------------------------------------------------------------------
MIDI Note MIDI 1,1 1
MIDI Note MIDI 1,2 2
MIDI Note MIDI 1,3 3
MIDI Note MIDI 1,4 4
Purpose: MIDI Key on/Key off output channel(s) for up to 4 notes at
a time. The four modules are identical. Two are given to allow up
to 64 copies of the module, rather than the usual 16.
Channel "c" input: MIDI channel number. If two MPU's are used, 32
MIDI channels are possible, with 0-F hex going to MIDI channels 1-
16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
the second MPU.
Mute "/0/" and "&" inputs: These two inputs are internally ANDed, if
the result is non-zero, MIDI output is enabled, and the red dot in
the label is highlighted; if zero, MIDI output is inhibited. The
input pair is optimized for usage with the Mute module, described
in the chapter "SPECIAL".
Transpose "t" inputs: These two inputs are identical. The values
are summed and then added to each of the 4 Note value inputs prior
to sending them to MIDI. The obvious way to use this input is to
transpose all the Note inputs by the same value. A less obvious
use is to set the Note inputs to base chord values (a major triad,
for example would be 0, 4, and 7; a minor triad would be 0, 3, and
7), then set the Velocity inputs as desired, then use the
Transpose input to play chords.
Velocity Offset "v" input: This is similar to the Transpose input
above, except that the value is added to the 4 Velocity inputs.
Also, to avoid sending out notes with zero values from unused
Note/Velocity inputs, the Velocity Offset only affects "in use"
Velocity values. It will not generate new notes by setting it to
zero, then to some value.
Key Release "r" input: The velocity value sent with Key Off for each
of the 4 Note inputs. Most synthesizers ignore release velocity.
57
Inputs "A" to "D": Keyboard note values.
Inputs "a" to "d": Keyboard velocity values.
These 4 pairs of inputs allow the module to play up to 4 notes
polyphonically. (If more than 4 poly notes are needed, two or
more modules may be given the same MIDI channel number.) The upper
case inputs accept the MIDI note value of 0-7F hex, with 3C
hex equivalent to Middle C. The corresponding lower case inputs
send polyphonic Key-on velocity.
Note values are sent when changed. Velocity changes are ignored
except zero transitions. When Velocity = 0, a Key-off message is
sent with the currently saved note and with the velocity taken
fromn the "r" input; the first non-zero Velocity seen will send a
Key-on message with the note value at the input, and the given
velocity level. While Velocity stays non-zero, any change in note
values will cause an immediate Key-off message with the old note,
then a Key on message with the new note, and the latest Velocity
value for that note.
MIDI protocol requires that a key-on message be balanced by a
corresponding key-off message (or key-on with velocity set to 0).
To simplify the module's use, and to reduce the likelihood of
producing a "stuck note", the module must handle key-on/key-off
messages in an intelligent (for a computer) manner.
This module applies the following rules to changes detected in the
note and velocity value inputs:
1. If pitch changes, and velocity is zero, nothing happens.
2. If pitch changes, and velocity is non-zero, the preceding
note value is sent with a key-off message, then the new
note value is immediately sent with a key-on message and the
currently set velocity value.
3. When the velocity input goes from zero to non-zero, a key-on
message is sent with the current note and velocity values.
4. When the velocity input goes from non-zero to zero, a
key-off message is sent for the currently sounding note.
Translation: If there is anything other than zero at the velocity
input, a change in the note input will cause a new note to play.
Changes in the velocity input of zero to non-zero (such as a clock
would produce) will turn a note off and on.
----------------------------------------------------------------------
MIDI Control Output MIDI 2,1 \99
MIDI Control Output MIDI 2,2 \9A
Purpose: MIDI output module for various control messages. Sends
Patch Change, Aftertouch, Pitch Bend, and 8 Control Change
messages. All parameters are sent when changed. The two modules
use different Control Change maps (see chapter "SYSTEM" for
details), but otherwise are identical. Two are given to allow up
to 32 copies of the module, rather than the usual 16.
Channel "c" input: MIDI channel number. If two MPU's are used, 32
MIDI channels are possible, with 0-F hex going to MIDI channels 1-
16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
the second MPU.
58
Hold (check) input: If zero, MIDI output is enabled, and the red dot
in the label is highlighted; if non-zero, MIDI output is inhibited.
Program Change "Pt" input: MIDI Program Number to be sent.
Aftertouch "a" input: Sends Channel Key Pressure (Aftertouch)
message, followed by input value. Note that this is the
aftertouch message that affects all notes on that MIDI channel,
not the individual key aftertouch message (which is generally not
supported by synthesizer manufacturers).
Pitch Bend "b" input: Sends MIDI Pitch Bend Message. This input
allows a range of 0 FF hex, with 80 hex as the midway setting (as
seen on most synth Pitch Bend control wheels).
Control Change "V", "M", "A-D", and "1-2" inputs: Sends MIDI Control
Change messages. The actual Control Change number is set by one
of the two the Control Map modules (see chapter on SYSTEM
modules). Inputs "1" and "2" are for on/off values, they force all
non-zero input values to 127 before sending them out to MIDI.
Default Control Change message values, with Yamaha's names:
V = 7 = Volume
M = 1 = Modulation Wheel
A = 2 = Breath Controller
B = 3 = Unspecified
C = 4 = Foot Controller
D = 5 = Portamento Time
1 = 64 = Sustain Foot Switch
2 = 65 = Portamento Foot Switch
----------------------------------------------------------------------
MIDI Program Change MIDI 2,3 \9E
Purpose: Change MIDI Patch programs. Supplement to Program Change
input of the MIDI Control Output module.
Output: MIDI Program Number.
Channel "c" input: MIDI channel number. If two MPU's are used, 32
MIDI channels are possible, with 0-F hex going to MIDI channels 1-
16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
the second MPU.
Delay (right-angle) input: Ammount of delay after sending program
change. To avoid loosing data when controlling MIDI matrix
switchers, the MIDI output buffer is cleared prior to sending the
patch change, and a delay can be inserted after the message is
sent. Each count delays for 1/580 second. A value of 3-4 is
usually sufficient. No delay if set to 0 (the default).
Strobe "!" input: Non-zero after zero sends the message.
Value "-->" input: Patch Change value that will be sent upon strobe.
ANDed with 7F hex to limit the value to the legal MIDI range.
59
----------------------------------------------------------------------
MIDI Control Change MIDI 2,4 \98
Purpose: Send MIDI Control Change message, Control Number, and
Control Value to a MIDI output channel.
Strobe "!" input: Any non-zero after zero will initiate a send.
Channel "c" input: MIDI channel number. If two MPU's are used, 32
MIDI channels are possible, with 0-F hex going to MIDI channels 1-
16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
the second MPU.
Number "#" input: MIDI Control Number to be sent. ANDed with 7F
hex to limit the value to the legal MIDI range.
Value "-->" input: MIDI Control Value to be sent. ANDed with 7F hex.
----------------------------------------------------------------------
MIDI System Exclusive Send MIDI 3,1 \11
Purpose: Send MIDI System Exclusive data to MIDI output. Can be
used for large sends of program data, or for small program change
sends. Uses the 64K sequencer data area "A".
Output: After a data send, the output will contain the 16 bit
address of the end of the send +1, which could be the next
available data block. If there is an error, the output will read
"FFFF". Note that the output is 16 bits, rather than the usual 8.
Use the shift input to read the high (Page) part.
Address "@" input: Specify the starting address of the 64K sequencer
data area "A" from which the MIDI data send will start.
Page (paragraph symbol) input: Specify the starting page of the 64K
sequencer data area "A".
Strobe "!" input: Initiate the send. Module output is set to "XX",
and flashes while data is being sent. Data is sent until a MIDI EOX
(F7 hex) is found in the data stream.
Shift ">>" input: Number of shifts to perform on output display.
Each left shift is the same as a division by 2. A shift value of
8 will return the Page count.
60
----------------------------------------------------------------------
MIDI System Exclusive Receive MIDI 3,2 \12
Purpose: Receive MIDI System Exclusive data from MIDI input. Useful
for receiving large dumps of program data.
General: This module is used in conjunction with the 64K sequencer
data area "A", which is the data source for all System Exclusive
receives.
Output: After a data receive, the output will contain the 16 bit
address of the end of the receive +1, which could be the next
available data block. If there is an error, the output will read
"FFFF". Note that the output is 16 bits, rather than the usual 8.
Use the shift input to read the high (Page) part.
Address "@" input: Specify the starting address of the 64K sequencer
data area "A" that will receive the MIDI data.
Page (paragraph symbol) input: Specify the starting page of the 64K
sequencer data area "A".
Strobe "!" input: Initiate the acceptance of a MIDI System Exclusive
dump. Module output is set to "XX", and flashes while data is
being received. Data is accepted until a MIDI EOX (F7 hex) is
found in the data stream. If no EOX is detected after about 20
seconds, the module will abort with an error.
Shift ">>" input: Number of shifts to perform on output display.
Each left shift is the same as a division by 2. A shift value of
8 will return the Page count.
----------------------------------------------------------------------
MIDI System Exclusive Short Send MIDI 3,3 \15
Purpose: Send a short System Exclusive message. Ideal for such
things as Voice Bank Change in the Yamaha FB01.
Strobe "!" input: Non-zero after zero initiates the send.
Data "1-8" inputs: System exclusive data area. Up to 8 bytes can be
sent. If less than 8 bytes are to be sent, set the last byte to
FF hex. The status bytes (F0 hex to start and F7 hex to end) are
sent by the module, so do NOT include them here.
61
======================================================================
DISPLAY MODULES
----------------------------------------------------------------------
Linear Level Meter DISPLAY 1,1 \97
Purpose: VU meter type display of two value inputs. The two
vertical bars will be highlighted in proportion to the values at
the left and right inputs. This meter responds linearly: the
highlighted portion of the bar goes up one notch for each
increment in the input value.
Level "l" and "r" inputs: Level inputs for the left and right meter
columns.
Range (divide) input: Left and right input values will be divided by
this value before being displayed.
----------------------------------------------------------------------
Exponential Level Meter DISPLAY 1,2 \96
Purpose: VU meter type display of two value inputs. The two
vertical bars will be highlighted in proportion to the values at
the left and right inputs. This meter responds exponentially:
the highlighted portion of the bar goes up one notch for each
doubling of the input value.
Level "l" and "r" inputs: Level inputs for the left and right meter
columns.
Range "*" input: Left and right input values will be multiplied by
this value before being displayed.
----------------------------------------------------------------------
ASCII Character Display DISPLAY 2,1 \A0
Value "-->" inputs: Any value in one of the three inputs will be
displayed as a as an ASCII/IBM graphics character. The first
input displays the character in the leftmost position, the next in
the middle, the third in the right. Modules may be grouped
together to form chartcter strings.
----------------------------------------------------------------------
ASCII Character Display from sequencer area "A" DISPLAY 2,2 \86
Address "@" input: Step address in the 65K byte sequencer area "A" at
which to display three sequential bytes as ASCII/IBM graphics
characters. The addressed input is displayed as the character in the
leftmost position, the next in the middle, the third in the right.
Modules may be grouped together to form chartcter strings.
Page (paragraph symbol) input: Page number (high address) for the
character display.
Address shift (up-down arrow) input: Shifts the given address by the
amount given at this input. This allows modules to be ganged
together, but to be addressed by only one source. This shift will
go across page boundaries. It is useful, for example, for
displaying voice names of a synthesizer voice dump.
62
----------------------------------------------------------------------
ASCII Character Display from sequencer area "B" DISPLAY 2,3 \83
Address "@" input: Step address in the 256 byte sequencer at which
to display three sequential bytes as ASCII/IBM graphics
characters. The addressed input is displayed as the character in
the leftmost position, the next in the middle, the third in the
right. Modules may be grouped together to form chartcter strings.
Page (paragraph symbol) input: Page number (high address) for the
character display. Valid Page numbers are 0-F hex.
Address shift (up-down arrow) input: Shifts the given address by the
amount given at this input. This allows modules to be ganged
together, but to be addressed by only one source.
----------------------------------------------------------------------
Decimal Display DISPLAY 3,1 .
Value "-->" input: Any value will be displayed in decimal.
----------------------------------------------------------------------
Note Display DISPLAY 3,2 \D5
Value "-->" input: Any value will be displayed as a as a
note+octave. Assumes C major scale ascending, with Octave 5 =
Middle C.
----------------------------------------------------------------------
Binary Display DISPLAY 3,3 ;
Value "-->" input: Any value will be converted to one of 8 bit
positions and highlighted if the bit is on, lowlighted if the bit
is off.
63
======================================================================
SLEW MODULES
----------------------------------------------------------------------
Peak/Valley Generator with internal clock SLEW 1,1 i
Peak/Valley Generator with internal clock SLEW 1,2 j
Purpose: Generate a smooth path (always steps by 1) toward a
bounded, randomly selected target. Optomized to produce moving
note velocity values.
Output: Always one more or less than last output, depending on
direction of travel and whether the target has been reached. Upon
reaching the internally generated random target, the up/down
direction reverses.
Count "c" input: Number of clocks before the next output value is
calculated.
Range (up-arrow) input: internally generated target is limited to
one less than this value. One fourth of this value is then added
to the output as an automatic offset. For example, if the range
is 10 hex, actual values will range from 4 to 13 hex.
----------------------------------------------------------------------
Peak/Valley Generator SLEW 2,1 k
Purpose: Generate a smooth path (always steps by 1) toward a
bounded, randomly selected target.
Output: Always one more or less than last output, depending on
direction of travel and whether the target has been reached. Upon
reaching the internally generated random target, the up/down
direction reverses.
Clock (heart) input: Any non-zero after zero causes the current output
value to be incremented/decremented.
Hold (check) input: Non-zero holds current output.
Range (up-arrow) input: internally generated target is limited to
one less than this value.
Offset + input: Added to the output.
----------------------------------------------------------------------
Peak/Valley Generator with arbitrary step size SLEW 2,2 l
Purpose: Generate a slope with arbitrary step size toward a bounded,
randomly selected target.
Output: Last output (less offset) plus/minus the value of the step
size, depending on direction of travel and whether the target has
been reached. Upon reaching the internally generated random
target, the up/down direction reverses.
Clock (heart) input: Any non-zero after zero causes the current output
value to be incremented/decremented.
Hold (check) input: Non-zero holds current output.
64
Range (up-arrow) input: internally generated target is limited to
one less than this value.
Step Size "+/-" input: Any value, although large numbers will
normally be of little use.
Offset + input: Added to the output.
----------------------------------------------------------------------
Fast Slew SLEW 3,1 \E5
Purpose: Slew from value "a" to value "b" at rate "r". Generally
used for fast slews that do not need to step sequentially through
each of the intermediate values.
General: Whenever a change is detected in either the "a" or the "b"
input, the module will set the output to the value at the "a"
input, then, each calculation cycle, it will decrement the output
at a rate determined by the formula below, until the output
reaches the value that was in the "b" input at the time the module
started slewing.
To slew from one value to another like an analog lag processor,
plug the output into tha "a" input, and the value to be slewed
into the "b" input. Whenever the "b" input changes, the output
will slew from the last value at "b" to the new value.
Formula:
initialize:
input (a) * rate (r) --> sum (internal)
input --> output
thereafter until sum/rate = target (b):
sum - input + target --> sum
sum/rate --> output
Output: Slewed input, according to the above formula.
Start "a" input: Any value.
Target "b" input: Any value.
Rate "r" input: Any value, but useful values are dependent on the
slew speed, and the magnitude of the difference between the start
and target inputs. Values below about 10 (hex) are seldom useful.
----------------------------------------------------------------------
Slow Slew SLEW 3,2 \EB
Purpose: Slew from value "a" to value "b", over a cycle time "t".
Generally used for slower slews, or for slews that must step
sequentially through each of the intermediate values.
General: Whenever a change is detected in either the "a" or the "b"
input, the module will set the output to the value at the "a"
input, then, each calculation cycle, it will decrement the output
at a rate determined by the formula below, until the output
65
reaches the value that was in the "b" input at the time the module
started slewing.
To slew from one value to another like an analog lag processor,
plug the output into tha "a" input, and the value to be slewed
into the "b" input. Whenever the "b" input changes, the output
will slew from the last value at "b" to the new value.
Formula:
initialize:
input (a) * 256 --> sum (internal)
input --> output
thereafter until sum/256 = target (b):
at every nth cycle, determined by cycle time (t):
sum - input + target --> sum
sum/256 --> output
Output: Slewed input, according to the above formula.
Start "a" input: Any value.
Target "b" input: Any value.
Time "t" input: Any value, but values greater than about 10 (hex)
are VERY slow.
----------------------------------------------------------------------
Filter SLEW 3,3 \9F
Output: Average of last clocked 2, 4, 8, or 16 Value inputs,
depending on current value of Filter input.
Clock (heart) input: Any non-zero after zero will cause the current
value input to be averaged with the preceding inputs, and a new
average will be sent to the Output.
Filter "f" input: Values of 0-3 (input is ANDed with 3) will set the
number of inputs to be averaged to 2, 4, 8, or 16. This is very
similar to a Filter Cutoff input on an analog low pass filter, or
the lag time on an analog lag processor: higher numbers will cause
greater lag.
Offset "+" input: Added to the current output.
66
======================================================================
SAMPLE MODULES
----------------------------------------------------------------------
Echo SAMPLE 1,1 \90
Purpose: This module is actually a special case of a sequencer,
designed to write into one memory location while also reading from
another location. The difference between these locations is the
amount of delay (in clocks) between the input value and output
value. Unlike the general sequencers, which allow specific
addressing of any memory cell in their address range, the Echo
module allows addressing of runs of 16 memory cells, with the
exact cell in a particular run addressed by an internal index.
Like all sequencers, no memory locations will be written if the
Write Enable input is zero; it will merely loop thorugh the
addressed 16 step run of previously stored data.
Magenta User Input (just left of label tag): Current 16-step run.
There are 16 runs of 16 steps each. This input is used to
manually set the desired run, 0-F hex. Defaults to the same run
as the module number, so each module has a unique sequence storage
area. Can be changed for special effects.
Output: Copy of the memory cell addressed by the internal index plus
the value at the Delay input ANDed with F hex to stay within the
16 cell range. Note that the output is fetched BEFORE writing a
new value to memory, allowing a read/write of the same memory cell
during the same clock tick.
Clock (heart) input: Any non-zero after zero will cause a new output
to be generated, and if the write enable is non-zero will save the
current Value input.
Delay ">>" input: Sets the negative offset from the current internal
index that the module will read data from. Since Value data is
always written to the run at the current internal index, and is
read at the internal index minus the value at the Delay input, the
effect of this input is to control the number of clocks by which
the output will lag the input. Note that the run length is 16
memory cells, therefore values over 15 (F hex) are normalized by
ANDing them with F (hex).
Write Enable (omega) input: Any non-zero allows storing the Value
input data into the run. Changing this input between non-zero and
zero while it is playing has the effect of looping a previously
tracked run of notes, and can often be used to good effect.
Value "-->" input: Value to be written when Write Enable is ON.
With the Delay input set to zero and the Write Protect input set to
non-zero, the output should track the Value input. If it does not,
it is likely that the priority number of the Delay module is not
high enough, and it is detecting input from a module (with a higher
priority number) that is being calculated only AFTER being stored
by the Delay module. You can fix this by swapping a few priority
numbers, or you can ignore it and allow the Delay input to be 1
clock higher than it says.
Offset "+" input: Added to the current output.
67
----------------------------------------------------------------------
Delay SAMPLE 1,2 \D0
Purpose: Delays the output by a set number of MIDI clocks.
Output: A copy of the input, delayed up to 255 clock cycles.
Value "-->" input: Any value.
Delay "c" input: Number of MIDI clocks (calculation cycles) by which
the output is to lag the input. When 0, the input is simply
echoed to the output. When 1, the output will follow the input by
1 MIDI clock, when FF (hex), the output will follow by 255 clocks.
Offset "+" input: Added to the current output.
----------------------------------------------------------------------
Peak Hold SAMPLE 2,1 \1E
Output: Highest value seen at the Value input since last Reset.
Reset input: Non-zero copies Value input to Output.
Value "-->" input: Any value.
----------------------------------------------------------------------
Valley Hold SAMPLE 2,2 \1F
Output: Lowest value seen at the Value input since last Reset.
Reset input: Non-zero copies Value input to Output.
Value "-->" input: Any value.
----------------------------------------------------------------------
Sample and Hold SAMPLE 3,1 \15
Output: Copy of Value input plus Offset input as set by the last
Strobe or Track.
Track "=" input: Non-zero tracks current input; zero holds.
Strobe "!" input: Non-zero after zero takes a new sample.
Value "-->" input: Value to be sampled.
Offset "+" input: Added to sampled/tracked input.
----------------------------------------------------------------------
Delta SAMPLE 3,2 \7F
Output: The absolute difference between the current Value input and
the last different Value input. Effect is to generate a constant
rate of change (delta) when the Value input is changing, and to
hold it at the last delta while the Value input remains constant.
Value "-->" input: Any value.
68
======================================================================
BOUNDS MODULES
----------------------------------------------------------------------
Maximum BOUNDS 1,1 \18
Output: Copy of the greater of the two Value inputs.
Value inputs: Any values.
----------------------------------------------------------------------
Minimum BOUNDS 1,2 \19
Output: Copy of the lesser of the two Value inputs.
Value inputs: Any values.
----------------------------------------------------------------------
Bounds BOUNDS 1,3 \17
Output: Copy of the Value input, bounded by the MAX and MIN inputs.
MAX input: Sets upper bounds. Inclusive.
MIN input: Sets lower bounds. Inclusive.
----------------------------------------------------------------------
Quantize BOUNDS 2,1 \FC
Output: Copy of the Match input that most nearly matches the Value
input.
Normalize (divide-symbol) input: When not zero, quantizing is done
on multiples of this value. Setting to C hex, for example, will
normalize to an octave. When zero the input is disabled.
Value "-->" input: Any value.
Match inputs "a" - "h": These eight inputs are set to values that
will be matched with the Value input. Can be used to good effect
to force a random number to conform to a scale, or to transform
one scale to another. Note that the match is calculated starting
with input "a", and in the event of a tie, the first match is
used. This means that if the Value input was 7, input "a" was 6,
and input "b" was 8, and no other input was 7, the output would be
6; however if input "a" was 8 and input "b" was 6, the output
would be 8.
----------------------------------------------------------------------
Sort BOUNDS 2,2 \1D
Output: One of the four inputs determined by the ascending order of
the input values, as selected by the Order input.
Order "@" input: This input determines the ascending order of the
inputs that will be read. Zero reads the lowest of the four
values, one reads the next higher, etc.
Value inputs "a" - "d": Any values, any order.
69
----------------------------------------------------------------------
Approximate Value BOUNDS 3,1 \F7
Output: An approximate (within set limits) copy of the input.
Value "-->" input: The base value, which is approximately echoed at
the output. A change in this input will cause a new output to be
generated.
MAX (up arrow) input: Set upper limit of approximation. Inclusive.
MIN (down arrow) input: Set lower limit of approximation. Inclusive.
70
======================================================================
OCTAVE MODULES
----------------------------------------------------------------------
Octave to Note OCTAVE 1,1 \F8
Output: Note value of given octave plus offset.
Octave value "-->" input: Octave number to be translated into the
note value. Input is multiplied by 12 to give the note value.
Offset "+" input: Any value, added to the output.
----------------------------------------------------------------------
Octave of Note OCTAVE 1,2 \F6
Output: Octave number of given note value.
Note value "-->" input: Note value to be translated into an octave
number. Input is divided by 12 to give the octave number.
----------------------------------------------------------------------
Octave Normalize OCTAVE 2,1 \A2
Output: Base note value of given note plus offset.
Note value "-->" input: Note value to be normalized to a base note
range of 0 - 11. Input is multiplied by 12, and the remainder is
returned as the base note value.
Offset "+" input: Any value, added to the output AFTER normalizing.
----------------------------------------------------------------------
Note Fold OCTAVE 2,2 \F4
Output: Note value of given note folded to within a given octave
range, plus offset.
Note value "-->" input: Note value to be folded into a base octave
range between 0 and the given octave fold range.
Octave fold range "o" input: Octave range that the note input will
be translated to. A value of 0 gives a note value of 0 - 11, 1
gives a note value of 0 - 23, etc.
Offset "+" input: Any value, added to the output AFTER folding.
71
======================================================================
SPECIAL MODULES
These modules allow MusicBox to interface with external input/ output
ports, and with external programs. Because they allow direct access
to the computer internals, if they are used without knowing exactly
what is going on, they will likely cause the computer to crash.
----------------------------------------------------------------------
External Call SPECIAL 1,1 \8A
Purpose: Allow MusicBox to control non-MIDI devices, or allow
installation of custom functions. Access to other programs is
available through use of software interrupts. Usually, the
programs will be of the "terminate but stay resident" type, such
as the Microsoft Mouse driver.
Output: Contents of flag register after the software interrupt.
Strobe "!" input: Non-zero after zero will trigger the module,
transferring control from MusicBox to the external interrupt.
Interrupt number "e" input: The interrupt vector that will be called
when strobed.
Register "A" to "d" inputs: CPU registers are loaded with these
values prior to calling the interrupt. Input "A" goes to AH, "a"
to AL, "B" to BH, etc.
----------------------------------------------------------------------
External Call Registers SPECIAL 1,2 \88
Purpose: Allow access to CPU registers after an external call.
Output: Value of selected register at last strobe.
Strobe "!" input: Non-zero after zero will cause the currently
addressed register data to be sent to the output.
Register select "r" input: Select one of 8 CPU registers to be sent
to the output:
0 = AL 1 = AH
2 = BL 3 = BH
4 = CL 5 = CH
6 = DL 7 = DH
72
----------------------------------------------------------------------
Outport SPECIAL 2,1 \95
Purpose: Send a byte to the computer output port.
Strobe "!" input: Non-zero after zero will trigger the module,
sending the byte at the value input out to the port addressed by
the "P" and "p" inputs.
Value "-->" input: The value to be sent to the output port.
Port address high "P" input: Most significant byte of port address.
Port address low "p" input: Least significant byte of port address.
----------------------------------------------------------------------
Inport SPECIAL 2,2 \8D
Purpose: Fetch a byte from the computer input port.
Output: Most recent results of an input fetch from the port
addressed by the "P" and "p" inputs.
Strobe "!" input: Non-zero after zero will trigger the module,
fetching the byte to the output from the port addressed by the "P"
and "p" inputs.
Port address high "P" input: Most significant byte of port address.
Port address low "p" input: Least significant byte of port address.
----------------------------------------------------------------------
Peek SPECIAL 3,1 }
Purpose: Fetch a byte from the computer memory.
Output: Most recent results of a memory fetch from the byte
addressed by the "$", "P" and "@" inputs.
Strobe "!" input: Non-zero after zero will trigger the module,
reading the byte from the memory location addressed by inputs "$",
"P" and "@".
Memory segment address "$" input: High byte of 8086 segment address
used to address memory. Low byte is forced to 0. For example, to
read from the Color Display Area, Segment address B800 (hex), set
this input to "B8".
Address high "P" input: Most significant byte of memory address.
Address low "@" input: Least significant byte of memory address.
73
----------------------------------------------------------------------
Poke SPECIAL 3,2 {
Purpose: Write a byte to the computer memory.
Value "-->" input: The value to be written to the computer's memory.
Strobe "!" input: as in Peek, but triggers a memory write rather than
a memory read.
Memory segment address "$" input: as in Peek.
Address high "P" input: as in Peek.
Address low "@" input: as in Peek.
----------------------------------------------------------------------
Mute Flags SPECIAL 3,3 \E8
Purpose: Allow access to and program control of mute flags. Typically
used as mute input to the MIDI Note module.
Output: 8 bits of the 16 bit mute status, as positioned and selected
by the Shift and Mask inputs.
Mute "0" input: Mute switches 0-7. Last changed bit changes the
switch. Bits ON highlight the lower left screen MUTE switches.
Mute "8" input: Mute switches 8-F, as above.
Shift ">>" input: Positions the 8 bit output to a window in the 16
bit mute flags. Set at 0 to read flags 0-7, at 8 for flags 8-F.
Mask "&" input: Allows individual flags to be isolated. Bits set hi
allow the flags to pass through. Set to FF hex to disable.
74
======================================================================
SYSTEM MODULES
System modules are unique in that there is only one copy made of each
module. The label has "$" after the icon rather than the module
number to indicate that it is a system module.
----------------------------------------------------------------------
Alpha Control Module SYSTEM 1,1 \E0
Purpose: Controls several global functions, some of which are only
distantly related.
Output: NZ when the HLT menu function is selected.
Global Hold (check) input: Reset and Hold for all modules with Hold
inputs. Allows all clocks, etc. to be held and sync'd with just
the one Alpha Hold. When zero, if in play mode, the Program
modules will sequence.
Global Program module address "@" input: Change in value sets
address parameter for all active Program modules.
Mute/Solo "/o/" input: Non-zero sets mute mode for menu mute flags,
non-zero sets solo mode.
Play/Program (omega) input: Set Play/Program mode. Non-zero puts
Program modules in Program mode, zero puts them in Play mode.
Beats per Measure "|" input: This value and the value following will
determine the "clocks per measure", which is used by the Measure
clocks, the Note clocks, and (to determine the sequence rate) the
Program module.
Note value (note) input: Note value for the system time signature.
1 = whole, 2 = half, 3 = quarter, 4 = eighth, 5 = sixteenth, 6 =
thirtysecond.
This input plus the Beats per Measure input, above, are used like
a standard time signature i.e., 3 in the Beats input and 3 (for a
quarter note) in the note input would result in 3/4 time.
The MIDI standard, which calls for 24 ticks per quarter note, is
used by MusicBox to set note and measure values; but the actual
temporal resolution -- the time value of the ticks -- is set by
the Tempo input, below. It is important to realize that the
"ticks" are actually calculation cycles. That is, for every tick,
MusicBox calculates new values for every active module. This means
that for every quarter note, the modules are calculated 24 times;
for every eighth note they are calculated 12 times, every
sixteenth note, 6 times, etc. This becomes important information
when setting beat advances and retards, delay times, etc.
Since for every quarter note, there are always 24 ticks; for every
measure there are (ticks per note of the note value input) *
(beats per measure value input) cycles.
For 4/4 time, the default, there are (Note value = 3 = quarter
note = 24 ticks) * (beats per measure = 4) = 96 (60 hex) ticks per
measure.
75
Tempo (diamond) input: Sets tempo in quater notes per minute. If
the yellow time-overload indicator (below) is on, the tempo
becomes inaccurate.
Timing is controlled by an internal real-time clock, which
generates interrupts at the rate of some 580 times per second.
The Tempo input allows the user to set the number of these
interrupts that will occur between module calculation cycles
("ticks"). The effect is the same as setting a metronome. The
default tempo is 120 (78 hex). When set to FF hex, the computer
will process the modules at maximum speed.
Random number reset "?" input: Non-zero holds all random number
generators, and sets the seed to that value, or to the seed
specified at the module. The pattern of numbers generated is
repeatable and is dependent on the starting seed value.
MIDI Sync "s" input: Bit 0 sets MIDI output sync: if non-zero, a
MIDI sync pulse is output. Bit 1 sets MusicBox tempo to sync with
an externally produced MIDI sync pulse. Bit 1 or 2 inhibits
normal sending of MIDI Active Sensing.
MIDI sync is used for recording Midi data to an external sequencer
from MusicBox. If the external sequencer sync is set to "internal
sync" (it is generating the MIDI sync), set the "s" value to 2,
for MusicBox to accept MIDI sync instead of using its own internal
timing for generating the tempo.
If the external sequencer/recorder is set to "MIDI sync" (it wants
to get its sync from MIDI), set the "s" value to 1 so that
MusicBox will generate a MIDI sync signal.
Halt "0" input: Non-zero (except FF) in this input is the same as
selecting the menu HLD command. If this value is set to FF,
MusicBox will exit to DOS, as if the QUIT command was selected.
Indicator (yellow): This number is the calculation cycles available
before time-overload. The greater the number, the more
calculating time remains available. The value will decrease
either when more modules are added or when the Tempo is increased.
When it reaches 0, the yellow indicator will highlight.
Everything will continue to work ok, but timing values will no
longer be absolute or accurate.
When the Sync input is set to 2 (external MIDI sync), then the
readout is simply a count of the incomming MIDI sync data. It
will appear as a rapidly counting index as the external sync is
received.
----------------------------------------------------------------------
MIDI Real Time SYSTEM 1,2 \9D
Purpose: Send and/or receive MIDI Real Time messages. Most commonly
used when saving MusicBox output to an external MIDI sequencer-
recorder. Most of these devices need a Start message in addition
to the MIDI sync signal (set by the Alpha module). MIDI Stop,
Start, and Continue messages can be sent and received; Reset and
Tune Request messages can be sent.
76
Output: Bits 0, 1, and 2 correspond to Stop, Start and Continue
messages being received at the MIDI data input. These bits are
latched; they can be cleared by the "!" input.
S, G, C, R, and T inputs: Transitions from zero to non-zero at these
inputs will send MIDI System Real Time messages for Stop, Start
(Go), Continue, Reset, and Tune request. Note that when these
messages are sent they may be passed through by the receiving
device and be detected at the MIDI input of MusicBox, and echoed
as bits set at the module output.
Clear "!" input: Transition from zero to non-zero resets the module
output to zero.
----------------------------------------------------------------------
MIDI Control Change Map SYSTEM 2,1 \94
MIDI Control Change Map SYSTEM 2,2 \81
Purpose: Maps MIDI Control Change values to the 8 Control Change
inputs of the corresponding Control Output module.
Default Control Change numbers, with Yamaha's names:
V = 7 = Volume
M = 1 = Modulation Wheel
A = 2 = Breath Controller
B = 3 = Unspecified
C = 4 = Foot Controller
D = 5 = Portamento Time
1 = 64 = Sustain Foot Switch
2 = 65 = Portamento Foot Switch
----------------------------------------------------------------------
PC Beep SYSTEM 2,3 \0F
Purpose: Sound a tone on the PC speaker.
Clock (heart) input: Any non-zero after zero will sound the tone set
by the Value input, zero will turn it off.
Value "-->" input: Any value may be sent, but pitch changes are
meaningful only from about 20 hex to 60 hex.
----------------------------------------------------------------------
Console Input SYSTEM 3,1 \FB
Purpose: Allow access to console input. This is normally the
computer keyboard, but it may be a serial port or a file, if input
is redirected when MusicBox was first loaded. See DOS manual for
further information on redirected i/o.
Output: Most recent console character. Bit 7 of the output goes high
for one cycle whenever a new character is input.
Hold (check) input: When non-zero, input will not be read.
77
----------------------------------------------------------------------
MIDI Data Input SYSTEM 3,2 \1A
Purpose: Allow access to incomming MIDI data stream. The data
stream is buffered in the s-sequencer memory area, and is accessed
through those modules. This module enables and disables the data
flow, and indexes the incoming MIDI events.
Output: Address (in the F hex run of the "B" sequencer memory area)
of the most recent incomming MIDI data. Increments on each
incomming MIDI data byte.
Reset strobe "!" input: Resets the write address to 0.
Enable (omega) input: When non-zero, the module will write incomming
MIDI data to the sequencer memory addressed by the output index.
When zero, the index will continue to increment with incoming
data, but the module will not write to the sequencer memory.
----------------------------------------------------------------------
Incoming Data Stream Select SYSTEM 3,2 \AB
Purpose: Inhibit/pass incomming MIDI data from either or both of the
MPU's. Also displays active incoming stream.
Output: Most recently active incomming data stream. Bit 0 is MPU-1,
bit 1 is MPU-2
Hold (check) input: Non-zero inhibits resetting of the output flags,
causing the output to remain unchanged unless incoming data is
from a different MPU. If zero, the output will strobe with each
new incoming data packet.
Mask "&" input: Bits 0 and 1 pass incoming data from MPU1 and MPU2
respectively when set, and inhibit it when clear. Default is 3,
accept data from both MPU's.
----------------------------------------------------------------------
MIDI Output Buffer Status SYSTEM 3,3 \F9
Purpose: Show MIDI output activity.
Output: TRUE when MIDI output buffer is not empty. Effect is to
flash when there is outgoing MIDI data.
[end]
78