@DATABASE
@node MAIN "Music Web Examples"

                    Example Configurations
                    ======================

      @{" Key of C Only       " LINK keyofc}  trivial restriction to key of C
      @{" Keyboard Split      " LINK split}  split keyboard into ranges
      @{" Split Instruments   " LINK instr}  play two internal sound channels
      @{" Galloping Echo      " LINK gallop}  special effect
      @{" Delay and Transpose " LINK deltrans}  sound enrichment
      @{" Chord Play          " LINK chord}  add rhythmic chords (key of C)
      @{" Play MIDI File      " LINK midifile}  Play a standard MIDI File (`MIDI DEMO')
      @{" Two Track Recording " LINK track}  Synchronize Recording/Playback on two tracks

This set of examples in the CONFIGURATIONS directory is provided to
show the sort of thing that can be done with the Music Web.  How
they perform with your setup will unfortunately depend to a large
extent on the equipment you have.  My only instrument is a 5-voice
piano, so they typically take advantage of piano-type tones.
These are only intended as a starting point for your experiments.
(The descriptions will be more understandable if they are read
when the example is actually loaded on the Web screen.)

The set may be most useful if you work through them approximately in
order. (...Although `Play MIDI File' is loaded for you to play around
with by the `MIDI DEMO' icon.  Come back to it as well, when you are
more familiar with the system.)

Remember, by the way, to select the `New' menu item before each
`Load Config...'  One configuration will not normally load on top
of another.

(Note that I've tried to get as many control panels as possible open on
the screen at once, so some will be out of the visible area.  Scroll the
screen around to see them.  Use `Select' mode to identify the elements.
You shouldn't usually need to keep that many panels open for normal use.)

@endnode

@node keyofc "Key of C Only"

 KeyofC
========

    This trivial setup just restricts the notes played to be in the key
    of C, blocking any others.  The single path consists of the following
    elements:

                MIDI In
                                                         @{" MIDI In       " LINK Modules_1.GUIDE/midi_in }
                Key Filter -- control panel set to block all `black notes'
                                                         @{" Key Filter    " LINK Modules_1.GUIDE/key_f }
                MIDI Out
                                                         @{" MIDI Out      " LINK Modules_1.GUIDE/midi_out }
                Monitor MIDI -- so you can see what events were actually
                                sent to MIDI Out
                                                         @{" Monitor MIDI  " LINK Modules_1.GUIDE/mon }

    The control panel of the Key Filter is `open' to show the notes
    that are selected to be blocked.  Play around with these settings,
    or try replacing this with another filter, and observe the MIDI
    Monitor panel as you send events from your MIDI keyboard.


@endnode

@node split  "Keyboard Split"

 Split
=======

    This splits the MIDI In stream into two parallel paths, separated at
    middle C by a Key Range element set to mark the notes to be split, and
    a MIDI Split element to actually perform the diversion.  Set Channel
    elements are placed in each path to reset the MIDI channel to which
    each is directed, and the two are then merged for output.  Channels 1
    (below middle C) and 2 (C and above) are used; adjust these with the
    control panels if your equipment (or you) would prefer something
    different.  Adjust the Key Range slider if you want to split at some
    other note.

                                                         @{" Key Range     " LINK Modules_1.GUIDE/key_r }
                                                         @{" MIDI Split    " LINK Modules_1.GUIDE/split}
                                                         @{" Set Channel   " LINK Modules_1.GUIDE/set_ch }

    See @{ " Split Instruments " LINK instr} for an alternative way to do it,
    and read @{" Ideas " LINK Misc.GUIDE/ideas} for a discussion.

@endnode

@node instr "Split Instruments"

 SplitInstruments
==================

    This splits the MIDI In stream into two parallel paths, separated
    at middle C by Key Range elements, and passes these to two Instrument
    elements so that the notes are played via the Amiga's internal voices
    rather than sent through MIDI Out.  The lower range is set to an
    `Organ' sound, the upper to a `Guitar'.  A few other instrument samples
    such as `Violins' are supplied with these in the `INSTRUMENTS' drawer;
    you should be able to find many other 8SVX instrument files from other
    sources.

    Observe that this layout -- unlike the previous @{" Keyboard Split " LINK split} --
    uses two independent Key Range elements, so rather than an exact
    split at some point you have independent adjustment of the two paths.
    You can have them overlapping if you want.
                                                         @{" Key Range     " LINK Modules_1.GUIDE/key_r }
                                                         @{" Instrument    " LINK Modules_1.GUIDE/instr }


@endnode

@node gallop  "Galloping Echo"

 GallopEcho
============

    Things start to get a little more involved with this one.  It
    uses a couple of delays to provide a `gallop-like' double beat
    following each note struck; these can each be sent to a different
    channel, but it loads with them all set to channel 1, for widest
    applicability.  This effect sounds best in the bass line, so a
    Key Range filter is used (in the first delay path) to chop out the
    echo for the upper half of the keyboard (adjust to taste).  A couple
    of Loudness modules are used to reduce the echo relative to the initial
    note. A Msg Filter is used before the first Delay element to remove
    Program Change and System messages from the stream (you probably don't
    want these sent out on all channels).  I suggest using Select mode to
    explore the layout and see which elements are which.

                                                         @{" MIDI In       " LINK Modules_1.GUIDE/midi_in }
                                                         @{" MIDI Out      " LINK Modules_1.GUIDE/midi_out }
                                                         @{" Loudness      " LINK Modules_1.GUIDE/loud }
                                                         @{" Set Channel   " LINK Modules_1.GUIDE/set_ch }
                                                         @{" Msg Filter    " LINK Modules_1.GUIDE/msg_f }
                                                         @{" Key Range     " LINK Modules_1.GUIDE/key_r }
                                                         @{" Delay Events  " LINK Modules_1.GUIDE/delay }

@endnode

@node deltrans "Delay and Transpose"

 DelayTranspose
================

    This one is a slight elaboration on the previous (GallopEcho), with
    a very different result.  The layout is just about the same as before,
    but the delays are now short and Transpose elements have been inserted
    in the delay paths.  One transpose is up an octave, the other is down
    one, and each goes to a different channel, so typically (if your MIDI
    setup can handle it) you can get a nice `fat' sound from each note or
    chord struck.  You will want to play with the control panel parameters.

                                                         @{" MIDI In       " LINK Modules_1.GUIDE/midi_in }
                                                         @{" MIDI Out      " LINK Modules_1.GUIDE/midi_out }
                                                         @{" Loudness      " LINK Modules_1.GUIDE/loud }
                                                         @{" Set Channel   " LINK Modules_1.GUIDE/set_ch }
                                                         @{" Msg Filter    " LINK Modules_1.GUIDE/msg_f }
                                                         @{" Key Range     " LINK Modules_1.GUIDE/key_r }
                                                         @{" Transpose     " LINK Modules_1.GUIDE/transp }
                                                         @{" Delay Events  " LINK Modules_1.GUIDE/delay }

@endnode

@node chord "Chord Play"

 ChordPlay
===========

    This one really throws in the kitchen sink... It will produce a
    chord from each note struck in the key of C, and adds an `after-beat'.
    The masking and other parameters are set fairly arbitrarily; try
    variations. (In particular you might want to remove `C' from the
    `set 1' Key Filter, or add `G', depending on which notes you intend
    to play together -- preferably not very many!)

    There is one relatively direct path to the output (through a Set
    Channel only), but the output of the first (short, `fattening') Delay
    is immediately fed in parallel to three masking Key Filters, each
    followed immediately by a Transpose.  The top one of these creates
    a major third (+4 semitones), applied to only C and F; the next adds
    3 semitones to D, E, A, and B, suitable intervals for these in the
    key of C; the third one enriches just C and G with an octave down.
    Note that the first is piped into the second, so C and F get full
    major triads.  These are all merged together with a couple of Join
    elements, and fed out both directly through a Set Channel and another
    Delay/SetChannel pair to give the after-beat.  (You can set all the
    channels the same if your equipment can't handle the supplied ones.
    If you don't hear any effect this is likely the cause: by default
    your equipment must be able to play channels 1,3, and 4.)

    A Key Range filter is included before the chord paths, but is left
    set to full range initially; change it if you, say, want the chording
    in the bass only.

                                                         @{" MIDI In       " LINK Modules_1.GUIDE/midi_in }
                                                         @{" MIDI Out      " LINK Modules_1.GUIDE/midi_out }
                                                         @{" Loudness      " LINK Modules_1.GUIDE/loud }
                                                         @{" Set Channel   " LINK Modules_1.GUIDE/set_ch }
                                                         @{" Msg Filter    " LINK Modules_1.GUIDE/msg_f }
                                                         @{" Key Filter    " LINK Modules_1.GUIDE/key_f }
                                                         @{" Key Range     " LINK Modules_1.GUIDE/key_r }
                                                         @{" Transpose     " LINK Modules_1.GUIDE/transp }
                                                         @{" Join Streams  " LINK Modules_1.GUIDE/join }
                                                         @{" Delay Events  " LINK Modules_1.GUIDE/delay }

@endnode

@node midifile "Play MIDIFile"

 Play_MIDIFile
===============

[This is the configuration loaded by the `MIDI DEMO' icon]

This is a bare-bones configuration for playing standard MIDI files.
An example file -- Entertainer.MID -- is included in the package.
This is actually the only supplied configuration that doesn't need
an external MIDI connection, as it will play a couple of Instrument
elements instead.  However, it does have a MIDI Out, too, if you would
like to drive something else.  (Remember that the Amiga hardware can
only handle up to four sounding notes at once -- this system doesn't
attempt to use the processing-intensive methods some trackers have to
squeeze more simultaneous voices out of the system.)

To play the `Entertainer' piece, click on the `New MIDI' button in
the panel at top left, and select `Entertainer.MID' from the file
requester that appears.  (Ensure that the Amiga's Audio Out connectors
feed your sound system first!  Both channels are required, and probably
sound best if simply mixed to a monaural input.)  Playing should start
automatically.

Working left to right in the diagram, the `Read MIDI File' element
gets the requested file, and turns it into a Sequence packet that it
feeds to the `RePlay' element; this has `Triggered Play' set, so the
arrival of the packet -- as well as being loaded into the RePlay buffer --
starts playback.  The first element fed by the generated MIDI stream
is a `MIDI Out' that will drive your external MIDI interface.  The stream
then passes on to a `Chan Filter' which marks events that are on MIDI
Channel 1.  (`Entertainer' happens to use Channel 1 for `treble' and
Channel 2 for `bass', but this is its own convention.  Other files will
differ -- and can of course have more channels than this.)  The `MIDI
Splitter' following splits off the marked events from the unmarked ones
so, in this case, as the treble (ch 1) events are marked they go to the
`Trumpet' (the lower one as the diagram happens to be drawn), while the
bass ones go to the `FuzzGuitar'.

You can of course stop and start the playback by clicking on the `Play'
button of the `Play Seq' control panel; to go back to the beginning,
click on the `Play Restart' button.  If you want to play continuously,
set the cycle gadget to `Cont'.  (Observe that the `Triggered' button
that was initially set is cleared when play starts.  If you want it to
reset back to `on' automatically at the end of play, use the `Trig' mode
of the cycle gadget.)  By the way, if you do stop play in the middle,
you may want to remember that the Instruments have `Shut Up!' buttons...

If you like, try clicking on channel `2' in the `Mark Chan' panel,
and clicking also on channel `1' to turn it off.  This will reverse
the voices.  You can also try loading other instrument samples from
those supplied (or elsewhere if you have any -- there are lots available).
[The results are not guaranteed to be pleasant...!]

You can also save the piece in RePlay format (rather than standard
MIDIfile) with the `Save...' button, and relaod this via `Load...'.
(The `SEND' button has no effect here because the relevant `Sequence'
output of the element is unconnected.)

                                                         @{" Read MIDI File " LINK Modules_MIDIFile.GUIDE/read_midi }
                                                         @{" RePlay         " LINK Modules_2.GUIDE/replay }
                                                         @{" MIDI Out       " LINK Modules_1.GUIDE/midi_out }
                                                         @{" Chan Filter    " LINK Modules_2.GUIDE/chan_f }
                                                         @{" MIDI Splitter  " LINK Modules_1.GUIDE/split }
                                                         @{" Instrument     " LINK Modules_1.GUIDE/instr }

@endnode

@node track "Two-Track Recording"

 2-Track
=========

This configuration suggests how to put together a system for laying
down multiple tracks in succession.  It shows how two (or more)
RePlay elements can be started in synchrony; you can play back from
one and record on the other, or have both playing back at once.
(This simple example layout has just the two tracks.  It is straight-
forward to add RePlay elements in parallel if you want more.  Another
way to record more tracks is to merge the prerecorded stuff with your
new `live' input into a new single recorded sequence, which you then use
as the prerecorded track for the next cycle.  You might like to figure
out for yourself how you would change the diagram to allow this.)

The intention is to use the Replay element labelled `Lead-In' to provide
both an audible lead in of your choice and a trigger to start both the
`Track' RePlays together; it does the latter via the `null control message'
it generates at the end of its sequence (see the RePlay docs).


Let's step through how you might typically use it:

    First, we need to record our lead-in...
    Set the `Lead-In' RePlay `Triggered Record' button on. Then, from your
    MIDI keyboard, play a short sequence -- say four beats -- that will
    nicely cue you in to the piece you want to record.  Click the `Record'
    button to stop recording.

    Next, we want to get the timing on the lead-in just right.
    Set the cycle gadget of the same element to `Cont', and start it
    playing.  Adjust the `Delay' slider until the lead-in has a steady
    rhythm.  Switch from `Cont' to `Loop' in the cycle gadget; it will
    stop playing at the end of the sequence and set up for a restart.
    (You might want to save the lead-in to a file for future use at
    this point.  Just click `Save...' and enter a suitable file name
    in the File Requester.)

    Now we're ready to record our first proper track.
    On one of the `track' RePlay elements (`Track A' or `Track B')
    set `Restart' and `Triggered' in the `Record' column.  Click
    `Play' in the `Lead-In' control panel, and use this to cue your
    own keyboard playing on the beat -- exactly at the point it
    triggers the recording RePlay.  (Remember, though, that *any*
    event will trigger the recording, so *don't* start playing too
    soon!)  When you've finished, click the `Record' button to
    toggle it off.  If you aren't satisfied, repeat as many times
    as you need.

    When you have that track to your satisfaction, set that element
    to `Triggered Play' (you may find it useful to have the cycle
    gadget set to `Trig' also, so the conditions are reset automatically
    on each run-through).  Set the *other* track RePlay to `Triggered
    Record' as above, and run the lead-in again, but this time play
    the second part you want to record.

    To hear both parts together, just set both tracks to `Triggered
    Play'.  Start playback either via the lead-in again, or simply
    by hitting a note on your keyboard (or indeed any other event
    such as a program change).  You can save both parts to separate
    files, or, by adding another RePlay to record the merged tracks,
    save both parts as one.

    To illustrate how complete sequences can be passed from one RePlay
    to another, a path has been drawn from the `Sequence' output of
    `Track B' to the input of `Track A' (via a Join).  By clicking on
    the `SEND' button of `Track B' you can transmit it to become the
    new contents of `Track A'.  This is really for demonstration only:
    it would be more useful to pass a merged sequence back, so that
    you could layer on yet another part.  [Build that one yourself!]

Other points to note:

    The `MIDI In' element feeds directly to a `Block Sys Mes' element,
    so that any clocks and so on emitted by your keyboard won't trigger
    any of the RePlays prematurely.

    The `null control message' is separated from the `Lead-In's MIDI
    stream by using a `Msg Filter' set to mark *all* MIDI events, and
    a splitter which therefore diverts the MIDI events but lets the
    control message straight through.  The control message is fed to
    the RePlay inputs for triggering, while the MIDI goes on to `MIDI Out'.

    This simple setup pays no attention to MIDI channels.  For any
    real work, you will almost certainly want to use a ~Set Channel' or
    two to get separate channels (and voices) for each track.

                                                         @{" MIDI In       " LINK Modules_1.GUIDE/midi_in }
                                                         @{" MIDI Out      " LINK Modules_1.GUIDE/midi_out }
                                                         @{" RePlay        " LINK Modules_2.GUIDE/replay }
                                                         @{" Msg Filter    " LINK Modules_1.GUIDE/msg_f }
                                                         @{" MIDI Splitter " LINK Modules_1.GUIDE/split }
                                                         @{" Join Streams  " LINK Modules_1.GUIDE/join }
                                                         @{" Block Sys Mes " LINK Modules_1.GUIDE/block_sys }

@endnode

                                + + + + +
