merging mma-1.1

This commit is contained in:
Matthias Neeracher 2007-04-29 06:47:40 +00:00
parent 52f8c7da38
commit 35300f3344
266 changed files with 34821 additions and 23252 deletions

View File

@ -2,7 +2,7 @@
# alloc.py # alloc.py
""" """
This module is an integeral part of the program This module is an integeral part of the program
MMA - Musical Midi Accompaniment. MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -19,10 +19,10 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
import MMA.patChord import MMA.patChord
import MMA.patWalk import MMA.patWalk
import MMA.patBass import MMA.patBass
@ -30,74 +30,77 @@ import MMA.patDrum
import MMA.patScale import MMA.patScale
import MMA.patArpeggio import MMA.patArpeggio
import MMA.patSolo import MMA.patSolo
import MMA.patAria
import gbl import gbl
from MMA.common import * from MMA.common import *
trkClasses = { trkClasses = {
'BASS' : MMA.patBass.Bass, 'BASS' : MMA.patBass.Bass,
'CHORD' : MMA.patChord.Chord, 'CHORD' : MMA.patChord.Chord,
'ARPEGGIO' : MMA.patArpeggio.Arpeggio, 'ARPEGGIO' : MMA.patArpeggio.Arpeggio,
'SCALE' : MMA.patScale.Scale, 'SCALE' : MMA.patScale.Scale,
'DRUM' : MMA.patDrum.Drum, 'DRUM' : MMA.patDrum.Drum,
'WALK' : MMA.patWalk.Walk, 'WALK' : MMA.patWalk.Walk,
'MELODY' : MMA.patSolo.Melody, 'MELODY' : MMA.patSolo.Melody,
'SOLO' : MMA.patSolo.Solo } 'SOLO' : MMA.patSolo.Solo,
'ARIA' : MMA.patAria.Aria
}
def trackAlloc(name, err): def trackAlloc(name, err):
""" Check existence of track and create if possible. """ Check existence of track and create if possible.
If 'err' is set, the function will 'error out' if If 'err' is set, the function will 'error out' if
it's not possible to create the track. Otherwise, it's not possible to create the track. Otherwise,
it is content to return without creation taking place. it is content to return without creation taking place.
""" """
# If the track already exists, just return # If the track already exists, just return
if name in gbl.tnames:
return
# Get the trackname. Can be just a type, or type-name. if name in gbl.tnames:
return
if '-' in name:
base, ext = name.split('-',1) # Get the trackname. Can be just a type, or type-name.
else:
ext = None if '-' in name:
base = name base, ext = name.split('-',1)
else:
ext = None
base = name
""" See if there is a track class 'base'. If there is, then """ See if there is a track class 'base'. If there is, then
'f' points to the initialization function for the class. 'f' points to the initialization function for the class.
If not, we either error (err==1) or return (err==0). If not, we either error (err==1) or return (err==0).
""" """
if trkClasses.has_key(base): if trkClasses.has_key(base):
f = trkClasses[base] f = trkClasses[base]
else: else:
if err: if err:
error("There is no track class '%s' for trackname '%s'" % (base, name) ) error("There is no track class '%s' for trackname '%s'" % (base, name) )
else: else:
return return
# Now attempt to allocate the track # Now attempt to allocate the track
gbl.tnames[name] = newtk = f(name)
# Set the sequence size of new track gbl.tnames[name] = newtk = f(name)
newtk.setSeqSize()
# Update current grooves to reflect new track. # Set the sequence size of new track
for slot in gbl.settingsGroove.keys():
newtk.saveGroove(slot)
newtk.setSeqSize()
if gbl.debug:
print "Creating new track", name # Update current grooves to reflect new track.
for slot in gbl.settingsGroove.keys():
newtk.saveGroove(slot)
if gbl.debug:
print "Creating new track", name
return
return

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -34,7 +34,7 @@ import MMA.parse
from MMA.common import * from MMA.common import *
grooveDir = {} grooveDir = {}
mmadir = ".mmaDB" # constant, name of the lib database file mmadir = ".mmaDB" # constant, name of the lib database file
fileCount = 0 fileCount = 0
grooveCount = 0 grooveCount = 0
gdDate = None gdDate = None
@ -42,161 +42,160 @@ processedFiles = []
mkGrooveList = [] mkGrooveList = []
def updateGrooveList(n): def updateGrooveList(n):
""" Called from parse when new grooves are defined in a -g. """ """ Called from parse when new grooves are defined in a -g. """
global mkGrooveList global mkGrooveList
mkGrooveList.append(n) mkGrooveList.append(n)
def libUpdate(): def libUpdate():
""" Update the mma library database file(s) with -g or -G option. """ Update the mma library database file(s) with -g or -G option.
This is called from the main program after the initialization This is called from the main program after the initialization
and other option parsing. No RETURN. and other option parsing. No RETURN.
""" """
global fileCount, gdDate, grooveDir, processedfiles global fileCount, gdDate, grooveDir, processedfiles
print "Creating MMA groove directory database(s). Standby..." print "Creating MMA groove directory database(s). Standby..."
""" gbl.libPath points to one main directory tree which should include """ gbl.libPath points to one main directory tree which should include
gbl.autoLib (defaults to 'stdlib'). We create a separate .mmaDB gbl.autoLib (defaults to 'stdlib'). We create a separate .mmaDB
file for each directory found in the main tree. IE. if we have the file for each directory found in the main tree. IE. if we have the
directories stdlib and bvstuff we end up with stdlib/.mmaDB and directories stdlib and bvstuff we end up with stdlib/.mmaDB and
bvstuff/.mmaDB. bvstuff/.mmaDB.
""" """
for d in os.listdir(gbl.libPath): for d in os.listdir(gbl.libPath):
libpath = os.path.join(gbl.libPath, d) libpath = os.path.join(gbl.libPath, d)
if not os.path.isdir(libpath): # skip files, just process directories if not os.path.isdir(libpath): # skip files, just process directories
continue continue
""" Attempt to read existing database """ Attempt to read existing database
There is a flag gbl.makeGrvDefs set to 0, 1, 2 There is a flag gbl.makeGrvDefs set to 0, 1, 2
0 - there was no -g or -G so we're not here 0 - there was no -g or -G so we're not here
1 - -g - read existing database and update 1 - -g - read existing database and update
2 - -G - don't read existing, create new 2 - -G - don't read existing, create new
""" """
grooveDir = {} grooveDir = {}
gdDate = None gdDate = None
if gbl.makeGrvDefs == 1: if gbl.makeGrvDefs == 1:
try: try:
infile = os.path.join(libpath, mmadir) infile = os.path.join(libpath, mmadir)
f=file(infile, "rb") f=file(infile, "rb")
f.readline() # Read/discard comment line f.readline() # Read/discard comment line
grooveDir = pickle.load(f) grooveDir = pickle.load(f)
f.close() f.close()
gdDate = os.path.getmtime(infile) gdDate = os.path.getmtime(infile)
except: except:
pass pass
dolibupdate(libpath, '') dolibupdate(libpath, '')
# Strip out defs of deleted (not found) files. # Strip out defs of deleted (not found) files.
for f in grooveDir.keys(): for f in grooveDir.keys():
if f not in processedFiles: if f not in processedFiles:
print " Deleting: %s" % f print " Deleting: %s" % f
del grooveDir[f] del grooveDir[f]
try: try:
outpath = file(os.path.join(libpath, mmadir), 'wb') outpath = file(os.path.join(libpath, mmadir), 'wb')
except: except:
error("Error creating lib-database file '%s'. CRITICAL!" error("Error creating lib-database file '%s'. CRITICAL!" % libpath)
% libpath)
outpath.write("### mmaDB ... AUTOGENERATED BINARY DATA. " outpath.write("### mmaDB ... AUTOGENERATED BINARY DATA. "
"DO NOT EDIT!!!\n") "DO NOT EDIT!!!\n")
pickle.dump(grooveDir, outpath, pickle.HIGHEST_PROTOCOL ) pickle.dump(grooveDir, outpath, pickle.HIGHEST_PROTOCOL )
outpath.close() outpath.close()
print print
print "Database update complete." print "Database update complete."
print " Files processed: %s" % fileCount print " Files processed: %s" % fileCount
print " Total number of grooves: %s" % grooveCount print " Total number of grooves: %s" % grooveCount
sys.exit(0) sys.exit(0)
def dolibupdate(root, subdir): def dolibupdate(root, subdir):
""" Recursive function to read groove files in a directory. """ """ Recursive function to read groove files in a directory. """
global fileCount, grooveCount, gdDate, grooveDir, processedFiles, mkGrooveList global fileCount, grooveCount, gdDate, grooveDir, processedFiles, mkGrooveList
if subdir == '.': if subdir == '.':
print "Skipping: '.'" print "Skipping: '.'"
return return
if subdir: if subdir:
print " Processing library directory '%s'." % subdir print " Processing library directory '%s'." % subdir
""" Get a list of the files in this directory. If the list """ Get a list of the files in this directory. If the list
includes a file called 'MMAIGNORE' the entire directory includes a file called 'MMAIGNORE' the entire directory
(and subdirs) is ignored. Otherwise, each file in the (and subdirs) is ignored. Otherwise, each file in the
directory ending in 'mma' is parsed for groove defs. directory ending in 'mma' is parsed for groove defs.
""" """
p = os.path.join(root,subdir) p = os.path.join(root,subdir)
dirfiles = os.listdir(p) dirfiles = os.listdir(p)
if "MMAIGNORE" in dirfiles: if "MMAIGNORE" in dirfiles:
print "Skipping: %s" % p print "Skipping: %s" % p
return return
for fn in sorted(dirfiles): for fn in sorted(dirfiles):
# Ignore hidden files and emacs auto-save and dead. # Ignore hidden files and emacs auto-save and dead.
if fn.startswith('.') or fn.startswith('#'): if fn.startswith('.') or fn.startswith('#'):
continue continue
# Create full path name # Create full path name
f=os.path.join(root, subdir, fn) f=os.path.join(root, subdir, fn)
if os.path.isdir(f): if os.path.isdir(f):
dolibupdate(root, os.path.join(subdir,fn)) # recursive! dolibupdate(root, os.path.join(subdir,fn)) # recursive!
elif f.endswith(gbl.ext): elif f.endswith(gbl.ext):
ename = os.path.join(subdir, fn) ename = os.path.join(subdir, fn)
processedFiles.append(ename) processedFiles.append(ename)
if gdDate and grooveDir.has_key(ename) and \ if gdDate and grooveDir.has_key(ename) and \
os.path.getmtime(f) < gdDate: os.path.getmtime(f) < gdDate:
print " Existing: %s" % f print " Existing: %s" % f
grooveCount += len(grooveDir[ename]) grooveCount += len(grooveDir[ename])
continue continue
if grooveDir.has_key(ename): if grooveDir.has_key(ename):
print " Updating: %s" % f print " Updating: %s" % f
else: else:
print " Creating: %s" % f print " Creating: %s" % f
mkGrooveList = [] mkGrooveList = []
gbl.mtrks = {} gbl.mtrks = {}
for c in gbl.midiAssigns.keys(): for c in gbl.midiAssigns.keys():
gbl.midiAssigns[c]=[] gbl.midiAssigns[c]=[]
for a,v in enumerate(gbl.midiAvail): for a,v in enumerate(gbl.midiAvail):
gbl.midiAvail[a]=0 gbl.midiAvail[a]=0
gbl.mtrks[0]=MMA.midi.Mtrk(0) gbl.mtrks[0]=MMA.midi.Mtrk(0)
gbl.tnames = {} gbl.tnames = {}
MMA.parse.parseFile(f) # read current file, grab grooves MMA.parse.parseFile(f) # read current file, grab grooves
fileCount += 1 # just so we can report to user fileCount += 1 # just so we can report to user
grooveCount += len(mkGrooveList) grooveCount += len(mkGrooveList)
grooveDir[ename]=mkGrooveList grooveDir[ename]=mkGrooveList
else: else:
if not f.endswith(mmadir): if not f.endswith(mmadir):
print " Ignoring: %s" % f print " Ignoring: %s" % f
@ -204,52 +203,53 @@ def dolibupdate(root, subdir):
def loadGrooveDir(g): def loadGrooveDir(g):
""" Try to auto-load a groove from the library. """ Try to auto-load a groove from the library.
The compliation of all the MMADIR files is stored in the dict The compliation of all the MMADIR files is stored in the dict
grooveDir{}. grooveDir{}.
Check the main libpath directory for the MMADIR file. The Check the main libpath directory for the MMADIR file. The
names of the files and corresponding grooves are extracted. names of the files and corresponding grooves are extracted.
This is stored in a dictionary with the filename as the key This is stored in a dictionary with the filename as the key
and a list of grooves as the data. and a list of grooves as the data.
""" """
global grooveDir global grooveDir
""" If the global dict grooveDir is empty we first load the MMADIR info. """ If the global dict grooveDir is empty we first load the MMADIR info.
We're assuming that not much goes wrong here...if we don't find We're assuming that not much goes wrong here...if we don't find
the database we set grooveDir{} to a BS value to avoid future the database we set grooveDir{} to a BS value to avoid future
load attempts. The entire load is in a try, which means it either load attempts. The entire load is in a try, which means it either
all works, or not ... all works, or not ...
""" """
if not grooveDir: if not grooveDir:
try: try:
infile = os.path.join(gbl.libPath, gbl.autoLib, mmadir) infile = os.path.join(gbl.libPath, gbl.autoLib, mmadir)
f=file(infile, "rb") f=file(infile, "rb")
f.readline() # Read/discard comment line f.readline() # Read/discard comment line
grooveDir = pickle.load(f) grooveDir = pickle.load(f)
f.close() f.close()
except: except:
grooveDir[0]='' grooveDir[0]=''
""" Search the dict for a match. grooveDir{} is a dictionary """ Search the dict for a match. grooveDir{} is a dictionary
for lists. Each dictionary key is filename (eg: "lib/rhumba.mma") for lists. Each dictionary key is filename (eg: "lib/rhumba.mma")
and the list associated with it is a list of grooves defined and the list associated with it is a list of grooves defined
in that file. Just a matter of stepping though the dict. and in that file. Just a matter of stepping though the dict. and
returning the proper filename. returning the proper filename.
RETURN: Lib-Filename if found RETURN: Lib-Filename if found
None if not found None if not found
""" """
for filename, namelist in grooveDir.items(): for filename, namelist in grooveDir.items():
if g in namelist: if g in namelist:
return filename return filename
return None
return None

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -27,69 +27,69 @@ import copy
from MMA.common import * from MMA.common import *
from MMA.chordtable import _chords from MMA.chordtable import chords
def defChord(ln): def defChord(ln):
""" Add a new chord type to the _chords{} dict. """ """ Add a new chord type to the chords{} dict. """
emsg="DefChord needs NAME (NOTES) (SCALE)" emsg="DefChord needs NAME (NOTES) (SCALE)"
# At this point ln is a list. The first item should be # At this point ln is a list. The first item should be
# the new chord type name. # the new chord type name.
if not len(ln): if not len(ln):
error(emsg) error(emsg)
name = ln.pop(0) name = ln.pop(0)
if name in _chords.keys(): if name in chords.keys():
warning("Redefining chordtype '%s'." % name) warning("Redefining chordtype '%s'" % name)
if '/' in name: if '/' in name:
error("A slash in not permitted in chord type name") error("A slash in not permitted in chord type name")
if '>' in name: if '>' in name:
error("A '>' in not permitted in chord type name") error("A '>' in not permitted in chord type name")
ln=pextract(''.join(ln), '(', ')') ln=pextract(''.join(ln), '(', ')')
if ln[0] or len(ln[1])!=2: if ln[0] or len(ln[1])!=2:
error(emsg) error(emsg)
notes=ln[1][0].split(',') notes=ln[1][0].split(',')
if len(notes) < 2 or len(notes)>8: if len(notes) < 2 or len(notes)>8:
error("There must be 2..8 notes in a chord, not '%s'." % len(note)) error("There must be 2..8 notes in a chord, not '%s'" % len(note))
notes.sort() notes.sort()
for i,v in enumerate(notes): for i,v in enumerate(notes):
v=stoi(v, "Note offsets in chord must be integers, not '%s'." % v) v=stoi(v, "Note offsets in chord must be integers, not '%s'" % v)
if v<0 or v>24: if v<0 or v>24:
error("Note offsets in chord must be 0..24, not '%s'." % v) error("Note offsets in chord must be 0..24, not '%s'" % v)
notes[i]=v notes[i]=v
scale=ln[1][1].split(',') scale=ln[1][1].split(',')
if len(scale) != 7: if len(scale) != 7:
error("There must be 7 offsets in chord scale, not '%s'" % len(scale)) error("There must be 7 offsets in chord scale, not '%s'" % len(scale))
scale.sort() scale.sort()
for i,v in enumerate(scale): for i,v in enumerate(scale):
v=stoi(v, "Scale offsets in chord must be integers, not '%s'." % v) v=stoi(v, "Scale offsets in chord must be integers, not '%s'" % v)
if v<0 or v>24: if v<0 or v>24:
error("Scale offsets in chord must be 0..24, not '%s'." % v) error("Scale offsets in chord must be 0..24, not '%s'" % v)
scale[i]=v scale[i]=v
_chords[name] = ( notes, scale, "User Defined") chords[name] = ( notes, scale, "User Defined")
if gbl.debug: if gbl.debug:
print "ChordType '%s', %s" % (name, _chords[name]) print "ChordType '%s', %s" % (name, chords[name])
def printChord(ln): def printChord(ln):
""" Display the note/scale/def for chord(s). """ """ Display the note/scale/def for chord(s). """
for c in ln: for c in ln:
if not _chords.has_key(c): if not chords.has_key(c):
error("Chord '%s' is unknown" % c) error("Chord '%s' is unknown" % c)
print c, ':', _chords[c][0], _chords[c][1], _chords[c][2] print c, ':', chords[c][0], chords[c][1], chords[c][2]
""" """
@ -100,53 +100,53 @@ that with C as a midpoint we shift left for G/A/B and right for D/E/F.
Should the shifts take in account the current key signature? Should the shifts take in account the current key signature?
""" """
_chordAdjust = { cdAdjust = {
'Gb':-6, 'Gb':-6,
'G' :-5, 'G' :-5,
'G#':-4, 'Ab':-4, 'G#':-4, 'Ab':-4,
'A' :-3, 'A' :-3,
'A#':-2, 'Bb':-2, 'A#':-2, 'Bb':-2,
'B' :-1, 'Cb':-1, 'B' :-1, 'Cb':-1,
'B#': 0, 'C' : 0, 'B#': 0, 'C' : 0,
'C#': 1, 'Db': 1, 'C#': 1, 'Db': 1,
'D' : 2, 'D' : 2,
'D#': 3, 'Eb': 3, 'D#': 3, 'Eb': 3,
'E' : 4, 'Fb': 4, 'E' : 4, 'Fb': 4,
'E#': 5, 'F' : 5, 'E#': 5, 'F' : 5,
'F#': 6 } 'F#': 6 }
def chordAdjust(ln): def chordAdjust(ln):
""" Adjust the chord point up/down one octave. """ """ Adjust the chord point up/down one octave. """
if not ln: if not ln:
error("ChordAdjust: Needs at least one argument.") error("ChordAdjust: Needs at least one argument")
for l in ln: for l in ln:
try: try:
pitch, octave = l.split('=') pitch, octave = l.split('=')
except: except:
error("Each arg must contain an '=', not '%s'." % l) error("Each arg must contain an '=', not '%s'" % l)
if pitch not in _chordAdjust: if pitch not in cdAdjust:
error("ChordAdjust: '%s' is not a valid pitch." % pitch) error("ChordAdjust: '%s' is not a valid pitch" % pitch)
octave = stoi(octave, "ChordAdjust: expecting integer, not '%s'." % octave) octave = stoi(octave, "ChordAdjust: expecting integer, not '%s'" % octave)
p=_chordAdjust[pitch] p=cdAdjust[pitch]
if octave == 0: if octave == 0:
if p < -6: if p < -6:
_chordAdjust[pitch] += 12 cdAdjust[pitch] += 12
elif p > 6: elif p > 6:
_chordAdjust[pitch]-=12 cdAdjust[pitch]-=12
elif octave == -1 and p <= 6 and p >= -6: elif octave == -1 and p <= 6 and p >= -6:
_chordAdjust[pitch] -= 12 cdAdjust[pitch] -= 12
elif octave == 1 and p <= 6 and p >= -6: elif octave == 1 and p <= 6 and p >= -6:
_chordAdjust[pitch] += 12 cdAdjust[pitch] += 12
else: else:
error("ChordAdjust: '%s' is not a valid octave. Use 1, 0 or -1." % octave) error("ChordAdjust: '%s' is not a valid octave. Use 1, 0 or -1" % octave)
@ -155,348 +155,330 @@ def chordAdjust(ln):
############################### ###############################
class ChordNotes: class ChordNotes:
""" The Chord class creates and manipulates chords for MMA. The """ The Chord class creates and manipulates chords for MMA. The
class is initialized with a call with the chord name. Eg: class is initialized with a call with the chord name. Eg:
ch = ChordNotes("Am") ch = ChordNotes("Am")
The following methods and variables are defined: The following methods and variables are defined:
noteList - the notes in the chord as a list. The "Am" noteList - the notes in the chord as a list. The "Am"
would be [9, 12, 16]. would be [9, 12, 16].
noteListLen - length of noteList. noteListLen - length of noteList.
tonic - the tonic of the chord ("Am" would be "A"). tonic - the tonic of the chord ("Am" would be "A").
chordType - the type of chord ("Am" would be "m"). chordType - the type of chord ("Am" would be "m").
rootNote - the root note of the chord ("Am" would be a 9). rootNote - the root note of the chord ("Am" would be a 9).
bnoteList - the original chord notes, bypassing any bnoteList - the original chord notes, bypassing any
invert(), etc. mangling. invert(), etc. mangling.
scaleList - a 7 note list representing a scale similar to scaleList - a 7 note list representing a scale similar to
the chord. the chord.
reset() - resets noteList to the original chord notes. reset() - resets noteList to the original chord notes.
This is useful to restore the original after This is useful to restore the original after
chord note mangling by invert(), etc. without having to chord note mangling by invert(), etc. without having to
create a new chord object. create a new chord object.
invert(n) - Inverts a chord by 'n'. This is done inplace and invert(n) - Inverts a chord by 'n'. This is done inplace and
returns None. 'n' can have any integer value, but -1 and 1 returns None. 'n' can have any integer value, but -1 and 1
are most common. The order of the notes is not changed. Eg: are most common. The order of the notes is not changed. Eg:
ch=Chord('Am') ch=Chord('Am')
ch.noteList == [9, 12, 16] ch.noteList == [9, 12, 16]
ch.invert(1) ch.invert(1)
ch.noteList = [21, 12, 16] ch.noteList = [21, 12, 16]
compress() - Compresses the range of a chord to a single octave. This is compress() - Compresses the range of a chord to a single octave. This is
done inplace and return None. Eg: done inplace and return None. Eg:
ch=Chord("A13") ch=Chord("A13")
ch.noteList == [1, 5, 8, 11, 21] ch.noteList == [1, 5, 8, 11, 21]
ch.compress() ch.compress()
ch.noteList == [1, 5, 8, 11, 10 ] ch.noteList == [1, 5, 8, 11, 10 ]
limit(n) - Limits the range of the chord 'n' notes. Done inplace limit(n) - Limits the range of the chord 'n' notes. Done inplace
and returns None. Eg: and returns None. Eg:
ch=Chord("CM711") ch=Chord("CM711")
ch.noteList == [0, 4, 7, 11, 15, 18] ch.noteList == [0, 4, 7, 11, 15, 18]
ch.limit(4) ch.limit(4)
ch.noteList == [0, 4, 7, 11] ch.noteList == [0, 4, 7, 11]
""" """
################# #################
### Functions ### ### Functions ###
################# #################
def __init__(self, name, line=''): def __init__(self, name, line=''):
""" Create a chord object. Pass the chord name as the only arg. """ Create a chord object. Pass the chord name as the only arg.
NOTE: Chord names ARE case-sensitive! NOTE: Chord names ARE case-sensitive!
The chord NAME at this point is something like 'Cm' or 'A#7'. The chord NAME at this point is something like 'Cm' or 'A#7'.
Split off the tonic and the type. Split off the tonic and the type.
If the 2nd char is '#' or 'b' we have a 2 char tonic, If the 2nd char is '#' or 'b' we have a 2 char tonic,
otherwise, it's the first char only. otherwise, it's the first char only.
A chord can start with a single '+' or '-'. This moves A chord can start with a single '+' or '-'. This moves
the entire chord and scale up/down an octave. the entire chord and scale up/down an octave.
Note pythonic trick: By using ranges like [1:2] we Note pythonic trick: By using ranges like [1:2] we
avoid runtime errors on too-short strings. If a 1 char avoid runtime errors on too-short strings. If a 1 char
string, name[1] is an error; name[1:2] just returns None. string, name[1] is an error; name[1:2] just returns None.
Further note: I have tried to enable caching of the generated Further note: I have tried to enable caching of the generated
chords, but found no speed difference. So, to make life simpler chords, but found no speed difference. So, to make life simpler
I've decided to generate a new object each time. I've decided to generate a new object each time.
""" """
slash = None slash = None
octave = 0 octave = 0
inversion = 0 inversion = 0
if name == 'z': if name == 'z':
self.tonic = self.chordType = None self.tonic = self.chordType = None
self.noteListLen = 0 self.noteListLen = 0
self.notesList = self.bnoteList = [] self.notesList = self.bnoteList = []
return return
if '/' in name and '>' in name: if '/' in name and '>' in name:
error("You cannot use both an inversion and a slash in the same chord.") error("You cannot use both an inversion and a slash in the same chord")
if '>' in name: if '>' in name:
name, inversion = name.split('>', 1) name, inversion = name.split('>', 1)
inversion = stoi(inversion, "Expecting interger after '>'.") inversion = stoi(inversion, "Expecting interger after '>'")
if inversion < -5 or inversion > 5: if inversion < -5 or inversion > 5:
error("Chord inversions limited to -5 to 5 (more seems silly).") error("Chord inversions limited to -5 to 5 (more seems silly)")
if name.startswith('-'): if name.startswith('-'):
name = name[1:] name = name[1:]
octave = -12 octave = -12
if name.startswith('+'): if name.startswith('+'):
name = name[1:] name = name[1:]
octave = 12 octave = 12
name = name.replace('&', 'b') name = name.replace('&', 'b')
# Strip off the slash part of the chord. Use later # Strip off the slash part of the chord. Use later
# to do proper inversion. # to do proper inversion.
if name.find('/') > 0: if name.find('/') > 0:
name, slash = name.split('/') name, slash = name.split('/')
if name[1:2] in ( '#b' ): if name[1:2] in ( '#b' ):
tonic = name[0:2] tonic = name[0:2]
ctype = name[2:] ctype = name[2:]
else: else:
tonic = name[0:1] tonic = name[0:1]
ctype = name[1:] ctype = name[1:]
if not ctype: # If no type, make it a Major if not ctype: # If no type, make it a Major
ctype='M' ctype='M'
try: try:
notes = _chords[ctype][0] notes = chords[ctype][0]
adj = _chordAdjust[tonic] + octave adj = cdAdjust[tonic] + octave
except: except:
error( "Illegal/Unknown chord name: '%s'." % name ) error( "Illegal/Unknown chord name: '%s'" % name )
self.noteList = [ x + adj for x in notes ] self.noteList = [ x + adj for x in notes ]
self.bnoteList = tuple(self.noteList) self.bnoteList = tuple(self.noteList)
self.scaleList = tuple([ x + adj for x in _chords[ctype][1] ]) self.scaleList = tuple([ x + adj for x in chords[ctype][1] ])
self.chordType = ctype self.chordType = ctype
self.tonic = tonic self.tonic = tonic
self.rootNote = self.noteList[0] self.rootNote = self.noteList[0]
self.noteListLen = len(self.noteList) self.noteListLen = len(self.noteList)
# Inversion # Inversion
if inversion: if inversion:
self.invert(inversion) self.invert(inversion)
self.bnoteList = tuple(self.noteList) self.bnoteList = tuple(self.noteList)
# Do inversions if there is a valid slash notation. # Do inversions if there is a valid slash notation.
if slash: if slash:
if not _chordAdjust.has_key(slash): if not cdAdjust.has_key(slash):
error("The note '%s' in the slash chord is unknown." % slash) error("The note '%s' in the slash chord is unknown" % slash)
r=_chordAdjust[slash] # r = -6 to 6 r=cdAdjust[slash] # r = -6 to 6
# If the slash note is in the chord we invert # If the slash note is in the chord we invert
# the chord so the slash note is in root position. # the chord so the slash note is in root position.
c_roted = 0 c_roted = 0
s=self.noteList s=self.noteList
for octave in [0, 12, 24]: for octave in [0, 12, 24]:
if r+octave in s: if r+octave in s:
rot=s.index(r+octave) rot=s.index(r+octave)
for i in range(rot): for i in range(rot):
s.append(s.pop(0)+12) s.append(s.pop(0)+12)
if s[0] >= 12: if s[0] >= 12:
for i,v in enumerate(s): for i,v in enumerate(s):
s[i] = v-12 s[i] = v-12
self.noteList = s self.noteList = s
self.bnoteList = tuple(s) self.bnoteList = tuple(s)
self.rootNote = self.noteList[0] self.rootNote = self.noteList[0]
c_roted = 1 c_roted = 1
break break
s_roted = 0 s_roted = 0
s=list(self.scaleList) s=list(self.scaleList)
for octave in [0, 12, 24]: for octave in [0, 12, 24]:
if r+octave in s: if r+octave in s:
rot=s.index(r+octave) rot=s.index(r+octave)
for i in range(rot): for i in range(rot):
s.append(s.pop(0)+12) s.append(s.pop(0)+12)
if s[0] > 12: if s[0] > 12:
for i,v in enumerate(s): for i,v in enumerate(s):
s[i] = v-12 s[i] = v-12
self.scaleList=tuple(s) self.scaleList=tuple(s)
s_roted = 1 s_roted = 1
break break
if not c_roted and not s_roted: if not c_roted and not s_roted:
warning("The slash chord note '%s' not in " warning("The slash chord note '%s' not in chord or scale" % slash)
"chord or scale." % slash)
elif not c_roted: elif not c_roted:
warning("The slash chord note '%s' not in " warning("The slash chord note '%s' not in chord '%s'" % (slash, name))
"chord '%s'" % (slash, name))
elif not s_roted: # Probably will never happen :) elif not s_roted: # Probably will never happen :)
warning("The slash chord note '%s' not in " warning("The slash chord note '%s' not in scale for the chord '%s'" % (slash, name))
"scale for the chord '%s'" % (slash, name))
def reset(self): def reset(self):
""" Restores notes array to original, undoes mangling. """ """ Restores notes array to original, undoes mangling. """
self.noteList = list(self.bnoteList[:]) self.noteList = list(self.bnoteList[:])
self.noteListLen = len(self.noteList) self.noteListLen = len(self.noteList)
def invert(self, n): def invert(self, n):
""" Apply an inversion to a chord. """ Apply an inversion to a chord.
This does not reorder any notes, which means that the root note of This does not reorder any notes, which means that the root note of
the chord reminds in postion 0. We just find that highest/lowest the chord reminds in postion 0. We just find that highest/lowest
notes in the chord and adjust their octave. notes in the chord and adjust their octave.
NOTE: Done on the existing list of notes. Returns None. NOTE: Done on the existing list of notes. Returns None.
""" """
if n: if n:
c=self.noteList[:] c=self.noteList[:]
while n>0: # Rotate up by adding 12 to lowest note while n>0: # Rotate up by adding 12 to lowest note
n -= 1 n -= 1
c[c.index(min(c))]+=12 c[c.index(min(c))]+=12
while n<0: # Rotate down, subtract 12 from highest note while n<0: # Rotate down, subtract 12 from highest note
n += 1 n += 1
c[c.index(max(c))]-=12 c[c.index(max(c))]-=12
self.noteList = c self.noteList = c
return None return None
def compress(self): def compress(self):
""" Compress a chord to one ocatve. """ Compress a chord to one ocatve.
Get max permitted value. This is the lowest note Get max permitted value. This is the lowest note
plus 12. Note: use the unmodifed value bnoteList! plus 12. Note: use the unmodifed value bnoteList!
""" """
mx = self.bnoteList[0] + 12 mx = self.bnoteList[0] + 12
c=[] c=[]
for i, n in enumerate(self.noteList): for i, n in enumerate(self.noteList):
if n > mx: if n > mx:
n -= 12 n -= 12
c.append(n) c.append(n)
self.noteList = c self.noteList = c
return None return None
def limit(self, n): def limit(self, n):
""" Limit the number of notes in a chord. """ """ Limit the number of notes in a chord. """
if n < self.noteListLen: if n < self.noteListLen:
self.noteList = self.noteList[:n] self.noteList = self.noteList[:n]
self.noteListLen = len(self.noteList) self.noteListLen = len(self.noteList)
return None return None
def center1(self, lastChord): def center1(self, lastChord):
""" Descriptive comment needed here!!!! """ """ Descriptive comment needed here!!!! """
def minDistToLast(x, lastChord): def minDistToLast(x, lastChord):
dist=99 dist=99
for j in range(len(lastChord)): for j in range(len(lastChord)):
if abs(x-lastChord[j])<abs(dist): if abs(x-lastChord[j])<abs(dist):
dist=x-lastChord[j] dist=x-lastChord[j]
return dist return dist
def sign(x): def sign(x):
if (x>0): if (x>0):
return 1 return 1
elif (x<0): elif (x<0):
return -1 return -1
else: else:
return 0 return 0
# Only change what needs to be changed compared to the last chord # Only change what needs to be changed compared to the last chord
# (leave notes where they are if they are in the new chord as well). # (leave notes where they are if they are in the new chord as well).
if lastChord: if lastChord:
ch=self.noteList ch=self.noteList
for i in range(len(ch)): for i in range(len(ch)):
# minimize distance to last chord # minimize distance to last chord
oldDist = minDistToLast(ch[i], lastChord) oldDist = minDistToLast(ch[i], lastChord)
while abs(minDistToLast(ch[i] - sign(oldDist)*12, while abs(minDistToLast(ch[i] - sign(oldDist)*12,
lastChord)) < abs(oldDist): lastChord)) < abs(oldDist):
ch[i] -= 12* sign(oldDist) ch[i] -= 12* sign(oldDist)
oldDist = minDistToLast(ch[i], lastChord) oldDist = minDistToLast(ch[i], lastChord)
return None return None
def center2(self, centerNote, noteRange): def center2(self, centerNote, noteRange):
""" Need COMMENT """ """ Need COMMENT """
ch=self.noteList ch=self.noteList
for i,v in enumerate(ch): for i,v in enumerate(ch):
dist = v - centerNote dist = v - centerNote
if dist < -noteRange: if dist < -noteRange:
ch[i] = v + 12 * ( abs(dist) / 12+1 ) ch[i] = v + 12 * ( abs(dist) / 12+1 )
if dist > noteRange: if dist > noteRange:
ch[i] = v - 12 * ( abs(dist) / 12+1 ) ch[i] = v - 12 * ( abs(dist) / 12+1 )
return None return None
######## End of Chord class ##### ######## End of Chord class #####
def docs():
""" Print out a list of chord names and docs in LaTex. """
import copy
# Just in case someone else wants to use _chords, work on a copy
chords=copy.copy(_chords)
for n in sorted(chords.keys()):
nm=n.replace("#", '$\\sharp$')
nm=nm.replace('b', '$\\flat$')
print "\\insline{%s}{%s}" % (nm, chords[n][2])

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
@ -53,222 +53,348 @@ A = Bbb= 9
As = Bb = 10 As = Bb = 10
B = Cb = 11 B = Cb = 11
_chords = { chords = {
'M': ((C, E, G ), 'M': ((C, E, G ),
(C, D, E, F, G, A, B), (C, D, E, F, G, A, B),
"Major triad. This is the default and is used in " "Major triad. This is the default and is used in "
"the absense of any other chord type specification."), "the absense of any other chord type specification."),
'm': ((C, Eb, G ), '(b5)': ((C, E, Gb ),
(C, D, Eb, F, G, Ab, Bb), (C, D, E, F, Gb, A, B),
"Minor triad."), "Major triad with flat 5th."),
'mb5': ((C, Eb, Gb ), 'add9': ((C, E, G, D+12),
(C, D, Eb, F, Gb, Ab, Bb), (C, D, E, F, G, A, D+12),
"Minor triad with flat 5th."), "Major chord plus 9th (no 7th.)"),
'm#5': ((C, Eb, Gs ), 'm': ((C, Eb, G ),
(C, D, Eb, F, Gs, Ab, Bb), (C, D, Eb, F, G, Ab, Bb),
"Major triad with augmented 5th."), "Minor triad."),
'm6': ((C, Eb, G, A ), 'mb5': ((C, Eb, Gb ),
(C, D, Eb, F, G, A, Bb), (C, D, Eb, F, Gb, Ab, Bb),
"Minor 6th."), "Minor triad with flat 5th (aka dim)."),
'm6(add9)': ((C, Eb, G, D+12, A+12), 'm#5': ((C, Eb, Gs ),
(C, D, Eb, F, G, A, B), (C, D, Eb, F, Gs, Ab, Bb),
"Minor 6th with added 9th. This is sometimes notated as a slash chord " "Minor triad with augmented 5th."),
"in the form ``m6/9''." ),
'm7': ((C, Eb, G, Bb ), 'm6': ((C, Eb, G, A ),
(C, D, Eb, F, G, Ab, Bb), (C, D, Eb, F, G, A, Bb),
"Minor 7th."), "Minor 6th (flat 3rd plus a 6th)."),
'mM7': ((C, Eb, G, B ), 'm6(add9)': ((C, Eb, G, D+12, A+12),
(C, D, Eb, F, G, Ab, B), (C, D, Eb, F, G, A, Bb),
"Minor Triad plus Major 7th. You will also see this printed " "Minor 6th with added 9th. This is sometimes notated as a slash chord "
"as ``m(maj7)'', ``m+7'', ``min(maj7)'' and ``min$\sharp$7'' " "in the form ``m6/9''." ),
"(which \mma\ accepts); as well as the \mma\ \emph{invalid} "
"forms: ``-($\Delta$7)'', and ``min$\\natural$7''."),
'm7b5': ((C, Eb, Gb, Bb ), 'm7': ((C, Eb, G, Bb ),
(C, D, Eb, F, Gb, Ab, Bb), (C, D, Eb, F, G, Ab, Bb),
"Minor 7th, flat 5 (aka 1/2 diminished). "), "Minor 7th (flat 3rd plus dominant 7th)."),
'm7b9': ((C, Eb, G, Bb, Db+12 ), 'mM7': ((C, Eb, G, B ),
(C, Db, Eb, F, G, Ab, Bb), (C, D, Eb, F, G, Ab, B),
"Minor 7th with added flat 9th."), "Minor Triad plus Major 7th. You will also see this printed "
"as ``m(maj7)'', ``m+7'', ``min(maj7)'' and ``min$\sharp$7'' "
"(which \mma\ accepts); as well as the \mma\ \emph{invalid} "
"forms: ``-($\Delta$7)'', and ``min$\\natural$7''."),
'7': ((C, E, G, Bb ), 'm+7b9': ((C, Eb, Gs, Bb, Db+12),
(C, D, E, F, G, A, Bb), (C, Db, Eb, F, Gs, Ab, Bb),
"Dominant 7th."), "Augmented minor 7 plus flat 9th."),
'7#5': ((C, E, Gs, Bb ), 'm+7#9': ((C, Eb, Gs, Bb, Ds+12),
(C, D, E, F, Gs, A, Bb), (C, Ds, Eb, F, Gs, Ab, Bb),
"7th, sharp 5."), "Augmented minor 7 plus sharp 9th."),
'mM7(add9)': ((C, Eb, G, B, D+12),
(C, D, Eb, F, G, Ab, B),
"Minor Triad plus Major 7th and 9th."),
'7b5': ((C, E, Gb, Bb ), 'm7b5': ((C, Eb, Gb, Bb ),
(C, D, E, F, Gb, A, Bb), (C, D, Eb, F, Gb, Ab, Bb),
"7th, flat 5."), "Minor 7th, flat 5 (aka 1/2 diminished). "),
'dim7': ((C, Eb, Gb, Bbb ), 'm7b9': ((C, Eb, G, Bb, Db+12 ),
(C, D, Eb, F, Gb, Ab, Bbb ), # missing 8th note (C, Db, Eb, F, G, Ab, Bb),
"Diminished seventh."), "Minor 7th with added flat 9th."),
'aug': ((C, E, Gs ), 'm7#9': ((C, Eb, G, Bb, Ds+12 ),
(C, D, E, F, Gs, A, B ), (C, Ds, Eb, F, G, Ab, Bb),
"Augmented triad."), "Minor 7th with added sharp 9th."),
'6': ((C, E, G, A ), '7': ((C, E, G, Bb ),
(C, D, E, F, G, A, B), (C, D, E, F, G, A, Bb),
"Major tiad with added 6th."), "7th."),
'6(add9)': ((C, E, G, D+12, A+12), '7b5': ((C, E, Gb, Bb ),
(C, D, E, F, G, A, B), (C, D, E, F, Gb, A, Bb),
"6th with added 9th. This is sometimes notated as a slash chord " "7th, flat 5."),
"in the form ``6/9''."),
'M7': ((C, E, G, B), 'dim7': ((C, Eb, Gb, Bbb ),
(C, D, E, F, G, A, B), (C, D, Eb, F, Gb, Ab, Bbb ), # missing 8th note
"Major 7th."), "Diminished seventh."),
'dim7(addM7)': ((C, Eb, Gb, A, B),
(C, D, Eb, F, Gb, A, B),
"Diminished tirad with added Major 7th."),
'M7#5': ((C, E, Gs, B), 'aug': ((C, E, Gs ),
(C, D, E, F, Gs, A, B), (C, D, E, F, Gs, A, B ),
"Major 7th with sharp 5th."), "Augmented triad."),
'M7b5': ((C, E, Gb, B ), '6': ((C, E, G, A ),
(C, D, E, F, Gb, A, B ), (C, D, E, F, G, A, B),
"Major 7th with a flat 5th."), "Major tiad with added 6th."),
'9': ((C, E, G, Bb, D+12 ), '6(add9)': ((C, E, G, D+12, A+12),
(C, D, E, F, G, A, Bb), (C, D, E, F, G, A, B),
"Dominant 7th plus 9th."), "6th with added 9th. This is sometimes notated as a slash chord "
"in the form ``6/9''."),
'sus9': ((C, E, G, D+12), 'M7': ((C, E, G, B),
(C, D, E, F, G, A, D+12), (C, D, E, F, G, A, B),
"Dominant 7th plus 9th, omit 7th."), "Major 7th."),
'9b5': ((C, E, Gb, Bb, D+12 ), 'M7#5': ((C, E, Gs, B),
(C, D, E, F, Gb, A, Bb), (C, D, E, F, Gs, A, B),
"Dominant 7th plus 9th with flat 5th."), "Major 7th with sharp 5th."),
'm9': ((C, Eb, G, Bb, D+12 ), 'M7b5': ((C, E, Gb, B ),
(C, D, Eb, F, G, Ab, Bb), (C, D, E, F, Gb, A, B ),
"Minor triad plus 7th and 9th."), "Major 7th with a flat 5th."),
'm9b5': ((C, Eb, Gb, Bb, D+12 ), '9': ((C, E, G, Bb, D+12 ),
(C, D, Eb, F, Gb, Ab, Bb), (C, D, E, F, G, A, Bb),
"Minor triad, flat 5, plus 7th and 9th."), "7th plus 9th."),
'm(sus9)':((C, Eb, G, D+12 ),
(C, D, Eb, F, G, Ab, D+12),
"Minor triad plus 9th (no 7th)."),
'M9': ((C, E, G, B, D+12 ), '9b5': ((C, E, Gb, Bb, D+12 ),
(C, D, E, F, G, A, B), (C, D, E, F, Gb, A, Bb),
"Major 7th plus 9th."), "7th plus 9th with flat 5th."),
'7b9': ((C, E, G, Bb, Db+12 ), 'm9': ((C, Eb, G, Bb, D+12 ),
(C, Db, E, F, G, A, Bb), (C, D, Eb, F, G, Ab, Bb),
"Dominant 7th with flat 9th."), "Minor triad plus 7th and 9th."),
'7#9': ((C, E, G, Bb, Ds+12 ), 'm7b5b9': ((C, Eb, Gb, Bb, Db+12),
(C, Ds, E, F, G, A, Bb), (C, Db, Eb, F, Gb, Ab, Bb),
"Dominant 7th with sharp 9th."), "Minor 7th with flat 5th and flat 9th."),
'7b5b9':((C, E, Gb, Bb, Db+12 ), 'm9b5': ((C, Eb, Gb, Bb, D+12 ),
(C, Db, E, F, Gb, A, Bb), (C, D, Eb, F, Gb, Ab, Bb),
"Dominant 7th with flat 5th and flat 9th."), "Minor triad, flat 5, plus 7th and 9th."),
'7b5#9':((C, E, Gb, Bb, Ds+12 ), 'm(sus9)':((C, Eb, G, D+12 ),
(C, Ds, E, F, Gb, A, Bb), (C, D, Eb, F, G, Ab, D+12),
"Dominant 7th with flat 5th and sharp 9th."), "Minor triad plus 9th (no 7th)."),
'7#5#9':((C, E, Gs, Bb, Ds+12 ), 'M9': ((C, E, G, B, D+12 ),
(C, Ds, E, F, Gs, A, Bb), (C, D, E, F, G, A, B),
"Dominant 7th with sharp 5th and sharp 9th."), "Major 7th plus 9th."),
'7#5b9':((C, E, Gs, Bb, Db+12 ), 'M9#11': ((C, E, G, B, D+12, Fs+12),
(C, Db, E, F, Gs, A, Bb), (C, D, E, Fs, G, A, B),
"Dominant 7th with sharp 5th and flat 9th."), "Major 9th plus sharp 11th."),
'aug7': ((C, E, Gs, Bb ), '7b9': ((C, E, G, Bb, Db+12 ),
(C, D, E, F, Gs, A, Bb), (C, Db, E, F, G, A, Bb),
"An augmented chord (raised 5th) with a dominant 7th."), "7th with flat 9th."),
'aug7b9':((C, E, Gs, Bb, Db+12 ), '7#9': ((C, E, G, Bb, Ds+12 ),
(C, Db, E, F, Gs, A, Bb), (C, Ds, E, F, G, A, Bb),
"Augmented 7th with flat 5th and sharp 9th."), "7th with sharp 9th."),
'11': ((C, E, G, Bb, D+12, F+12 ), '7#9b13': ((C, E, G, Bb, Ds+12, Ab+12 ),
(C, D, E, F, G, A, Bb), (C, Ds, E, F, G, Ab, Bb),
"9th chord plus 11th."), "7th with sharp 9th and flat 13th."),
'm11': ((C, Eb, G, Bb, D+12, F+12 ), '7b5b9':((C, E, Gb, Bb, Db+12 ),
(C, D, Eb, F, G, Ab, Bb), (C, Db, E, F, Gb, A, Bb),
"9th with minor 3rd, plus 11th."), "7th with flat 5th and flat 9th."),
'11b9': ((C, E, G, Bb, Db+12, F+12 ), '7b5#9':((C, E, Gb, Bb, Ds+12 ),
(C, Db, E, F, G, A, Bb), (C, Ds, E, F, Gb, A, Bb),
"9th chord plus flat 11th."), "7th with flat 5th and sharp 9th."),
'9#5': ((C, E, Gs, Bb, D+12 ), '7#5#9':((C, E, Gs, Bb, Ds+12 ),
(C, D, E, F, Gs, A, Bb), (C, Ds, E, F, Gs, A, Bb),
"Dominant 7th plus 9th with sharp 5th."), "7th with sharp 5th and sharp 9th."),
'9#11': ((C, E, G, Bb, D+12, Fs+12 ),
(C, D, E, Fs, G, A, Bb), 'aug7': ((C, E, Gs, Bb ),
"Dominant 7th plus 9th and sharp 11th."), (C, D, E, F, Gs, A, Bb),
"An augmented chord (raised 5th) with a dominant 7th."),
'7#9#11':((C, E, G, Bb, Ds+12, Fs+12 ), 'aug7b9':((C, E, Gs, Bb, Db+12 ),
(C, Ds, E, Fs, G, A, Bb), (C, Db, E, F, Gs, A, Bb),
"Dominant 7th plus sharp 9th and sharp 11th."), "An augmented chord (raised 5th) with a dominant 7th and flat 9th."),
'aug7#9':((C, E, Gs, Bb, Ds+12 ),
(C, Ds, E, F, Gs, A, Bb),
"An augmented chord (raised 5th) with a dominant 7th and sharp 9th."),
'M7#11':((C, E, G, B, D+12, Fs+12 ), 'aug9M7':((C, E, Gs, B, D+12 ),
(C, D, E, Fs, G, A, B), (C, D, E, F, Gs, A, B),
"Major 7th plus 9th and sharp 11th."), "An augmented chord (raised 5th) with a major 7th and 9th."),
# Sus chords. Not sure what to do with the associated scales. For '+7b9#11': ((C, E, Gs, Bb, Db+12, Fs+12),
# now just duplicating the 2nd or 3rd in the scale seems to make sense. (C, Db, E, Fs, G, A, Bb),
"Augmented 7th with flat 9th and sharp 11th."),
'sus4': ((C, F, G ), 'm+7b9#11': ((C, Eb, Gs, Bb, Db+12, Fs+12),
(C, D, F, F, G, A, B), (C, Db, Eb, Fs, Gs, A, Bb),
"Suspended 4th, major triad with 3rd raised half tone."), "Augmented minor 7th with flat 9th and sharp 11th."),
'7sus': ((C, F, G, Bb ), '11': ((C, C, G, Bb, D+12, F+12 ),
(C, D, F, F, G, A, Bb), (C, D, E, F, G, A, Bb),
"7th with suspended 4th, dominant 7th with 3rd " "9th chord plus 11th (3rd not voiced)."),
"raised half tone."),
'sus2': ((C, D, G ), 'm11': ((C, Eb, G, Bb, D+12, F+12 ),
(C, D, D, F, G, A, B), (C, D, Eb, F, G, Ab, Bb),
"Suspended 2nd, major triad with major 2nd above " "9th with minor 3rd, plus 11th."),
"root substituted for 3rd."),
'7sus2':((C, D, G, Bb ), 'm7(add11)': ((C, Eb, G, Bb, F+12 ),
(C, D, D, F, G, A, Bb), (C, D, Eb, F, G, Ab, Bb),
"A sus2 with dominant 7th added."), "Minor 7th plus 11th."),
# these two chords should probably NOT have the 5th included, 'm9#11': ((C, Eb, G, Bb, D+12, Fs+12),
# but since a number of voicings depend on the 5th being (C, D, Eb, Fs, G, A, Bb),
# the third note of the chord, they're here. "Minor 7th plus 9th and sharp 11th."),
'13': ((C, E, G, Bb, A+12), 'm7b9#11': ((C, Eb, G, Bb, Db+12, Fs+12),
(C, D, E, F, G, A, Bb), (C, Db, Eb, Fs, G, A, Bb),
"Dominant 7th (including 5th) plus 13th."), "Minor 7th plus flat 9th and sharp 11th."),
'M13': ((C, E, G, B, A+12), 'm7(add13)': ((C, Eb, G, Bb, A+12 ),
(C, D, E, F, G, A, B), (C, D, Eb, F, G, A, Bb),
"Major 7th (including 5th) plus 13th."), "Minor 7th plus 13th."),
# Because some patterns assume that the 3rd note in a chord is a 5th, '11b9': ((C, E, G, Bb, Db+12, F+12 ),
# or a varient, we duplicate the root into the position of the 3rd ... and (C, Db, E, F, G, A, Bb),
# to make the sound even we duplicate the 5th into the 4th position as well. "7th chord plus flat 9th and 11th."),
'5': ((C, C, G, G ), '9#5': ((C, E, Gs, Bb, D+12 ),
(C, D, E, F, G, A, B), (C, D, E, F, Gs, A, Bb),
"Altered Fifth or Power Chord; root and 5th only."), "7th plus 9th with sharp 5th (same as aug9)."),
'9#11': ((C, E, G, Bb, D+12, Fs+12 ),
(C, D, E, Fs, G, A, Bb),
"7th plus 9th and sharp 11th."),
'7#9#11':((C, E, G, Bb, Ds+12, Fs+12 ),
(C, Ds, E, Fs, G, A, Bb),
"7th plus sharp 9th and sharp 11th."),
'7b9#11': ((C, E, G, Bb, Db+12, Fs+12 ),
(C, Db, E, Fs, G, A, Bb),
"7th plus flat 9th and sharp 11th."),
'7#11':((C, E, G, Bb, Fs+12 ),
(C, D, E, Fs, G, A, Bb),
"7th plus sharp 11th (9th omitted)."),
'M7#11':((C, E, G, B, Fs+12 ),
(C, D, E, Fs, G, A, B),
"Major 7th plus sharp 11th (9th omitted)."),
'm11b5': ((C, Eb, Gb, Bb, D+12, F+12),
(C, D, Eb, F, Gb, A, Bb),
"Minor 7th with flat 5th plus 11th."),
# Sus chords. Not sure what to do with the associated scales. For
# now just duplicating the 2nd or 3rd in the scale seems to make sense.
'sus4': ((C, F, G ),
(C, D, F, F, G, A, B),
"Suspended 4th, major triad with the 3rd raised half tone."),
'7sus': ((C, F, G, Bb ),
(C, D, F, F, G, A, Bb),
"7th with suspended 4th, dominant 7th with 3rd "
"raised half tone."),
'7susb9': ((C, F, G, Bb, Db+12),
(C, Db, F, F, G, A, Bb),
"7th with suspended 4th and flat 9th."),
'sus2': ((C, D, G ),
(C, D, D, F, G, A, B),
"Suspended 2nd, major triad with the major 2nd above the "
"root substituted for 3rd."),
'7sus2':((C, D, G, Bb ),
(C, D, D, F, G, A, Bb),
"A sus2 with dominant 7th added."),
'sus9': ((C, F, G, Bb, D+12),
(C, D, F, F, G, A, Bb),
"7sus plus 9th."),
'13sus': ((C, F, G, Bb, D+12, A+12),
(C, D, F, F, G, A, Bb),
"7sus, plus 9th and 13th"),
'13susb9': ((C, F, G, Bb, Db+12, A+12),
(C, Db, F, F, G, A, Bb),
"7sus, plus flat 9th and 13th"),
# these chords should probably NOT have the 5th included,
# but since a number of voicings depend on the 5th being
# the third note of the chord, they're here.
'13': ((C, E, G, Bb, A+12),
(C, D, E, F, G, A, Bb),
"7th (including 5th) plus 13th (the 9th and 11th are not voiced)."),
'13b5': ((C, E, Gb, Bb, A+12),
(C, D, E, F, Gb, A, Bb),
"7th with flat 5th, plus 13th (the 9th and 11th are not voiced)."),
'13#9': ((C, E, G, Bb, Ds+12, A+12),
(C, Ds, E, F, G, A, Bb),
"7th (including 5th) plus 13th and sharp 9th (11th not voiced)."),
'13b9': ((C, E, G, Bb, Db+12, A+12),
(C, Db, E, F, G, A, Bb),
"7th (including 5th) plus 13th and flat 9th (11th not voiced)."),
'M13': ((C, E, G, B, A+12),
(C, D, E, F, G, A, B),
"Major 7th (including 5th) plus 13th (9th and 11th not voiced)."),
'm13': ((C, Eb, G, Bb, A+12),
(C, D, Eb, F, G, A, Bb),
"Minor 7th (including 5th) plus 13th (9th and 11th not voiced)."),
'13#11': ((C, E, G, Bb, Fs+12, A+12),
(C, D, E, Fs, G, A, Bb),
"7th plus sharp 11th and 13th (9th not voiced)."),
'M13#11': ((C, E, G, B, Fs+12, A+12),
(C, D, E, Fs, G, A, B),
"Major 7th plus sharp 11th and 13th (9th not voiced)."),
# Because some patterns assume that the 3rd note in a chord is a 5th,
# or a varient, we duplicate the root into the position of the 3rd ... and
# to make the sound even we duplicate the 5th into the 4th position as well.
'5': ((C, C, G, G ),
(C, D, E, F, G, A, B),
"Altered Fifth or Power Chord; root and 5th only."),
'omit3add9': ((C, C, G, D+12),
(C, D, E, F, G, A, Bb),
"Triad: root, 5th and 9th."),
'7omit3': ((C, C, G, Bb),
(C, D, E, F, G, A, Bb),
"7th with unvoiced 3rd."),
'm7omit5': ((C, Eb, Bb),
(C, D, Eb, F, G, A, Bb),
"Minor 7th with unvoiced 5th."),
} }
@ -278,44 +404,58 @@ the original.
""" """
aliases = ( aliases = (
('aug9', '9#5' , ''), ('aug9', '9#5', ''),
('69', '6(add9)', ''), ('+9', '9#5', ''),
('m69', 'm6(add9)', ''), ('+9M7', 'aug9M7', ''),
('9+5', '9#5' , ''), ('+M7', 'M7#5', ''),
('m+5', 'm#5' , ''), ('m(add9)', 'm(sus9)', ''),
('M6', '6' , ''), ('69', '6(add9)', ''),
('m7-5', 'm7b5' , ''), ('m69', 'm6(add9)', ''),
('+', 'aug' , ''), ('m(b5)', 'mb5', ''),
('+7', 'aug7' , ''), ('m7(b9)', 'm7b9', ''),
('#5', 'aug' , ''), ('m7(#9)', 'm7#9', ''),
('7-9', '7b9' , ''), ('9+5', '9#5', ''),
('7+9', '7#9' , ''), ('m+5', 'm#5', ''),
('maj7', 'M7' , ''), ('M6', '6', ''),
('M7-5', 'M7b5' , ''), ('m7-5', 'm7b5', ''),
('M7+5', 'M7#5' , ''), ('m7(omit5)','m7omit5', ''),
('7alt', '7b5b9', ''), ('+', 'aug', ''),
('7sus4', '7sus' , ''), ('+7', 'aug7', ''),
('7#11', '9#11' , ''), ('7(omit3)', '7omit3', ''),
('7+', 'aug7' , ''), ('#5', 'aug', ''),
('7+5', '7#5' , ''), ('7#5b9', 'aug7b9', ''),
('7-5', '7b5' , ''), ('7-9', '7b9', ''),
('sus', 'sus4' , ''), ('7+9', '7#9', ''),
('m(maj7)', 'mM7' , ''), ('maj7', 'M7', ''),
('m+7', 'mM7' , ''), ('M7-5', 'M7b5', ''),
('min(maj7)','mM7' , ''), ('M7+5', 'M7#5', ''),
('min#7', 'mM7' , ''), ('M7(add13)','13b9', ''),
('m#7', 'mM7' , ''), ('7alt', '7b5b9', ''),
('dim', 'dim7' , 'A dim7, not a triad!'), ('7sus4', '7sus', ''),
('9sus', 'sus9' , ''), ('7+', 'aug7', ''),
('9-5', '9b5' , ''), ('7#5', 'aug7', ''),
('dim3', 'mb5' , 'Diminished triad (non-standard notation).') ('7+5', 'aug7', ''),
) ('7-5', '7b5', ''),
('sus', 'sus4', ''),
('maj9', 'M9', ''),
('maj13', 'M13', ''),
('m(maj7)', 'mM7', ''),
('m+7', 'mM7', ''),
('min(maj7)','mM7', ''),
('min#7', 'mM7', ''),
('m#7', 'mM7', ''),
('dim', 'dim7', 'A dim7, not a triad!'),
('9sus', 'sus9', ''),
('9-5', '9b5', ''),
('dim3', 'mb5', 'Diminished triad (non-standard notation).'),
('omit3(add9)','omit3add9', '')
)
for a,b,d in aliases: for a,b,d in aliases:
n=_chords[b][0] n=chords[b][0]
s=_chords[b][1] s=chords[b][1]
if not d: if not d:
d=_chords[b][2] d=chords[b][2]
_chords[a] = (n, s, d) chords[a] = (n, s, d)

View File

@ -19,13 +19,13 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
These are a collection of miscellaneous routines used in various These are a collection of miscellaneous routines used in various
parts of MMA. It is safe to load the whole works with: parts of MMA. It is safe to load the whole works with:
from MMA.common import * from MMA.common import *
without side effects (yeah, right). without side effects (yeah, right).
@ -38,136 +38,136 @@ import gbl
class struct: class struct:
pass pass
def error(msg): def error(msg):
""" Print an error message and exit. """ Print an error message and exit.
If the global line number is >=0 then print the line number If the global line number is >=0 then print the line number
as well. as well.
""" """
ln = "" ln = ""
if gbl.lineno >= 0: if gbl.lineno >= 0:
ln += "<Line %d>" % gbl.lineno ln += "<Line %d>" % gbl.lineno
if gbl.inpath: if gbl.inpath:
ln += "<File:%s>" % gbl.inpath.fname ln += "<File:%s>" % gbl.inpath.fname
if ln: if ln:
ln += '\n' ln += '\n'
print "ERROR:%s %s" % (ln, msg) print "ERROR:%s %s" % (ln, msg)
sys.exit(1) sys.exit(1)
def warning(msg): def warning(msg):
""" Print warning message and return. """ """ Print warning message and return. """
if gbl.noWarn: if gbl.noWarn:
return return
ln = "" ln = ""
if gbl.lineno >= 0: if gbl.lineno >= 0:
ln = "<Line %d>" % gbl.lineno ln = "<Line %d>" % gbl.lineno
if gbl.inpath: if gbl.inpath:
ln += "<File:%s>" % gbl.inpath.fname ln += "<File:%s>" % gbl.inpath.fname
print "Warning:%s\n %s" % (ln, msg) print "Warning:%s\n %s" % (ln, msg)
def getOffset(ticks, ran=None): def getOffset(ticks, ran=None):
""" Calculate a midi offset into a song. """ Calculate a midi offset into a song.
ticks == offset into the current bar. ticks == offset into the current bar.
ran == random adjustment from RTIME ran == random adjustment from RTIME
When calculating the random factor the test ensures When calculating the random factor the test ensures
that a note never starts before the start of the bar. that a note never starts before the start of the bar.
This is important ... voice changes, etc. will be This is important ... voice changes, etc. will be
buggered if we put the voice change after the first buggered if we put the voice change after the first
note-on event. note-on event.
""" """
p = gbl.tickOffset + int(ticks) # int() cast is important! p = gbl.tickOffset + int(ticks) # int() cast is important!
if ran: if ran:
r = randrange( -ran, ran+1 ) r = randrange( -ran, ran+1 )
if ticks == 0 and r < 0: if ticks == 0 and r < 0:
r=0 r=0
p+=r p+=r
return p return p
def stoi(s, errmsg=None): def stoi(s, errmsg=None):
""" string to integer. """ """ string to integer. """
try: try:
return int(s, 0) return int(s, 0)
except: except:
if errmsg: if errmsg:
error(errmsg) error(errmsg)
else: else:
error("Expecting integer value, not %s" % s) error("Expecting integer value, not %s" % s)
def stof(s, errmsg=None): def stof(s, errmsg=None):
""" String to floating point. """ """ String to floating point. """
try: try:
return float(s) return float(s)
except: except:
if errmsg: if errmsg:
error(errmsg) error(errmsg)
else: else:
error("Expecting a value, not %s" % s) error("Expecting a value, not %s" % s)
def printList(l): def printList(l):
""" Print each item in a list. Works for numeric and string.""" """ Print each item in a list. Works for numeric and string."""
for a in l: for a in l:
print a, print a,
print print
def pextract(s, open, close, onlyone=None): def pextract(s, open, close, onlyone=None):
""" Extract a parenthesized set of substrings. """ Extract a parenthesized set of substrings.
s - original string s - original string
open - substring start tag \ can be multiple character open - substring start tag \ can be multiple character
close - substring end tag / strings (ie. "<<" or "-->") close - substring end tag / strings (ie. "<<" or "-->")
onlyone - optional, if set only the first set is extracted onlyone - optional, if set only the first set is extracted
returns ( original sans subs, [subs, ...] ) returns ( original sans subs, [subs, ...] )
eg: pextract( "x{123}{666}y", '{', '}' ) eg: pextract( "x{123}{666}y", '{', '}' )
Returns: ( 'xy', [ '123', '666' ] ) Returns: ( 'xy', [ '123', '666' ] )
""" """
subs =[] subs =[]
while 1: while 1:
lstart = s.find(open) lstart = s.find(open)
lend = s.find(close) lend = s.find(close)
if lstart>-1 and lstart < lend: if lstart>-1 and lstart < lend:
subs.append( s[lstart+len(open):lend].strip() ) subs.append( s[lstart+len(open):lend].strip() )
s = s[:lstart] + s[lend+len(close):] s = s[:lstart] + s[lend+len(close):]
if onlyone: if onlyone:
break break
else: else:
break break
return s.strip(), subs return s.strip(), subs

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -32,47 +32,47 @@ import MMA.midiC
def docDrumNames(order): def docDrumNames(order):
""" Print LaTex table of drum names. """ """ Print LaTex table of drum names. """
notenames = ['E\\flat', 'E', 'F', 'G\\flat', 'G', 'A\\flat', notenames = ['E\\flat', 'E', 'F', 'G\\flat', 'G', 'A\\flat',
'A', 'B\\flat', 'B', 'C', 'D\\flat', 'D'] * 5 'A', 'B\\flat', 'B', 'C', 'D\\flat', 'D'] * 5
n=zip( MMA.midiC.drumNames, range(27,len(MMA.midiC.drumNames)+27), notenames ) n=zip( MMA.midiC.drumNames, range(27,len(MMA.midiC.drumNames)+27), notenames )
if order == "a": if order == "a":
for a,v,m in sorted(n): for a,v,m in sorted(n):
print "\\insline{%s} {%s$^{%s}$}" % (a, v, m ) print "\\insline{%s} {%s$^{%s}$}" % (a, v, m )
else: else:
for a,v,m in n: for a,v,m in n:
print "\\insline{%s} {%s$^{%s}$}" % (v, a, m) print "\\insline{%s} {%s$^{%s}$}" % (v, a, m)
def docCtrlNames(order): def docCtrlNames(order):
""" Print LaTex table of MIDI controller names. """ """ Print LaTex table of MIDI controller names. """
n=zip( MMA.midiC.ctrlNames, range(len(MMA.midiC.ctrlNames)) ) n=zip( MMA.midiC.ctrlNames, range(len(MMA.midiC.ctrlNames)) )
if order == "a": if order == "a":
for a,v in sorted(n): for a,v in sorted(n):
print "\\insline{%s} {%02x}" % (a, v) print "\\insline{%s} {%02x}" % (a, v)
else: else:
for a,v in n: for a,v in n:
print "\\insline{%02x} {%s}" % (v, a) print "\\insline{%02x} {%s}" % (v, a)
def docInstNames(order): def docInstNames(order):
""" Print LaTex table of instrument names. """ """ Print LaTex table of instrument names. """
n=zip( MMA.midiC.voiceNames, range(len(MMA.midiC.voiceNames)) ) n=zip( MMA.midiC.voiceNames, range(len(MMA.midiC.voiceNames)) )
if order == "a": if order == "a":
for a,v in sorted(n): for a,v in sorted(n):
a=a.replace('&', '\&') a=a.replace('&', '\&')
print "\\insline{%s} {%s}" % (a, v) print "\\insline{%s} {%s}" % (a, v)
else: else:
for a,v in n: for a,v in n:
a=a.replace('&', '\&') a=a.replace('&', '\&')
print "\\insline{%s} {%s}" % (v, a) print "\\insline{%s} {%s}" % (v, a)
""" Whenever MMA encounters a DOC command, or if it defines """ Whenever MMA encounters a DOC command, or if it defines
@ -91,129 +91,166 @@ fname = ''
author="" author=""
notes="" notes=""
defs=[] defs=[]
variables=[]
def docAuthor(ln): def docAuthor(ln):
global author global author
author = ' '.join(ln) author = ' '.join(ln)
def docNote(ln): def docNote(ln):
""" Add a doc line. """ """ Add a doc line. """
global fname, notes global fname, notes
if not gbl.docs or not ln: if not gbl.docs or not ln:
return return
# Grab the arg and data, save it # Grab the arg and data, save it
fname = os.path.basename(gbl.inpath.fname) fname = os.path.basename(gbl.inpath.fname)
if notes: if notes:
notes += ' ' notes += ' '
notes += ' '.join(ln) notes += ' '.join(ln)
def docVars(ln):
""" Add a VARIABLE line (docs vars used in lib file)."""
global fname, variables
if not gbl.docs or not ln:
return
fname = os.path.basename(gbl.inpath.fname)
variables.append([ln[0], ' '.join(ln[1:]) ] )
def docDefine(ln): def docDefine(ln):
""" Save a DEFGROOVE comment string. """ Save a DEFGROOVE comment string.
Entries are stored as a list. Each item in the list is Entries are stored as a list. Each item in the list is
complete groove def looking like: complete groove def looking like:
defs[ [ Name, Seqsize, Description, [ [TRACK,INST]...]] ...] defs[ [ Name, Seqsize, Description, [ [TRACK,INST]...]] ...]
""" """
global defs global defs
l = [ ln[0], gbl.seqSize, ' '.join(ln[1:]) ] l = [ ln[0], gbl.seqSize, ' '.join(ln[1:]) ]
for a in sorted(gbl.tnames.keys()): for a in sorted(gbl.tnames.keys()):
c=gbl.tnames[a] c=gbl.tnames[a]
if c.sequence and len(c.sequence) != c.sequence.count(None): if c.sequence and len(c.sequence) != c.sequence.count(None):
if c.vtype=='DRUM': if c.vtype=='DRUM':
v=MMA.midiC.valueToDrum(c.toneList[0]) v=MMA.midiC.valueToDrum(c.toneList[0])
else: else:
v=MMA.midiC.valueToInst(c.voice[0]) v=MMA.midiC.valueToInst(c.voice[0])
l.append( [c.name, v ] ) l.append( [c.name, v ] )
defs.append(l) defs.append(l)
def docDump(): def docDump():
""" Print the LaTex docs. """ """ Print the LaTex docs. """
global fname, author, notes, defs global fname, author, notes, defs, variables
if gbl.docs == 1: # latex docs if gbl.docs == 1: # latex docs
if notes: if notes:
if fname.endswith(gbl.ext): if fname.endswith(gbl.ext):
fname='.'.join(fname.split('.')[:-1]) fname='.'.join(fname.split('.')[:-1])
print "\\filehead{%s}{%s}" % (totex(fname), totex(notes)) print "\\filehead{%s}{%s}" % (totex(fname), totex(notes))
print print
if defs: if variables:
for l in defs: print " \\variables{"
print " \\instable{%s}{%s}{%s}{" % \ for l in variables:
(totex(l[0]), totex(l[2]), l[1] ) print " \\insvar{%s}{%s}" % ( totex(l[0]), totex(l[1]) )
for c,v in l[3:]: print " }"
print " \\insline{%s}{%s}" % (c.title(), totex(v)) print
print " }"
if gbl.docs == 2: # html docs if defs:
if notes: for l in defs:
print '<!-- Auto-Generated by MMA on: %s -->' % time.ctime() print " \\instable{%s}{%s}{%s}{" % \
print '<HTML>' (totex(l[0]), totex(l[2]), l[1] )
print '<BODY BGCOLOR="#B7DFFF" Text=Black>' for c,v in l[3:]:
if fname.endswith(gbl.ext): print " \\insline{%s}{%s}" % (c.title(), totex(v))
fname='.'.join(fname.split('.')[:-1]) print " }"
print "<H1>%s</H1>" % fname.title()
print "<P>%s" % notes if gbl.docs == 2: # html docs
if defs: if notes:
print "<ul>" print '<!-- Auto-Generated by MMA on: %s -->' % time.ctime()
for l in defs: print '<HTML>'
print "<LI><A Href=#%s>%s</a>" % (l[0], l[0]) print '<BODY BGCOLOR="#B7DFFF" Text=Black>'
print "</ul>" if fname.endswith(gbl.ext):
for l in defs: fname='.'.join(fname.split('.')[:-1])
print '<A Name=%s></a>' % l[0] print "<H1>%s</H1>" % fname.title()
print '<P>' print "<P>%s" % notes
print '<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">'
print ' <TR><TD>' if variables:
print ' <H2> %s </H2> ' % l[0] print "<P>"
print ' %s <B>(%s)</B> ' % ( l[2], l[1] ) print '<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">'
print ' </TD></TR>' print ' <TR><TD>'
print ' <TR><TD>' print ' <H2> Variables </H2> '
print ' <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">' print ' </TD></TR>'
for c,v in l[3:]: print ' <TR><TD>'
print " <TR><TD> %s </TD> <TD> %s </TD></TR>" % (c.title(), v) print ' <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="100%">'
print ' </Table>' for l in variables:
print ' </TD></TR>' print " <TR>"
print '</Table>' print " <TD Valign=Top> <B> %s </B> </TD> " % l[0]
print print " <TD Valign=Top> %s </TD>" % l[1]
print '</Body></HTML>' print " </TR>"
defs = [] print ' </Table>'
notes = "" print ' </TD></TR>'
author = "" print '</Table>'
if defs:
print "<ul>"
for l in defs:
print "<LI><A Href=#%s>%s</a>" % (l[0], l[0])
print "</ul>"
for l in defs:
print '<A Name=%s></a>' % l[0]
print '<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">'
print ' <TR><TD>'
print ' <H2> %s </H2> ' % l[0]
print ' %s <B>(%s)</B> ' % ( l[2], l[1] )
print ' </TD></TR>'
print ' <TR><TD>'
print ' <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">'
for c,v in l[3:]:
print " <TR><TD> %s </TD> <TD> %s </TD></TR>" % (c.title(), v)
print ' </Table>'
print ' </TD></TR>'
print '</Table>'
print
print '</Body></HTML>'
defs = []
variables=[]
notes = ""
author = ""
def totex(s): def totex(s):
""" Parse a string and quote tex stuff. """ Parse a string and quote tex stuff.
Also handles proper quotation style. Also handles proper quotation style.
""" """
s = s.replace("$", "\\$") s = s.replace("$", "\$")
s = s.replace("*", "$*$") s = s.replace("*", "$*$")
s = s.replace("\\", "\\\\") s = s.replace("_", "\\_")
s = s.replace("#", "\\#") #s = s.replace("\\", "\\\\")
s = s.replace("&", "\\&") s = s.replace("#", "\\#")
s = s.replace("&", "\\&")
q="``" q="``"
while s.count('"'): while s.count('"'):
i=s.find('"') s=s.replace('"', q, 1)
s=s[:i] + q + s[i+1:] if q=="``":
if q=="``": q="''"
q="''" else:
else: q="``"
a="``"
return s return s

View File

@ -19,11 +19,10 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
import sys import sys
import os import os
@ -31,38 +30,38 @@ import gbl
from MMA.common import * from MMA.common import *
def locFile(name, lib): def locFile(name, lib):
""" Locate a filename. """ Locate a filename.
This checks, in order: This checks, in order:
lib/name + .mma lib/name + .mma
lib/name lib/name
name + .mma name + .mma
name name
""" """
ext=gbl.ext ext=gbl.ext
exists = os.path.exists exists = os.path.exists
name=os.path.expanduser(name) # for ~ expansion only name=os.path.expanduser(name) # for ~ expansion only
if lib: if lib:
if not name.endswith(ext): if not name.endswith(ext):
t=os.path.join(lib, name + ext) t=os.path.join(lib, name + ext)
if exists(t): if exists(t):
return t return t
t=os.path.join(lib, name) t=os.path.join(lib, name)
if exists(t): if exists(t):
return t return t
if not name.endswith(ext): if not name.endswith(ext):
t = name + ext t = name + ext
if exists(t): if exists(t):
return t return t
if exists(name): if exists(name):
return name return name
return None return None
########################### ###########################
@ -72,241 +71,241 @@ def locFile(name, lib):
class ReadFile: class ReadFile:
class FileData: class FileData:
""" After reading the file in bulk it is parsed and stored in this """ After reading the file in bulk it is parsed and stored in this
data structure. Blanks lines and comments are removed. data structure. Blanks lines and comments are removed.
""" """
def __init__(self, lnum, data, label): def __init__(self, lnum, data, label):
self.lnum=lnum self.lnum=lnum
self.data=data self.data=data
self.label=label self.label=label
def __init__(self, fname): def __init__(self, fname):
self.fdata=fdata=[] self.fdata=fdata=[]
self.lastline = None self.lastline = None
self.lineptr = None self.lineptr = None
self.fname = None self.fname = None
self.que = [] # que for pushed lines (mainly for REPEAT) self.que = [] # que for pushed lines (mainly for REPEAT)
self.qnums = [] self.qnums = []
dataStore = self.FileData # shortcut to avoid '.'s dataStore = self.FileData # shortcut to avoid '.'s
try: try:
inpath = file(fname, 'r') inpath = file(fname, 'r')
except: except:
error("Unable to open '%s' for input" % fname) error("Unable to open '%s' for input" % fname)
if gbl.debug or gbl.showFilenames: if gbl.debug or gbl.showFilenames:
print "Opening file '%s'." % fname print "Opening file '%s'." % fname
self.fname = fname self.fname = fname
""" Read entire file, line by line: """ Read entire file, line by line:
- strip off blanks, comments - strip off blanks, comments
- join continuation lines - join continuation lines
- parse out LABELS - parse out LABELS
- create line numbers - create line numbers
""" """
lcount=0 lcount=0
label='' label=''
labs=[] # track label defs, error if duplicate in same file labs=[] # track label defs, error if duplicate in same file
nlabs=[] # track linenumber label defs nlabs=[] # track linenumber label defs
while 1: while 1:
l = inpath.readline() l = inpath.readline()
if not l: # EOF if not l: # EOF
break break
l= l.strip() l= l.strip()
lcount += 1 lcount += 1
if not l: if not l:
continue continue
while l[-1] == '\\': while l[-1] == '\\':
l = l[0:-1] + ' ' + inpath.readline().strip() l = l[0:-1] + ' ' + inpath.readline().strip()
lcount +=1 lcount +=1
""" This next line splits the line at the first found """ This next line splits the line at the first found
comment '//', drops the comment, and splits the comment '//', drops the comment, and splits the
remaining line into tokens using whitespace delimiters. remaining line into tokens using whitespace delimiters.
Note that split() will strip off trailing and leading Note that split() will strip off trailing and leading
spaces, so a strip() is not needed here. spaces, so a strip() is not needed here.
""" """
l = l.split('//',1)[0].split() l = l.split('//',1)[0].split()
if not l: if not l:
continue continue
""" Parse out label lines. There are 2 different kinds of labels: """ Parse out label lines. There are 2 different kinds of labels:
- LABEL XXX - LABEL XXX
and and
- NNN - NNN
The first kind is treated as an exclusive. If a NNN label or previous The first kind is treated as an exclusive. If a NNN label or previous
XXX duplicates, and error is generated. XXX duplicates, and error is generated.
The LINE NUMBER type is not exclusive. If a duplicate NNN is found, the The LINE NUMBER type is not exclusive. If a duplicate NNN is found, the
last one is used. last one is used.
XXX NNN types can not duplicate each other. XXX NNN types can not duplicate each other.
Also note that XXX lines are stripped from input as well as NNN lines Also note that XXX lines are stripped from input as well as NNN lines
with only a NNN. with only a NNN.
""" """
if l[0].upper()=='LABEL': if l[0].upper()=='LABEL':
if len(l) !=2: if len(l) !=2:
gbl.lineno = lcount gbl.lineno = lcount
error("Usage: LABEL <string>") error("Usage: LABEL <string>")
label=l[1].upper() label=l[1].upper()
if label[0]=='$': if label[0]=='$':
gbl.lineno = lcount gbl.lineno = lcount
error("Variables are not permitted as labels") error("Variables are not permitted as labels")
if label in labs: if label in labs:
gbl.lineno = lcount gbl.lineno = lcount
error("Duplicate label specified in line %s." % lcount) error("Duplicate label specified in line %s" % lcount)
elif label in nlabs: elif label in nlabs:
gbl.lineno = lcount gbl.lineno = lcount
error("Label '%s' duplicates line number label" % label) error("Label '%s' duplicates line number label" % label)
labs.append(label) labs.append(label)
elif l[0].isdigit(): elif l[0].isdigit():
label=l[0] label=l[0]
if label in labs: if label in labs:
gbl.lineno = lcount gbl.lineno = lcount
error("Line number '%s' duplicates LABEL." % label) error("Line number '%s' duplicates LABEL" % label)
if not label in nlabs: if not label in nlabs:
nlabs.append(label) nlabs.append(label)
else: else:
for i, a in enumerate(fdata): for i, a in enumerate(fdata):
if a.label == label: if a.label == label:
fdata[i].label='' fdata[i].label=''
else: else:
label = None label = None
# Save the line, linenumber and (maybe) the label. # Save the line, linenumber and (maybe) the label.
fdata.append( dataStore(lcount, l, label)) fdata.append( dataStore(lcount, l, label))
inpath.close() inpath.close()
self.lineptr = 0 self.lineptr = 0
self.lastline = len(fdata) self.lastline = len(fdata)
def toEof(self): def toEof(self):
""" Move pointer to End of File. """ """ Move pointer to End of File. """
self.lineptr=self.lastline+1 self.lineptr=self.lastline+1
self.que = [] self.que = []
self.qnums = [] self.qnums = []
def goto(self, l): def goto(self, l):
""" Do a goto jump. """ Do a goto jump.
This isn't perfect, but is probably the way most GOTOs work. If This isn't perfect, but is probably the way most GOTOs work. If
inside a repeat/if then nothing more is processed. The jump is inside a repeat/if then nothing more is processed. The jump is
immediate. Of course, you'll run into problems with missing immediate. Of course, you'll run into problems with missing
repeat/repeatend if you try it. Since all repeats are stacked repeat/repeatend if you try it. Since all repeats are stacked
back into the que, we just delete the que. Then we look for a back into the que, we just delete the que. Then we look for a
matching label in the file line array. matching label in the file line array.
Label search is linear. Not too efficient, but the lists Label search is linear. Not too efficient, but the lists
will probably never be that long either. will probably never be that long either.
""" """
if not l: if not l:
error("No label specified") error("No label specified")
if self.que: if self.que:
self.que=[] self.que=[]
for i,a in enumerate(self.fdata): for i,a in enumerate(self.fdata):
if a.label == l: if a.label == l:
self.lineptr=i self.lineptr=i
return return
error("Label '%s' has not be set." % l) error("Label '%s' has not be set" % l)
def push(self, q, nums): def push(self, q, nums):
""" Push a list of lines back into the input stream. """ Push a list of lines back into the input stream.
Note: This is a list of semi-processed lines, no comments, etc. Note: This is a list of semi-processed lines, no comments, etc.
It's quicker to extend a list than to insert, so add to the end. It's quicker to extend a list than to insert, so add to the end.
Note: we reverse the original, extend() then reverse again, just Note: we reverse the original, extend() then reverse again, just
in case the caller cares. in case the caller cares.
nums is a list of linenumbers. Needed to report error lines. nums is a list of linenumbers. Needed to report error lines.
""" """
if not self.que: if not self.que:
self.que = [''] self.que = ['']
self.qnums=[gbl.lineno] self.qnums=[gbl.lineno]
q.reverse() q.reverse()
self.que.extend(q) self.que.extend(q)
q.reverse() q.reverse()
nums.reverse() nums.reverse()
self.qnums.extend(nums) self.qnums.extend(nums)
nums.reverse() nums.reverse()
def read(self): def read(self):
""" Return a line. """ Return a line.
This will return either a queued line or a line from the This will return either a queued line or a line from the
file (which was stored/processed earlier). file (which was stored/processed earlier).
""" """
while 1: while 1:
# Return a queued line if possible. # Return a queued line if possible.
if self.que: if self.que:
ln = self.que.pop(-1) ln = self.que.pop(-1)
gbl.lineno = self.qnums.pop() gbl.lineno = self.qnums.pop()
if not ln: if not ln:
continue continue
return ln return ln
# Return the next line in the file. # Return the next line in the file.
if self.lineptr>=self.lastline: if self.lineptr>=self.lastline:
return None #### EOF return None #### EOF
ln=self.fdata[self.lineptr].data ln=self.fdata[self.lineptr].data
gbl.lineno = self.fdata[self.lineptr].lnum gbl.lineno = self.fdata[self.lineptr].lnum
self.lineptr +=1 self.lineptr +=1
return ln return ln

View File

@ -18,47 +18,47 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
import os import os
version = "1.0-rc2" # Version -- Oct 15/2006 version = "1.1" # Version -- March 7/2007
""" mtrks is storage for the MIDI data as it is created. """ mtrks is storage for the MIDI data as it is created.
It is a dict of class Mtrk() instances. Keys are the It is a dict of class Mtrk() instances. Keys are the
midi channel numbers. Ie, mtrks[2] is for channel 2, midi channel numbers. Ie, mtrks[2] is for channel 2,
etc. mtrks[0] is for the meta stuff. etc. mtrks[0] is for the meta stuff.
""" """
mtrks = {} mtrks = {}
""" tnames is a dict of assigned track names. The keys are """ tnames is a dict of assigned track names. The keys are
the track names; each entry is a pattern class instance. the track names; each entry is a pattern class instance.
We have tnames['BASS-FOO'], etc. We have tnames['BASS-FOO'], etc.
""" """
tnames = {} tnames = {}
""" midiAssigns keeps track of channel/track assignments. The keys """ midiAssigns keeps track of channel/track assignments. The keys
are midi channels (1..16), the data is a list of tracks assigned are midi channels (1..16), the data is a list of tracks assigned
to each channel. The tracks are only added, not deleted. Right to each channel. The tracks are only added, not deleted. Right
now this is only used in -c reporting. now this is only used in -c reporting.
""" """
midiAssigns={} midiAssigns={}
for c in range(0,17): for c in range(0,17):
midiAssigns[c]=[] midiAssigns[c]=[]
""" midiAvail is a list with each entry representing a MIDI channel. """ midiAvail is a list with each entry representing a MIDI channel.
As channels are allocated/deallocated the appropriated slot As channels are allocated/deallocated the appropriated slot
is inc/decremented. is inc/decremented.
""" """
midiAvail=[ 0 ] * 17 # slots 0..16, slot 0 is not used. midiAvail=[ 0 ] * 17 # slots 0..16, slot 0 is not used.
deletedTracks = [] # list of deleted tracks for -c report deletedTracks = [] # list of deleted tracks for -c report
""" This is a user constructed list of names/channels. The keys """ This is a user constructed list of names/channels. The keys
are names, data is a channel. Eg. midiChPrefs['BASS-SUS']==9 are names, data is a channel. Eg. midiChPrefs['BASS-SUS']==9
@ -71,74 +71,76 @@ midiChPrefs={}
""" Groove storage. Each entry in settingsGroove{} has a keyname """ Groove storage. Each entry in settingsGroove{} has a keyname
of a saved groove. of a saved groove.
lastGroove and currentGroove are used by macros lastGroove and currentGroove are used by macros
""" """
settingsGroove = {} settingsGroove = {}
lastGroove = '' lastGroove = ''
currentGroove = '' currentGroove = ''
""" SeqRnd variable is a list. The first entry is a flag:(0, 1 or x): """ SeqRnd variable is a list. The first entry is a flag:(0, 1 or x):
0 - not set 0 - not set
1 - set 1 - set
2 - set for specific tracks, track list starts at position [1] 2 - set for specific tracks, track list starts at position [1]
""" """
seqRnd = [0] # set if SEQRND has been set seqRnd = [0] # set if SEQRND has been set
############# String constants #################### ############# String constants ####################
ext = ".mma" # extension for song/lib files. ext = ".mma" # extension for song/lib files.
############## Tempo, and other midi positioning. ############# ############## Tempo, and other midi positioning. #############
BperQ = 192 # midi ticks per quarter note BperQ = 192 # midi ticks per quarter note
QperBar = 4 # Beats/bar, set with TIME QperBar = 4 # Beats/bar, set with TIME
tickOffset = 0 # offset of current bar in ticks tickOffset = 0 # offset of current bar in ticks
tempo = 120 # current tempo tempo = 120 # current tempo
seqSize = 1 # variation sequence table size seqSize = 1 # variation sequence table size
seqCount = 0 # running count of variation seqCount = 0 # running count of variation
transpose = 0 # Transpose is global (ignored by drum tracks) transpose = 0 # Transpose is global (ignored by drum tracks)
lineno = -1 # used for error reporting lineno = -1 # used for error reporting
swingMode = 0 # defaults to 0, set to 1 for swing mode swingMode = 0 # defaults to 0, set to 1 for swing mode
swingSkew = None # this is just for $_SwingMode macro swingSkew = None # this is just for $_SwingMode macro
barNum = 0 # Current line number barNum = 0 # Current line number
synctick = 0 # flag, set if we want a tick on all tracks at offset 0
############# Path and search variables. ############# ############# Path and search variables. #############
libPath = '' libPath = ''
for p in ( "c:\\mma\\lib", "/usr/local/share/mma/lib", "/usr/share/mma/lib", "./lib"): for p in ( "c:\\mma\\lib", "/usr/local/share/mma/lib", "/usr/share/mma/lib", "./lib"):
if os.path.isdir(p): if os.path.isdir(p):
libPath=p libPath=p
break break
incPath = '' incPath = ''
for p in ( "c:\\mma\\includes", "/usr/local/share/mma/includes", for p in ( "c:\\mma\\includes", "/usr/local/share/mma/includes",
"/usr/share/mma/includes", "./includes"): "/usr/share/mma/includes", "./includes"):
if os.path.isdir(p): if os.path.isdir(p):
incPath=p incPath=p
break break
autoLib = 'stdlib' autoLib = 'stdlib'
outPath = '' # Directory for MIDI file outPath = '' # Directory for MIDI file
mmaStart = [] # list of START files mmaStart = [] # list of START files
mmaEnd = [] # list of END files mmaEnd = [] # list of END files
mmaRC = None # user specified RC file, overrides defaults mmaRC = None # user specified RC file, overrides defaults
inpath = None # input file inpath = None # input file
midiFileType = 1 # type 1 file, SMF command can change to 0 midiFileType = 1 # type 1 file, SMF command can change to 0
runningStatus = 1 # running status enabled runningStatus = 1 # running status enabled
############# Options. ############# ############# Options. #############
@ -146,24 +148,24 @@ runningStatus = 1 # running status enabled
""" These variables are all set from the command line in MMA.opts.py. """ These variables are all set from the command line in MMA.opts.py.
It's a bit of an easy-way-out to have them all here, but I don't think It's a bit of an easy-way-out to have them all here, but I don't think
it hurts too much. it hurts too much.
""" """
debug = Ldebug = 0 debug = Ldebug = 0
pshow = Lpshow = 0 pshow = Lpshow = 0
seqshow = Lseqshow = 0 seqshow = Lseqshow = 0
showrun = Lshowrun = 0 showrun = Lshowrun = 0
noWarn = LnoWarn = 0 noWarn = LnoWarn = 0
noOutput = LnoOutput = 0 noOutput = LnoOutput = 0
showExpand = LshowExpand = 0 showExpand = LshowExpand = 0
showFilenames = LshowFilenames = 0 showFilenames = LshowFilenames = 0
chshow = Lchshow = 0 chshow = Lchshow = 0
outfile = None outfile = None
infile = None infile = None
docs = 0 docs = 0
maxBars = 500 maxBars = 500
makeGrvDefs = 0 makeGrvDefs = 0
cmdSMF = None cmdSMF = None

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -29,110 +29,110 @@ from MMA.common import *
def harmonize(hmode, note, chord): def harmonize(hmode, note, chord):
""" Get harmony note(s) for given chord. """ """ Get harmony note(s) for given chord. """
hnotes = [] hnotes = []
for tp in hmode.split('+'): for tp in hmode.split('+'):
if tp in ('2', '2BELOW'): if tp in ('2', '2BELOW'):
hnotes.append( gethnote(note, chord) ) hnotes.append( gethnote(note, chord) )
elif tp == '2ABOVE': elif tp == '2ABOVE':
hnotes.append( gethnote(note, chord)+12 ) hnotes.append( gethnote(note, chord)+12 )
elif tp in ( '3', '3BELOW'): elif tp in ( '3', '3BELOW'):
a = gethnote(note, chord) a = gethnote(note, chord)
b = gethnote(a, chord) b = gethnote(a, chord)
hnotes.extend( [a, b] ) hnotes.extend( [a, b] )
elif tp == '3ABOVE': elif tp == '3ABOVE':
a = gethnote(note, chord) a = gethnote(note, chord)
b = gethnote(a, chord) b = gethnote(a, chord)
hnotes.extend( [a+12, b+12] ) hnotes.extend( [a+12, b+12] )
elif tp in ('OPEN', "OPENBELOW"): elif tp in ('OPEN', "OPENBELOW"):
a=gethnote(note, chord) a=gethnote(note, chord)
hnotes.append( gethnote(a, chord)) hnotes.append( gethnote(a, chord))
elif tp == 'OPENABOVE': elif tp == 'OPENABOVE':
a=gethnote(note, chord) a=gethnote(note, chord)
hnotes.append( gethnote(a, chord) + 12 ) hnotes.append( gethnote(a, chord) + 12 )
elif tp in ('8', '8BELOW'): elif tp in ('8', '8BELOW'):
hnotes.append( note - 12 ) hnotes.append( note - 12 )
elif tp == '8ABOVE': elif tp == '8ABOVE':
hnotes.append( note + 12 ) hnotes.append( note + 12 )
elif tp in ('16', '16BELOW'): elif tp in ('16', '16BELOW'):
hnotes.append( note - (2 * 12) ) hnotes.append( note - (2 * 12) )
elif tp == '16ABOVE': elif tp == '16ABOVE':
hnotes.append( note + (2 * 12) ) hnotes.append( note + (2 * 12) )
elif tp in ('24', '24BELOW'): elif tp in ('24', '24BELOW'):
hnotes.append( note - (3 * 12) ) hnotes.append( note - (3 * 12) )
elif tp == '24ABOVE': elif tp == '24ABOVE':
hnotes.append( note + (3 * 12) ) hnotes.append( note + (3 * 12) )
else: else:
error("Unknown harmony type '%s'." % tp) error("Unknown harmony type '%s'" % tp)
""" Strip out duplicate notes from harmony list. Cute trick here, """ Strip out duplicate notes from harmony list. Cute trick here,
we use the note values as keys for a new dictionary, assign we use the note values as keys for a new dictionary, assign
a null value, and return the list of keys. a null value, and return the list of keys.
""" """
return dict([(i, None) for i in hnotes]).keys() return dict([(i, None) for i in hnotes]).keys()
def gethnote(note, chord): def gethnote(note, chord):
""" Determine harmony notes for a note based on the chord. """ Determine harmony notes for a note based on the chord.
note - midi value of the note note - midi value of the note
chord - list of midi values for the chord chord - list of midi values for the chord
This routine works by creating a chord list with all This routine works by creating a chord list with all
its notes having a value less than the note (remember, this its notes having a value less than the note (remember, this
is all MIDI values). We then grab notes from the end of is all MIDI values). We then grab notes from the end of
the chord until one is found which is less than the original the chord until one is found which is less than the original
note. note.
""" """
wm="No harmony note found since no chord, using note " + \ wm="No harmony note found since no chord, using note " + \
"0 which will sound bad." "0 which will sound bad"
if not chord: # should never happen! if not chord: # should never happen!
warning(wm) warning(wm)
return 0 return 0
ch = list(chord) # copy chord and sort ch = list(chord) # copy chord and sort
ch.sort() ch.sort()
# ensure that the note is in the chord # ensure that the note is in the chord
while ch[-1] < note: while ch[-1] < note:
for i,n in enumerate(ch): for i,n in enumerate(ch):
ch[i]+=12 ch[i]+=12
while ch[0] >= note: while ch[0] >= note:
for i,v in enumerate(ch): for i,v in enumerate(ch):
ch[i]-=12 ch[i]-=12
# get one lower than the note # get one lower than the note
while 1: while 1:
if not ch: # this probably can't happen if not ch: # this probably can't happen
warning(wm) warning(wm)
return 0 return 0
h=ch.pop() h=ch.pop()
if h<note: break if h<note: break
return h return h

View File

@ -2,7 +2,7 @@
# lyric.py # lyric.py
""" """
This module is an integeral part of the program This module is an integeral part of the program
MMA - Musical Midi Accompaniment. MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
import gbl import gbl
@ -29,320 +29,320 @@ from MMA.common import *
class Lyric: class Lyric:
textev = None # set if TEXT EVENTS (not recommended) textev = None # set if TEXT EVENTS (not recommended)
barsplit = None # set if lyrics NOT split into sep. events for bar barsplit = None # set if lyrics NOT split into sep. events for bar
versenum = 1 # current verse number of lyric versenum = 1 # current verse number of lyric
dupchords = 0 # set if we want chords as lyric events dupchords = 0 # set if we want chords as lyric events
transpose = 0 # tranpose chord names (for dupchords only) transpose = 0 # tranpose chord names (for dupchords only)
pushedLyrics = []
transNames = ( ('C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'), pushedLyrics = []
('C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'))
transKey = 0 # 0==flat, 1=sharp
chordnames={
'B#': 0, 'C' : 0, 'C#': 1, 'Db': 1,
'D' : 2, 'D#': 3, 'Eb': 3, 'E' : 4,
'Fb': 4, 'E#': 5, 'F' : 5, 'F#': 6,
'Gb': 6, 'G' : 7, 'G#': 8, 'Ab': 8,
'A' : 9, 'A#': 10,'Bb': 10,'B' : 11,
'Cb':11 }
transNames = ( ('C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'),
def __init__(self): ('C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'))
pass
def setting(self): transKey = 0 # 0==flat, 1=sharp
""" Called from macro. """
a="Event=" chordnames={
'B#': 0, 'C' : 0, 'C#': 1, 'Db': 1,
if self.textev: a+="Text" 'D' : 2, 'D#': 3, 'Eb': 3, 'E' : 4,
else: a+="Lyric" 'Fb': 4, 'E#': 5, 'F' : 5, 'F#': 6,
'Gb': 6, 'G' : 7, 'G#': 8, 'Ab': 8,
a+=" Split=" 'A' : 9, 'A#': 10,'Bb': 10,'B' : 11,
if self.barsplit: a+="Bar" 'Cb':11 }
else: a+="Normal"
a += " Verse=%s" % self.versenum
a += " Chords="
if self.dupchords: a+="On"
else: a+="Off"
a += " Transpose=%s" % self.transpose
a += " CNames="
if self.transKey: a+="Sharp"
else: a+="Flat"
return a
def option(self, ln):
""" Set a lyric option. """
for i, l in enumerate(ln):
l=l.upper()
# Single word options
if l.upper()=="SET":
if i>=len(ln):
s=''
else:
s=' '.join(ln[i+1:]).strip()
if not s.startswith('['):
s = '[' + s + ']'
self.pushedLyrics.append(s)
break
# All the rest are OPT=VALUE pairs
try:
a,v = l.split('=')
except:
error("Lyric options must be in CMD=VALUE pairs.")
if a == 'EVENT':
if v == 'TEXT':
self.textev = 1
warning ("Lyric: Placing lyrics as TEXT EVENTS is not recommended.")
elif v == 'LYRIC':
self.textev = None
if gbl.debug:
print "Lyric: lyrics set as LYRIC events."
else:
error("Valid options for Lyric Event are TEXT or LYRIC.")
elif a == 'SPLIT':
if v == 'BAR':
self.barsplit = 1
if gbl.debug:
print "Lyric: lyrics distributed thoughout bar."
elif v == 'NORMAL':
self.barsplit = None
if gbl.debug:
print "Lyric: lyrics appear as one per bar."
else:
error("Valid options for Lyric Split are BAR or NORMAL.")
elif a == 'VERSE':
if v.isdigit():
self.versenum = int(v)
elif v == 'INC':
self.versenum += 1
elif v == 'DEC':
self.versenum -= 1
else:
error("Valid options of Lyric Verse are <nn> or INC or DEC.")
if self.versenum < 1:
error("Attempt to set Lyric Verse to %s. Values "
"must be > 0." % self.versenum)
if gbl.debug:
print "Lyric: verse number set to %s" % self.versenum
elif a == 'CHORDS': def __init__(self):
if v in ('1', 'ON'): pass
self.dupchords = 1
if gbl.debug:
print "Lyric: chords are duplicated as lyrics."
elif v in ('0', 'OFF'):
self.dupchords = 0
if gbl.debug:
print "Lyric: chords are NOT duplicated as lyrics."
else:
error ("Expecting 'ON' or 'OFF' in Lyric directive, not 'CHORDS=%s'" % v)
elif a == 'TRANSPOSE':
v = stoi(v, "Lyric Tranpose expecting value, not %s" % v)
if v < -12 or v > 12:
error("Lyric Tranpose %s out-of-range; must be -12..12." % v)
self.transpose = v
elif a == 'CNAMES':
if v in ('#', 'SHARP'):
self.transKey = 1
elif v in ('B', '&', 'FLAT'):
self.transKey = 0
else:
error("Lyric CNames expecting 'Sharp' or 'Flat', not '%s'" % v )
else:
error("Usage: Lyric expecting EVENT, SPLIT, VERSE, CHORDS, TRANSPOSE, CNAMES or SET, "
"not '%s'" % a )
def setting(self):
""" Called from macro. """
def leftovers(self): a="Event="
""" Just report leftovers on stack."""
if self.pushedLyrics:
warning("Lyrics remaining on stack.")
if self.textev: a+="Text"
def extract(self, ln, rpt): else: a+="Lyric"
""" Extract lyric info from a chord line and place in META track.
Returns line and lyric as 2 strings.
The lyric is returned for debugging purposes, but it has been a+=" Split="
processed and inserted into the MIDI track. if self.barsplit: a+="Bar"
""" else: a+="Normal"
a=ln.count('[')
b=ln.count(']')
if a != b:
error("Mismatched []s for lyrics found in chord line.")
if self.pushedLyrics:
if a or b:
error("Lyrics not permitted inline and as LYRIC SET")
a += " Verse=%s" % self.versenum
ln = ln + self.pushedLyrics.pop(0)
a=b=1 # flag that we have lyrics, count really doesn't matter a += " Chords="
if self.dupchords: a+="On"
else: a+="Off"
if rpt > 1:
if self.dupchords: a += " Transpose=%s" % self.transpose
error("Chord to lyrics not supported with bar repeat.")
elif a or b: a += " CNames="
error("Bars with both repeat count and lyrics are not permitted.") if self.transKey: a+="Sharp"
else: a+="Flat"
return a
ln, lyrics = pextract(ln, '[', ']') def option(self, ln):
""" Set a lyric option. """
""" If the CHORDS=ON option is set, make a copy of the chords and for i, l in enumerate(ln):
insert as lyric. This permits illegal chord lines, but they will l=l.upper()
be caught by the parser.
"""
if self.dupchords:
ly = []
for v in ln.split():
v = v.replace('&', 'b')
if v == 'z':
v = 'N.C.'
if 'z' in v:
v = v.split('z')[0]
while v.startswith('-'):
v=v[1:]
while v.startswith('+'):
v=v[1:]
if self.transpose: # Single word options
tr=0 # Needed in case line is invalid!
cn=v[0:2]
if self.chordnames.has_key(cn):
tr=self.chordnames[cn] + self.transpose
else:
cn=v[0:1]
if self.chordnames.has_key(cn):
tr=self.chordnames[cn] + self.transpose
while tr>=12: tr-=12 if l.upper()=="SET":
while tr<=-12: tr+=12
if tr: if i>=len(ln):
v = self.transNames[self.transKey][tr] + v[len(cn):] s=''
else:
s=' '.join(ln[i+1:]).strip()
if not s.startswith('['):
ly.append(v) s = '[' + s + ']'
i=gbl.QperBar - len(ly) self.pushedLyrics.append(s)
if i>0:
ly.extend( ['/'] * i ) break
lyrics.insert(0, ' '.join(ly) + '\\r')
v=self.versenum # All the rest are OPT=VALUE pairs
if len(lyrics) == 1:
v=1
if v > len(lyrics): try:
lyrics = '' a,v = l.split('=')
else: except:
lyrics=lyrics[v-1] error("Lyric options must be in CMD=VALUE pairs")
if not len(lyrics):
return (ln, [])
lyrics=lyrics.replace('\\r', ' \\r ')
lyrics=lyrics.replace('\\n', ' \\n ')
lyrics=lyrics.replace(' ', ' ')
if self.barsplit: if a == 'EVENT':
lyrics = [lyrics] if v == 'TEXT':
else: self.textev = 1
lyrics = lyrics.split() warning ("Lyric: Placing lyrics as TEXT EVENTS is not recommended")
beat = 0 elif v == 'LYRIC':
bstep = gbl.QperBar / float(len(lyrics)) self.textev = None
if gbl.debug:
print "Lyric: lyrics set as LYRIC events."
else:
for t, a in enumerate(lyrics): error("Valid options for Lyric Event are TEXT or LYRIC")
a,b = pextract(a, '<', '>', 1)
if b and b[0]:
beat = stof(b[0], "Expecting value in <%s> in lyric." % b)
if beat < 1 or beat > gbl.QperBar+1:
error("Offset in lyric <> must be 1 to %s." % gbl.QperBar)
beat -= 1
bstep = (gbl.QperBar-beat)/float((len(lyrics)-t))
a = a.replace('\\r', '\r') elif a == 'SPLIT':
a = a.replace('\\n', '\n') if v == 'BAR':
self.barsplit = 1
if gbl.debug:
print "Lyric: lyrics distributed thoughout bar."
if a and a != ' ': elif v == 'NORMAL':
if not a.endswith('-'): self.barsplit = None
a += ' ' if gbl.debug:
print "Lyric: lyrics appear as one per bar."
p=getOffset(beat * gbl.BperQ)
if self.textev: else:
gbl.mtrks[0].addText(p, a) error("Valid options for Lyric Split are BAR or NORMAL")
else:
gbl.mtrks[0].addLyric(p, a)
elif a == 'VERSE':
if v.isdigit():
self.versenum = int(v)
elif v == 'INC':
self.versenum += 1
elif v == 'DEC':
self.versenum -= 1
else:
error("Valid options of Lyric Verse are <nn> or INC or DEC")
if self.versenum < 1:
error("Attempt to set Lyric Verse to %s. Values "
"must be > 0" % self.versenum)
if gbl.debug:
print "Lyric: verse number set to %s" % self.versenum
elif a == 'CHORDS':
if v in ('1', 'ON'):
self.dupchords = 1
if gbl.debug:
print "Lyric: chords are duplicated as lyrics."
elif v in ('0', 'OFF'):
self.dupchords = 0
if gbl.debug:
print "Lyric: chords are NOT duplicated as lyrics."
else:
error ("Expecting 'ON' or 'OFF' in Lyric directive, not 'CHORDS=%s'" % v)
elif a == 'TRANSPOSE':
v = stoi(v, "Lyric Tranpose expecting value, not %s" % v)
if v < -12 or v > 12:
error("Lyric Tranpose %s out-of-range; must be -12..12" % v)
self.transpose = v
elif a == 'CNAMES':
if v in ('#', 'SHARP'):
self.transKey = 1
elif v in ('B', '&', 'FLAT'):
self.transKey = 0
else:
error("Lyric CNames expecting 'Sharp' or 'Flat', not '%s'" % v )
else:
error("Usage: Lyric expecting EVENT, SPLIT, VERSE, CHORDS, TRANSPOSE, CNAMES or SET, "
"not '%s'" % a )
def leftovers(self):
""" Just report leftovers on stack."""
if self.pushedLyrics:
warning("Lyrics remaining on stack")
def extract(self, ln, rpt):
""" Extract lyric info from a chord line and place in META track.
Returns line and lyric as 2 strings.
The lyric is returned for debugging purposes, but it has been
processed and inserted into the MIDI track.
"""
a=ln.count('[')
b=ln.count(']')
if a != b:
error("Mismatched []s for lyrics found in chord line")
if self.pushedLyrics:
if a or b:
error("Lyrics not permitted inline and as LYRIC SET")
ln = ln + self.pushedLyrics.pop(0)
a=b=1 # flag that we have lyrics, count really doesn't matter
if rpt > 1:
if self.dupchords:
error("Chord to lyrics not supported with bar repeat")
elif a or b:
error("Bars with both repeat count and lyrics are not permitted")
ln, lyrics = pextract(ln, '[', ']')
""" If the CHORDS=ON option is set, make a copy of the chords and
insert as lyric. This permits illegal chord lines, but they will
be caught by the parser.
"""
if self.dupchords:
ly = []
for v in ln.split():
v = v.replace('&', 'b')
if v == 'z':
v = 'N.C.'
if 'z' in v:
v = v.split('z')[0]
while v.startswith('-'):
v=v[1:]
while v.startswith('+'):
v=v[1:]
if self.transpose:
tr=0 # Needed in case line is invalid!
cn=v[0:2]
if self.chordnames.has_key(cn):
tr=self.chordnames[cn] + self.transpose
else:
cn=v[0:1]
if self.chordnames.has_key(cn):
tr=self.chordnames[cn] + self.transpose
while tr>=12: tr-=12
while tr<=-12: tr+=12
if tr:
v = self.transNames[self.transKey][tr] + v[len(cn):]
ly.append(v)
i=gbl.QperBar - len(ly)
if i>0:
ly.extend( ['/'] * i )
lyrics.insert(0, ' '.join(ly) + '\\r')
v=self.versenum
if len(lyrics) == 1:
v=1
if v > len(lyrics):
lyrics = ''
else:
lyrics=lyrics[v-1]
if not len(lyrics):
return (ln, [])
lyrics=lyrics.replace('\\r', ' \\r ')
lyrics=lyrics.replace('\\n', ' \\n ')
lyrics=lyrics.replace(' ', ' ')
if self.barsplit:
lyrics = [lyrics]
else:
lyrics = lyrics.split()
beat = 0
bstep = gbl.QperBar / float(len(lyrics))
for t, a in enumerate(lyrics):
a,b = pextract(a, '<', '>', 1)
if b and b[0]:
beat = stof(b[0], "Expecting value in <%s> in lyric" % b)
if beat < 1 or beat > gbl.QperBar+1:
error("Offset in lyric <> must be 1 to %s" % gbl.QperBar)
beat -= 1
bstep = (gbl.QperBar-beat)/float((len(lyrics)-t))
a = a.replace('\\r', '\r')
a = a.replace('\\n', '\n')
if a and a != ' ':
if not a.endswith('-'):
a += ' '
p=getOffset(beat * gbl.BperQ)
if self.textev:
gbl.mtrks[0].addText(p, a)
else:
gbl.mtrks[0].addLyric(p, a)
beat += bstep
return (ln, lyrics)
beat += bstep
return (ln, lyrics)
# Create a single instance of the Lyric Class. # Create a single instance of the Lyric Class.

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -47,13 +47,13 @@ import MMA.options
MMA.options.opts() MMA.options.opts()
""" """
LibPath and IncPath are set in MMA.globals. Debug setting isn't set LibPath and IncPath are set in MMA.globals. Debug setting isn't set
when the default is done. when the default is done.
""" """
if gbl.debug: if gbl.debug:
print "Initialization has set LibPath set to", gbl.libPath print "Initialization has set LibPath set to", gbl.libPath
print "Initialization has set IncPath set to", gbl.incPath print "Initialization has set IncPath set to", gbl.incPath
####################################### #######################################
@ -75,25 +75,25 @@ gbl.docs = 0
rcread=0 rcread=0
rcfiles = ('mmarc', 'c:\\mma\\mmarc', '~/.mmarc', '/usr/local/etc/mmarc', '/etc/mmarc' ) rcfiles = ('mmarc', 'c:\\mma\\mmarc', '~/.mmarc', '/usr/local/etc/mmarc', '/etc/mmarc' )
if gbl.mmaRC: if gbl.mmaRC:
rcfiles = [ gbl.mmaRC ] rcfiles = [ gbl.mmaRC ]
for i in rcfiles: for i in rcfiles:
f = locFile(i, None) f = locFile(i, None)
if f: if f:
if gbl.showrun: if gbl.showrun:
print "Reading RC file '%s'" % f print "Reading RC file '%s'" % f
MMA.parse.parseFile(f) MMA.parse.parseFile(f)
rcread+=1 rcread+=1
break break
else: else:
if gbl.mmaRC: if gbl.mmaRC:
error("Specified init file '%s' not found." % gbl.mmaRC) error("Specified init file '%s' not found" % gbl.mmaRC)
if not rcread: if not rcread:
gbl.lineno = -1 gbl.lineno = -1
warning("No RC file was found or processed") warning("No RC file was found or processed")
gbl.docs = docOption # Restore doc options gbl.docs = docOption # Restore doc options
@ -104,17 +104,17 @@ gbl.docs = docOption # Restore doc options
# Note: This needs to be here, after reading of RC files # Note: This needs to be here, after reading of RC files
if gbl.makeGrvDefs: if gbl.makeGrvDefs:
if gbl.infile: if gbl.infile:
error("No filename is permitted with the -g option") error("No filename is permitted with the -g option")
from MMA.auto import libUpdate from MMA.auto import libUpdate
libUpdate() # update and EXIT libUpdate() # update and EXIT
################################ ################################
# We need an input file for anything after this point. # We need an input file for anything after this point.
if not gbl.infile: if not gbl.infile:
MMA.options.usage("No input filename specified.") MMA.options.usage("No input filename specified.")
# Add filename to meta track. # Add filename to meta track.
@ -124,35 +124,35 @@ gbl.mtrks[0].addText(0, "Input filename: %s" % gbl.infile)
# Just extract docs (-Dx) to stdout. # Just extract docs (-Dx) to stdout.
if docOption: if docOption:
f=locFile(gbl.infile, None) f=locFile(gbl.infile, None)
if not f: if not f:
error("File '%s' not found." % gbl.infile) error("File '%s' not found" % gbl.infile)
MMA.parse.parseFile(f) MMA.parse.parseFile(f)
sys.exit(0) sys.exit(0)
######################################################### #########################################################
# These cmdline options override settings in RC files # These cmdline options override settings in RC files
if gbl.cmdSMF: if gbl.cmdSMF:
gbl.lineno = -1 gbl.lineno = -1
MMA.parse.setMidiFileType(['SMF=%s' % gbl.cmdSMF]) MMA.parse.setMidiFileType(['SMF=%s' % gbl.cmdSMF])
########################################## ##########################################
# Create the output filename. # Create the output filename.
# If outfile was specified on cmd line then leave it alone. # If outfile was specified on cmd line then leave it alone.
# Otherwise ... # Otherwise ...
# 1. strip off the extension if it is .mma, # 1. strip off the extension if it is .mma,
# 2. append .mid # 2. append .mid
if gbl.outfile: if gbl.outfile:
outfile = gbl.outfile outfile = gbl.outfile
else: else:
outfile, ext = os.path.splitext(gbl.infile) outfile, ext = os.path.splitext(gbl.infile)
if ext != gbl.ext: if ext != gbl.ext:
outfile=gbl.infile outfile=gbl.infile
outfile += '.mid' outfile += '.mid'
outfile=os.path.expanduser(outfile) outfile=os.path.expanduser(outfile)
@ -164,94 +164,94 @@ outfile=os.path.expanduser(outfile)
# First the mmastart files # First the mmastart files
for f in gbl.mmaStart: for f in gbl.mmaStart:
fn = locFile(f, gbl.incPath) fn = locFile(f, gbl.incPath)
if not fn: if not fn:
warning("MmaStart file '%s' not found/processed." % fn) warning("MmaStart file '%s' not found/processed" % fn)
MMA.parse.parseFile(fn) MMA.parse.parseFile(fn)
gbl.lineno = -1 gbl.lineno = -1
# The song file specified on the command line # The song file specified on the command line
f = locFile(gbl.infile, None) f = locFile(gbl.infile, None)
if not f: if not f:
gbl.lineno = -1 gbl.lineno = -1
error("Input file '%s' not found." % gbl.infile) error("Input file '%s' not found" % gbl.infile)
MMA.parse.parseFile(f) MMA.parse.parseFile(f)
# Finally, the mmaend files # Finally, the mmaend files
for f in gbl.mmaEnd: for f in gbl.mmaEnd:
fn = locFile(f, None) fn = locFile(f, None)
if not fn: if not fn:
warning("MmaEnd file '%s' not found/processed." % f) warning("MmaEnd file '%s' not found/processed" % f)
MMA.parse.parseFile(fn) MMA.parse.parseFile(fn)
################################################# #################################################
# Just display the channel assignments (-c) and exit... # Just display the channel assignments (-c) and exit...
if gbl.chshow: if gbl.chshow:
print "\nFile '%s' parsed, but no MIDI file produced!" % gbl.infile print "\nFile '%s' parsed, but no MIDI file produced!" % gbl.infile
print print
print "Tracks allocated:" print "Tracks allocated:"
k=gbl.tnames.keys() k=gbl.tnames.keys()
k.sort() k.sort()
max=0 max=0
for a in k + gbl.deletedTracks: for a in k + gbl.deletedTracks:
if len(a)>max: if len(a)>max:
max = len(a) max = len(a)
max+=1 max+=1
wrap=0 wrap=0
for a in k: for a in k:
wrap += max wrap += max
if wrap>60: if wrap>60:
wrap = max wrap = max
print print
print " %-*s" %( max, a), print " %-*s" %( max, a),
print print
print print
if gbl.deletedTracks: if gbl.deletedTracks:
print "Deleted Tracks:" print "Deleted Tracks:"
wrap=0 wrap=0
for a in gbl.deletedTracks: for a in gbl.deletedTracks:
wrap += max wrap += max
if wrap>60: if wrap>60:
wrap=max wrap=max
print print
print " %-*s" %( max,a), print " %-*s" %( max,a),
print print
print print
print "Channel assignments:" print "Channel assignments:"
for c, n in sorted(gbl.midiAssigns.items()): for c, n in sorted(gbl.midiAssigns.items()):
if n: if n:
wrap = 3 wrap = 3
print " %2s" % c, print " %2s" % c,
for nn in n: for nn in n:
wrap += max wrap += max
if wrap>63: if wrap>63:
print "\n ", print "\n ",
wrap=max+3 wrap=max+3
print "%-*s" % (max,nn), print "%-*s" % (max,nn),
print print
print print
sys.exit(0) sys.exit(0)
#################################### ####################################
# Dry run, no output # Dry run, no output
if gbl.noOutput: if gbl.noOutput:
warning( "Input file parsed successfully. No midi file generated.") warning( "Input file parsed successfully. No midi file generated")
sys.exit(0) sys.exit(0)
############################## ##############################
# Create the output (MIDI) file # Create the output (MIDI) file
gbl.lineno=-1 # disable line nums for error/warning gbl.lineno=-1 # disable line nums for error/warning
""" We fix the outPath now. This lets you set outpath in the song file. """ We fix the outPath now. This lets you set outpath in the song file.
@ -271,11 +271,11 @@ gbl.lineno=-1 # disable line nums for error/warning
""" """
if (not outfile.startswith('/')) and gbl.outPath and (not gbl.outfile): if (not outfile.startswith('/')) and gbl.outPath and (not gbl.outfile):
if gbl.outPath[0] in '.\\/': if gbl.outPath[0] in '.\\/':
outfile = "%s/%s" % (gbl.outPath, outfile) outfile = "%s/%s" % (gbl.outPath, outfile)
else: else:
head, tail = os.path.split(outfile) head, tail = os.path.split(outfile)
outfile = "%s/%s/%s" % (head, gbl.outPath, tail) outfile = "%s/%s/%s" % (head, gbl.outPath, tail)
fileExist = os.path.exists(outfile) fileExist = os.path.exists(outfile)
@ -285,11 +285,11 @@ fileExist = os.path.exists(outfile)
""" """
for n in gbl.tnames.values(): for n in gbl.tnames.values():
if n.channel: if n.channel:
n.doMidiClear() n.doMidiClear()
n.clearPending() n.clearPending()
if n.riff: if n.riff:
warning("%s has pending Riff(s)" % n.name) warning("%s has pending Riff(s)" % n.name)
""" Check all the tracks and find total number used. When """ Check all the tracks and find total number used. When
initializing each track (class) we made an initial entry initializing each track (class) we made an initial entry
@ -297,36 +297,36 @@ for n in gbl.tnames.values():
track only has one entry we can safely skip the entire track. track only has one entry we can safely skip the entire track.
""" """
trackCount=1 # account for meta track trackCount=1 # account for meta track
for n in sorted(gbl.mtrks.keys())[1:]: # check all but 0 (meta) for n in sorted(gbl.mtrks.keys())[1:]: # check all but 0 (meta)
if len(gbl.mtrks[n].miditrk) > 1: if len(gbl.mtrks[n].miditrk) > 1:
trackCount += 1 trackCount += 1
if trackCount == 1: # only meta track if trackCount == 1: # only meta track
if fileExist: if fileExist:
print print
print "No data created. Did you remember to set a groove/sequence?" print "No data created. Did you remember to set a groove/sequence?"
if fileExist: if fileExist:
print "Existing file '%s' has not been modified." % outfile print "Existing file '%s' has not been modified." % outfile
sys.exit(1) sys.exit(1)
lyric.leftovers() lyric.leftovers()
if fileExist: if fileExist:
print "Overwriting existing", print "Overwriting existing",
else: else:
print "Creating new", print "Creating new",
print "midi file (%s bars): '%s'" % (gbl.barNum, outfile) print "midi file (%s bars): '%s'" % (gbl.barNum, outfile)
try: try:
out = file(outfile, 'wb') out = file(outfile, 'wb')
except: except:
error("Can't open file '%s' for writing." % outfile) error("Can't open file '%s' for writing" % outfile)
MMA.midi.writeTracks(out) MMA.midi.writeTracks(out)
out.close() out.close()
if gbl.debug: if gbl.debug:
print "Completed processing file '%s'." % outfile print "Completed processing file '%s'." % outfile

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
This class is used to parse lines of MDEFINE and stores This class is used to parse lines of MDEFINE and stores
the sequences for later recall. the sequences for later recall.
@ -31,58 +31,58 @@ from MMA.common import *
import MMA.midiC import MMA.midiC
class Mdefine: class Mdefine:
def __init__(self): def __init__(self):
self.defs = {} self.defs = {}
def get(self, name): def get(self, name):
""" Return a predefine MIDI pattern.""" """ Return a predefine MIDI pattern."""
try: try:
return self.defs[name] return self.defs[name]
except: except:
error("The MDEFINE pattern %s has not been defined." % name) error("The MDEFINE pattern %s has not been defined" % name)
def set(self, name, ln): def set(self, name, ln):
""" Parse a MDEFINE line. """ Parse a MDEFINE line.
The line must be in the form: The line must be in the form:
NAME <beat> <ctrl> <dat> [; ...] NAME <beat> <ctrl> <dat> [; ...]
""" """
name = name.upper() name = name.upper()
ln=ln.rstrip('; ') # dump trailing ';' and whitespace ln=ln.rstrip('; ') # dump trailing ';' and whitespace
ln = ln.split(';') ln = ln.split(';')
evs = [] evs = []
for l in ln: for l in ln:
l=l.split() l=l.split()
if len(l) == 1: if len(l) == 1:
evs.extend( self.get(l[0].upper() )) evs.extend( self.get(l[0].upper() ))
continue continue
if len(l) != 3: if len(l) != 3:
error("MDEFINE sequence must have 3 values: Beat, Ctrl, Datum") error("MDEFINE sequence must have 3 values: Beat, Ctrl, Datum")
off=stof(l[0], "Value for offset must be integer/float") off=stof(l[0], "Value for offset must be integer/float")
c=MMA.midiC.ctrlToValue(l[1]) c=MMA.midiC.ctrlToValue(l[1])
if c < 0: if c < 0:
c=stoi(l[1]) c=stoi(l[1])
if c < 0 or c > 0x7f: if c < 0 or c > 0x7f:
error("Controller values must be 0x00 to 0x7f.") error("Controller values must be 0x00 to 0x7f")
d=stoi(l[2]) d=stoi(l[2])
if d < 0 or d > 0x7f: if d < 0 or d > 0x7f:
error("MIDI Control Datum value must be 0x00 to 0x7f.") error("MIDI Control Datum value must be 0x00 to 0x7f")
evs.append( [off, chr(c) + chr(d)]) evs.append( [off, chr(c) + chr(d)])
self.defs[name]=evs self.defs[name]=evs
mdef = Mdefine() mdef = Mdefine()

View File

@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -32,142 +32,142 @@ import MMA.midiC
splitChannels = [] splitChannels = []
def setSplitChannels(ln): def setSplitChannels(ln):
""" Parser routine, sets up list of track to split. Overwrites existing. """ """ Parser routine, sets up list of track to split. Overwrites existing. """
global splitChannels global splitChannels
splitChannels = [] splitChannels = []
for a in ln: for a in ln:
c = stoi(a) c = stoi(a)
if c < 1 or c >16: if c < 1 or c >16:
error("SplitChannels: Expecting value 1 to 16, not %s." % c) error("SplitChannels: Expecting value 1 to 16, not %s" % c)
splitChannels.append(c) splitChannels.append(c)
if gbl.debug: if gbl.debug:
print "SplitChannels: ", print "SplitChannels: ",
printList(splitChannels) printList(splitChannels)
#################### ####################
def writeTracks(out): def writeTracks(out):
""" Write the accumulated MIDI tracks to file. """ """ Write the accumulated MIDI tracks to file. """
keys=gbl.mtrks.keys() keys=gbl.mtrks.keys()
keys.sort() keys.sort()
""" For type 0 MIDI files all data is contained in 1 track. """ For type 0 MIDI files all data is contained in 1 track.
We take all our tracks and copy them to track 0, then We take all our tracks and copy them to track 0, then
set up keys[] so that only track 0 remains. set up keys[] so that only track 0 remains.
""" """
if gbl.midiFileType == 0: if gbl.midiFileType == 0:
trk0=gbl.mtrks[0].miditrk trk0=gbl.mtrks[0].miditrk
for n in keys[1:]: for n in keys[1:]:
trk=gbl.mtrks[n].miditrk trk=gbl.mtrks[n].miditrk
for k,v in trk.items(): for k,v in trk.items():
if k in trk0: if k in trk0:
trk0[k].extend(v) trk0[k].extend(v)
else: else:
trk0[k]=v trk0[k]=v
keys=[0] keys=[0]
# Write header # Write header
tcount = len(keys) tcount = len(keys)
out.write( mkHeader(tcount, gbl.BperQ, gbl.midiFileType) ) out.write( mkHeader(tcount, gbl.BperQ, gbl.midiFileType) )
# Write data chunks for each track # Write data chunks for each track
for n in keys: for n in keys:
if len(gbl.mtrks[n].miditrk): if len(gbl.mtrks[n].miditrk):
if gbl.debug: if gbl.debug:
print "Writing <%s> ch=%s;" % \ print "Writing <%s> ch=%s;" % \
(gbl.mtrks[n].trackname, n), (gbl.mtrks[n].trackname, n),
if n in splitChannels and gbl.midiFileType:
tcount += writeSplitTrack(n, out)
else:
gbl.mtrks[n].writeMidiTrack(out)
if n in splitChannels and gbl.midiFileType: """ We have increased the track count! So, we need to
tcount += writeSplitTrack(n, out) fix the file header. This is offset 10/11 which contains
else: the number of tracks. The counter tcount has been
gbl.mtrks[n].writeMidiTrack(out) tracking this, so just seek, replace and seek back.
"""
""" We have increased the track count! So, we need to if tcount != len(keys):
fix the file header. This is offset 10/11 which contains out.seek(0)
the number of tracks. The counter tcount has been out.write( mkHeader(tcount, gbl.BperQ, gbl.midiFileType) )
tracking this, so just seek, replace and seek back. out.seek(0, 2) # return to eof
"""
if tcount != len(keys):
out.seek(0)
out.write( mkHeader(tcount, gbl.BperQ, gbl.midiFileType) )
out.seek(0, 2) # return to eof
def writeSplitTrack(channel, out): def writeSplitTrack(channel, out):
""" Split a drum track into a separate track for the non-note """ Split a drum track into a separate track for the non-note
stuff and then a track for each note. stuff and then a track for each note.
""" """
tr = gbl.mtrks[channel].miditrk # track to split tr = gbl.mtrks[channel].miditrk # track to split
""" A dict to store the split midi tracks. We'll end out with """ A dict to store the split midi tracks. We'll end out with
a track for each pitch which appears in the track and a track for each pitch which appears in the track and
a track (labeled -1) to store every other than note on data. a track (labeled -1) to store every other than note on data.
""" """
notes={} notes={}
onEvent = 0x90 + (channel-1) onEvent = 0x90 + (channel-1)
offEvent = 0x80 + (channel-1) offEvent = 0x80 + (channel-1)
for offset in tr.keys(): for offset in tr.keys():
for x in range(len(tr[offset])-1, -1, -1): for x in range(len(tr[offset])-1, -1, -1):
ev = tr[offset][x] ev = tr[offset][x]
if len(ev) == 3 and ( ord(ev[0]) in (onEvent, offEvent)): if len(ev) == 3 and ( ord(ev[0]) in (onEvent, offEvent)):
n = ord(ev[1]) n = ord(ev[1])
else: else:
n = -1 # special value for non-note on events n = -1 # special value for non-note on events
if not notes.has_key(n): # create a new mtrk if needed if not notes.has_key(n): # create a new mtrk if needed
notes[n]=Mtrk(10) notes[n]=Mtrk(10)
if offset in notes[n].miditrk: # copy event to new track if offset in notes[n].miditrk: # copy event to new track
notes[n].miditrk[offset].append(ev) notes[n].miditrk[offset].append(ev)
else: else:
notes[n].miditrk[offset]=[ev] notes[n].miditrk[offset]=[ev]
if gbl.debug: if gbl.debug:
print " Data has been split into %s tracks." % len(notes) print " Data has been split into %s tracks." % len(notes)
# Insert a channel name in all the new tracks. # Insert a channel name in all the new tracks.
for a in notes.keys(): for a in notes.keys():
if a == -1: if a == -1:
continue continue
if channel == 10: if channel == 10:
m = "%s" % MMA.midiC.valueToDrum(a) m = "%s" % MMA.midiC.valueToDrum(a)
else: else:
m= "%s-%s" % (gbl.mtrks[channel].trackname, a) m= "%s-%s" % (gbl.mtrks[channel].trackname, a)
notes[a].addTrkName(0, m) notes[a].addTrkName(0, m)
for a in sorted(notes.keys()): for a in sorted(notes.keys()):
notes[a].writeMidiTrack(out) notes[a].writeMidiTrack(out)
""" The split tracks have been written. Return the number of additional tracks """ The split tracks have been written. Return the number of additional tracks
so that the caller can properly update the midi file header. Note that so that the caller can properly update the midi file header. Note that
len(notes)-1 IS CORRECT ... we've already figured on writing 1 track. len(notes)-1 IS CORRECT ... we've already figured on writing 1 track.
""" """
return len(notes)-1 return len(notes)-1
def mkHeader(count, tempo, Mtype): def mkHeader(count, tempo, Mtype):
return "MThd" + intToLong(6) + intToWord(Mtype) + \ return "MThd" + intToLong(6) + intToWord(Mtype) + \
intToWord(count) + intToWord(tempo) intToWord(count) + intToWord(tempo)
""" Midi track class. All the midi creation is done here. """ Midi track class. All the midi creation is done here.
@ -176,384 +176,394 @@ def mkHeader(count, tempo, Mtype):
class Mtrk: class Mtrk:
def __init__(self, channel): def __init__(self, channel):
self.miditrk={} self.miditrk={}
self.channel = channel-1 self.channel = channel-1
self.trackname = '' self.trackname = ''
self.lastEvent = [None] * 129 self.lastEvent = [None] * 129
def delDup(self, offset, cmd): def delDup(self, offset, cmd):
"""Delete a duplicate event. Used by timesig, etc. """ """Delete a duplicate event. Used by timesig, etc. """
tr=self.miditrk tr=self.miditrk
lg=len(cmd) lg=len(cmd)
if tr.has_key(offset): if tr.has_key(offset):
for i,a in enumerate(tr[offset]): for i,a in enumerate(tr[offset]):
if a[0:lg] == cmd: if a[0:lg] == cmd:
del tr[offset][i] del tr[offset][i]
def addTimeSig(self, offset, nn, dd, cc, bb): def addTimeSig(self, offset, nn, dd, cc, bb):
""" Create a midi time signature. """ Create a midi time signature.
delta - midi delta offset delta - midi delta offset
nn = sig numerator, beats per measure nn = sig numerator, beats per measure
dd - sig denominator, 2=quarter note, 3=eighth, dd - sig denominator, 2=quarter note, 3=eighth,
cc - midi clocks/tick cc - midi clocks/tick
bb - # of 32nd notes in quarter (normally 8) bb - # of 32nd notes in quarter (normally 8)
This is only called by timeSig.set(). Don't This is only called by timeSig.set(). Don't
call this directly since the timeSig.set() checks for call this directly since the timeSig.set() checks for
duplicate settings. duplicate settings.
""" """
cmd = chr(0xff) + chr(0x58) cmd = chr(0xff) + chr(0x58)
self.delDup(offset, cmd) # NEEDED??? self.delDup(offset, cmd) # NEEDED???
self.addToTrack(offset, cmd + chr(0x04) + \ self.addToTrack(offset, cmd + chr(0x04) + \
chr(nn) + chr(dd) + chr(cc) + chr(bb) ) chr(nn) + chr(dd) + chr(cc) + chr(bb) )
def addKeySig(self, offset, n, mi): def addKeySig(self, offset, n, mi):
""" Set the midi key signature. """ """ Set the midi key signature. """
cmd = chr(0xff) + chr(0x59) cmd = chr(0xff) + chr(0x59)
self.delDup(offset, cmd) self.delDup(offset, cmd)
self.addToTrack(offset, cmd + chr(0x02) + chr(n) + chr(mi) ) self.addToTrack(offset, cmd + chr(0x02) + chr(n) + chr(mi) )
def addMarker(self, offset, msg): def addMarker(self, offset, msg):
""" Create a midi MARKER event.""" """ Create a midi MARKER event."""
self.addToTrack(offset, chr(0xff) + chr(0x06) + intToVarNumber(len(msg)) + msg ) self.addToTrack(offset, chr(0xff) + chr(0x06) + intToVarNumber(len(msg)) + msg )
def addText(self, offset, msg): def addText(self, offset, msg):
""" Create a midi TextEvent.""" """ Create a midi TextEvent."""
self.addToTrack( offset, chr(0xff) + chr(0x01) + intToVarNumber(len(msg)) + msg ) self.addToTrack( offset, chr(0xff) + chr(0x01) + intToVarNumber(len(msg)) + msg )
def addLyric(self, offset, msg): def addLyric(self, offset, msg):
""" Create a midi lyric event. """ """ Create a midi lyric event. """
self.addToTrack( offset, self.addToTrack( offset,
chr(0xff) + chr(0x05) + intToVarNumber(len(msg)) + msg ) chr(0xff) + chr(0x05) + intToVarNumber(len(msg)) + msg )
def addTrkName(self, offset, msg): def addTrkName(self, offset, msg):
""" Creates a midi track name event. """ """ Creates a midi track name event. """
offset = 0 # ignore user offset, always put this at 0 offset = 0 # ignore user offset, always put this at 0
self.trackname = msg self.trackname = msg
cmd = chr(0xff) + chr(0x03) cmd = chr(0xff) + chr(0x03)
self.delDup(offset, cmd) self.delDup(offset, cmd)
self.addToTrack(offset, cmd + intToVarNumber(len(msg)) + msg ) self.addToTrack(offset, cmd + intToVarNumber(len(msg)) + msg )
def addProgChange( self, offset, program): def addProgChange( self, offset, program):
""" Create a midi program change. """ Create a midi program change.
program - midi program program - midi program
Returns - packed string Returns - packed string
""" """
self.addToTrack(offset, self.addToTrack(offset,
chr(0xc0 | self.channel) + chr(program) ) chr(0xc0 | self.channel) + chr(program) )
def addGlis(self, offset, v): def addGlis(self, offset, v):
""" Set the portamento. LowLevel MIDI. """ Set the portamento. LowLevel MIDI.
This does 2 things: This does 2 things:
1. turns portamento on/off, 1. turns portamento on/off,
2. sets the LSN rate. 2. sets the LSN rate.
""" """
if v == 0: if v == 0:
self.addToTrack(offset, self.addToTrack(offset,
chr(0xb0 | self.channel) + chr(0x41) + chr(0x00) ) chr(0xb0 | self.channel) + chr(0x41) + chr(0x00) )
else: else:
self.addToTrack(offset, self.addToTrack(offset,
chr(0xb0 | self.channel) + chr(0x41) + chr(0x7f) ) chr(0xb0 | self.channel) + chr(0x41) + chr(0x7f) )
self.addToTrack(offset, self.addToTrack(offset,
chr(0xb0 | self.channel) + chr(0x05) + chr(v) ) chr(0xb0 | self.channel) + chr(0x05) + chr(v) )
def addPan(self, offset, v): def addPan(self, offset, v):
""" Set the lsb of the pan setting.""" """ Set the lsb of the pan setting."""
self.addToTrack(offset, self.addToTrack(offset,
chr(0xb0 | self.channel) + chr(0x0a) + chr(v) ) chr(0xb0 | self.channel) + chr(0x0a) + chr(v) )
def addCtl(self, offset, l): def addCtl(self, offset, l):
""" Add arbitary control sequence to track.""" """ Add arbitary control sequence to track."""
self.addToTrack(offset, chr(0xb0 | self.channel) + l) self.addToTrack(offset, chr(0xb0 | self.channel) + l)
def addNoteOff(self, offset): def addNoteOff(self, offset):
""" Insert a "All Note Off" into the midi stream. """ Insert a "All Note Off" into the midi stream.
Called from the cutTrack() function. Called from the cutTrack() function.
""" """
self.addToTrack(offset, self.addToTrack(offset,
chr(0xb0 | self.channel) + chr(0x7b) + chr(0) ) chr(0xb0 | self.channel) + chr(0x7b) + chr(0) )
def addChannelVol(self, offset, v): def addChannelVol(self, offset, v):
""" Set the midi channel volume.""" """ Set the midi channel volume."""
self.addToTrack(offset, self.addToTrack(offset,
chr(0xb0 | self.channel) + chr(0x07) + chr(v) ) chr(0xb0 | self.channel) + chr(0x07) + chr(v) )
def addTempo(self, offset, beats): def addTempo(self, offset, beats):
""" Create a midi tempo meta event. """ Create a midi tempo meta event.
beats - beats per second beats - beats per second
Return - packed midi string Return - packed midi string
""" """
cmd = chr(0xff) + chr(0x51) cmd = chr(0xff) + chr(0x51)
self.delDup(offset, cmd) self.delDup(offset, cmd)
self.addToTrack( offset, cmd + chr(0x03) + intTo3Byte(60000000/beats) ) self.addToTrack( offset, cmd + chr(0x03) + intTo3Byte(60000000/beats) )
def writeMidiTrack(self, out): def writeMidiTrack(self, out):
""" Create/write the MIDI track. """ Create/write the MIDI track.
We convert timing offsets to midi-deltas. We convert timing offsets to midi-deltas.
""" """
tr=self.miditrk tr=self.miditrk
if gbl.debug: """ To every MIDI track we generate we add (if the -0 flag
ttl = 0 was set) an on/off beep at offset 0. This makes for
lg=1 easier sync in multi-tracks.
for t in tr: """
a=len(tr[t])
if a > lg:
lg = a
ttl += a
print "Unique ts: %s; Ttl events %s; Average ev/ts %.2f" % \
(len(tr), ttl, float(ttl)/len(tr) )
last = 0 if gbl.synctick and self.channel >= 0:
self.addToTrack(0, chr(0x90 | self.channel) + chr(80) + chr(90) )
self.addToTrack(1, chr(0x90 | self.channel) + chr(80) + chr(0) )
if gbl.debug:
ttl = 0
lg=1
for t in tr:
a=len(tr[t])
if a > lg:
lg = a
ttl += a
print "Unique ts: %s; Ttl events %s; Average ev/ts %.2f" % \
(len(tr), ttl, float(ttl)/len(tr) )
# Convert all events to MIDI deltas and store in last = 0
# the track array/list
tdata=[] # empty track container # Convert all events to MIDI deltas and store in
lastSts=None # Running status tracker # the track array/list
for a in sorted(tr.keys()): tdata=[] # empty track container
delta = a-last lastSts=None # Running status tracker
for d in tr[a]:
""" Running status check. For each packet compare for a in sorted(tr.keys()):
the first byte with the first byte of the previous delta = a-last
packet. If it is can be converted to running status for d in tr[a]:
we strip out byte 0. Note that valid running status
byte are 0x80..0xef. 0xfx are system messages
and are note suitable for running status.
"""
if len(d) > 1: """ Running status check. For each packet compare
if d[0] == lastSts: the first byte with the first byte of the previous
d=d[1:] packet. If it is can be converted to running status
else: we strip out byte 0. Note that valid running status
lastSts = d[0] byte are 0x80..0xef. 0xfx are system messages
s=ord(lastSts) and are note suitable for running status.
if s < 0x80 or s > 0xef or not gbl.runningStatus: """
lastSts = None
tdata.extend( [ intToVarNumber(delta) , d ] ) if len(d) > 1:
delta = 0 if d[0] == lastSts:
last = a d=d[1:]
else:
lastSts = d[0]
s=ord(lastSts)
if s < 0x80 or s > 0xef or not gbl.runningStatus:
lastSts = None
# Add an EOF to the track (included in total track size) tdata.extend( [ intToVarNumber(delta) , d ] )
delta = 0
last = a
tdata.append( intToVarNumber(0)) # Add an EOF to the track (included in total track size)
tdata.append( chr(0xff) + chr(0x2f) + chr(0x00) )
tdata = ''.join(tdata) tdata.append( intToVarNumber(0))
totsize = len(tdata) tdata.append( chr(0xff) + chr(0x2f) + chr(0x00) )
out.write("MTrk") tdata = ''.join(tdata)
out.write(intToLong(totsize)) totsize = len(tdata)
out.write( tdata )
out.write("MTrk")
out.write(intToLong(totsize))
out.write( tdata )
def addPairToTrack(self, boffset, startRnd, duration, note, v, unify):
""" Add a note on/off pair to a track.
boffset - offset into current bar def addPairToTrack(self, boffset, startRnd, duration, note, v, unify):
startRnd - rand val start adjustment """ Add a note on/off pair to a track.
duration - note len
note - midi value of note
v - midi velocity
unify - if set attempt to unify/compress on/offs
This function tries its best to handle overlapping events. boffset - offset into current bar
Easy to show effect with a table of note ON/OFF pairs. Both startRnd - rand val start adjustment
events are for the same note pitch. duration - note len
note - midi value of note
v - midi velocity
unify - if set attempt to unify/compress on/offs
Offsets | 200 | 300 | 320 | 420 This function tries its best to handle overlapping events.
---------|--------|--------|-------|-------- Easy to show effect with a table of note ON/OFF pairs. Both
Pair1 | on | | off | events are for the same note pitch.
Pair2 | | on | | off
The logic here will delete the OFF event at 320 and Offsets | 200 | 300 | 320 | 420
insert a new OFF at 300. Result is that when playing ---------|--------|--------|-------|--------
Pair1 will turn off at 300 followed by the same note Pair1 | on | | off |
in Pair2 beginning sounded right after. Why the on/off? Pair2 | | on | | off
Remember: Velocities may be different!
However, if the unify flag is set we should end up with: The logic here will delete the OFF event at 320 and
insert a new OFF at 300. Result is that when playing
Pair1 will turn off at 300 followed by the same note
in Pair2 beginning sounded right after. Why the on/off?
Remember: Velocities may be different!
Offsets | 200 | 300 | 320 | 420 However, if the unify flag is set we should end up with:
---------|--------|--------|-------|--------
Pair1 | on | | |
Pair2 | | | | off
Offsets | 200 | 300 | 320 | 420
---------|--------|--------|-------|--------
Pair1 | on | | |
Pair2 | | | | off
"""
# Start/end offsets """
onOffset = getOffset( boffset, startRnd) # Start/end offsets
offOffset = onOffset + duration
# ON/OFF events onOffset = getOffset( boffset, startRnd)
offOffset = onOffset + duration
onEvent = chr(0x90 | self.channel) + chr(note) + chr(v) # ON/OFF events
offEvent = onEvent[:-1] + chr(0)
""" Check for overlap on last event set for this track and onEvent = chr(0x90 | self.channel) + chr(note) + chr(v)
do some ugly trickry. offEvent = onEvent[:-1] + chr(0)
- The noOnFlag is set if we don't want to have the main """ Check for overlap on last event set for this track and
routine add in the ON event. This is set when UNIFY is do some ugly trickry.
set and we have an overlap.
- We set F to the stored event time for this note and, - The noOnFlag is set if we don't want to have the main
if it's in the same event range as the current event routine add in the ON event. This is set when UNIFY is
we loop though the saved events for this track. We are set and we have an overlap.
looking for a NOTE OFF event.
- If we get a matching event we then delete it from the - We set F to the stored event time for this note and,
track. This requires 2 statements: one for an event if it's in the same event range as the current event
list with only 1 event, a 2nd for multiple events. we loop though the saved events for this track. We are
looking for a NOTE OFF event.
- If UNIFY is NOT set we insert a NOTE OFF at the current - If we get a matching event we then delete it from the
on time. This replaces the OFF we just deleted. track. This requires 2 statements: one for an event
list with only 1 event, a 2nd for multiple events.
- If UNIFY is SET we skip the above step, and we set the - If UNIFY is NOT set we insert a NOTE OFF at the current
noOnFlag so that the ON event isn't set. on time. This replaces the OFF we just deleted.
""" - If UNIFY is SET we skip the above step, and we set the
noOnFlag so that the ON event isn't set.
noOnFlag = None """
f=self.lastEvent[note] noOnFlag = None
if f >= onOffset and f <= offOffset:
tr=self.miditrk
for i in range(len(tr[f])):
if tr[f][i] == offEvent:
if len(tr[f]) == 1:
del(tr[f])
else:
del(tr[f][i])
if not unify:
self.addToTrack(onOffset, offEvent)
else:
noOnFlag=1
break
if not noOnFlag: f=self.lastEvent[note]
self.addToTrack(onOffset, onEvent ) if f >= onOffset and f <= offOffset:
self.addToTrack(offOffset, offEvent ) tr=self.miditrk
for i in range(len(tr[f])):
if tr[f][i] == offEvent:
if len(tr[f]) == 1:
del(tr[f])
else:
del(tr[f][i])
if not unify:
self.addToTrack(onOffset, offEvent)
else:
noOnFlag=1
break
# Save the NOTE OFF time for the next loop. if not noOnFlag:
self.addToTrack(onOffset, onEvent )
self.addToTrack(offOffset, offEvent )
self.lastEvent[note] = offOffset # Save the NOTE OFF time for the next loop.
self.lastEvent[note] = offOffset
def zapRangeTrack(self, start, end):
""" Clear NoteOn events from track in range: start ... end.
This is called from the fermata function. def zapRangeTrack(self, start, end):
""" Clear NoteOn events from track in range: start ... end.
We delete the entire event list (3 bytes) from the buffer. This This is called from the fermata function.
can result in empty directory enteries, but that isn't a problem.
"""
trk=self.miditrk We delete the entire event list (3 bytes) from the buffer. This
for a in trk: can result in empty directory enteries, but that isn't a problem.
if a>=start and a<=end: """
for i in range(len(trk[a])-1, -1, -1):
e = trk[a][i]
if len(e)==3 and ord(e[0]) & 0xF0 == 0x90 and ord(e[2]):
del trk[a][i]
trk=self.miditrk
for a in trk:
if a>=start and a<=end:
for i in range(len(trk[a])-1, -1, -1):
e = trk[a][i]
if len(e)==3 and ord(e[0]) & 0xF0 == 0x90 and ord(e[2]):
del trk[a][i]
def addToTrack(self, offset, event):
""" Add an event to a track.
MIDI data is saved as created in track structures. def addToTrack(self, offset, event):
Each track has a miditrk dictionary entry which used """ Add an event to a track.
the time offsets and keys and has the various events
as data. Each event is packed string of bytes and
the events are stored as a list in the order they are
created. Our storage looks like:
miditrk[123] = [event1, event2, ...] MIDI data is saved as created in track structures.
""" Each track has a miditrk dictionary entry which used
the time offsets and keys and has the various events
as data. Each event is packed string of bytes and
the events are stored as a list in the order they are
created. Our storage looks like:
if offset<0: miditrk[123] = [event1, event2, ...]
offset=0 """
tr=self.miditrk if offset<0:
offset=0
if offset in tr: tr=self.miditrk
tr[offset].append(event)
else: if offset in tr:
tr[offset]=[event] tr[offset].append(event)
else:
tr[offset]=[event]
class TimeSig: class TimeSig:
""" Track and set the current time signature. """ Track and set the current time signature.
Timesigs are completely optional and are inserted into Timesigs are completely optional and are inserted into
the MIDI file by addTimeSig(). MMA routines ignore timesig the MIDI file by addTimeSig(). MMA routines ignore timesig
settings. settings.
""" """
def __init__(self): def __init__(self):
""" Initialze to null value, user will never set to this.""" """ Initialze to null value, user will never set to this."""
self.lastsig = (None,None) self.lastsig = (None,None)
def set(self, nn, dd): def set(self, nn, dd):
""" Set timesig. If no change from last value, ignore. """ """ Set timesig. If no change from last value, ignore. """
if self.lastsig != (nn, dd): if self.lastsig != (nn, dd):
gbl.mtrks[0].addTimeSig(gbl.tickOffset, nn, dd, 48, 8) gbl.mtrks[0].addTimeSig(gbl.tickOffset, nn, dd, 48, 8)
self.lastsig = (nn, dd) self.lastsig = (nn, dd)
def get(self): def get(self):
""" Return existing timesig. """ """ Return existing timesig. """
return self.lastsig return self.lastsig
timeSig = TimeSig() timeSig = TimeSig()

View File

@ -18,207 +18,72 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
This module contains the constant names for the various This module contains interface for MIDI constants and conversion routines.
MIDI controllers, and conversion routines.
""" """
from MMA.common import * from MMA.common import *
from MMA.miditables import *
""" English names for midi instruments and drums.
These tables are used by the pattern classes to
convert inst/drum names to midi values and by the
doc routines to print tables.
"""
# The drum names are valid for tones 27 to 87
drumNames=[
'HighQ', 'Slap', 'ScratchPush', 'ScratchPull',
'Sticks', 'SquareClick', 'MetronomeClick',
'MetronomeBell', 'KickDrum2', 'KickDrum1',
'SideKick', 'SnareDrum1', 'HandClap',
'SnareDrum2', 'LowTom2', 'ClosedHiHat',
'LowTom1', 'PedalHiHat', 'MidTom2', 'OpenHiHat',
'MidTom1', 'HighTom2', 'CrashCymbal1',
'HighTom1', 'RideCymbal1', 'ChineseCymbal',
'RideBell', 'Tambourine', 'SplashCymbal',
'CowBell', 'CrashCymbal2', 'VibraSlap',
'RideCymbal2', 'HighBongo', 'LowBongo',
'MuteHighConga', 'OpenHighConga', 'LowConga',
'HighTimbale', 'LowTimbale', 'HighAgogo',
'LowAgogo', 'Cabasa', 'Maracas',
'ShortHiWhistle', 'LongLowWhistle', 'ShortGuiro',
'LongGuiro', 'Claves', 'HighWoodBlock',
'LowWoodBlock', 'MuteCuica', 'OpenCuica',
'MuteTriangle', 'OpenTriangle', 'Shaker',
'JingleBell', 'Castanets', 'MuteSudro',
'OpenSudro' ]
upperDrumNames = [name.upper() for name in drumNames]
voiceNames=[
'Piano1', 'Piano2','Piano3',
'Honky-TonkPiano', 'RhodesPiano', 'EPiano',
'HarpsiChord', 'Clavinet', 'Celesta',
'Glockenspiel', 'MusicBox', 'Vibraphone',
'Marimba', 'Xylophone', 'TubularBells', 'Santur',
'Organ1', 'Organ2', 'Organ3', 'ChurchOrgan',
'ReedOrgan', 'Accordion', 'Harmonica',
'Bandoneon', 'NylonGuitar', 'SteelGuitar',
'JazzGuitar', 'CleanGuitar', 'MutedGuitar',
'OverDriveGuitar', 'DistortonGuitar',
'GuitarHarmonics', 'AcousticBass',
'FingeredBass', 'PickedBass', 'FretlessBass',
'SlapBass1', 'SlapBass2', 'SynthBass1',
'SynthBass2', 'Violin', 'Viola', 'Cello',
'ContraBass', 'TremoloStrings',
'PizzicatoString', 'OrchestralHarp', 'Timpani',
'Strings', 'SlowStrings', 'SynthStrings1',
'SynthStrings2', 'ChoirAahs', 'VoiceOohs',
'SynthVox', 'OrchestraHit', 'Trumpet',
'Trombone', 'Tuba', 'MutedTrumpet', 'FrenchHorn',
'BrassSection', 'SynthBrass1', 'SynthBrass2',
'SopranoSax', 'AltoSax', 'TenorSax',
'BaritoneSax', 'Oboe', 'EnglishHorn', 'Bassoon',
'Clarinet', 'Piccolo', 'Flute', 'Recorder',
'PanFlute', 'BottleBlow', 'Shakuhachi',
'Whistle', 'Ocarina', 'SquareWave', 'SawWave',
'SynCalliope', 'ChifferLead', 'Charang',
'SoloVoice', '5thSawWave', 'Bass&Lead',
'Fantasia', 'WarmPad', 'PolySynth', 'SpaceVoice',
'BowedGlass', 'MetalPad', 'HaloPad', 'SweepPad',
'IceRain', 'SoundTrack', 'Crystal', 'Atmosphere',
'Brightness', 'Goblins', 'EchoDrops',
'StarTheme', 'Sitar', 'Banjo', 'Shamisen',
'Koto', 'Kalimba', 'BagPipe', 'Fiddle', 'Shanai',
'TinkleBell', 'AgogoBells', 'SteelDrums',
'WoodBlock', 'TaikoDrum', 'MelodicTom1',
'SynthDrum', 'ReverseCymbal', 'GuitarFretNoise',
'BreathNoise', 'SeaShore', 'BirdTweet',
'TelephoneRing', 'HelicopterBlade',
'Applause/Noise', 'GunShot' ]
upperVoiceNames = [name.upper() for name in voiceNames]
ctrlNames = [
### also see: http://www.midi.org/about-midi/table3.shtml
### 0-31 Double Precise Controllers
### MSB (14-bits, 16,384 values)
'Bank', 'Modulation', 'Breath', 'Ctrl3',
'Foot', 'Portamento', 'Data', 'Volume',
'Balance', 'Ctrl9', 'Pan', 'Expression',
'Effect1', 'Effect2', 'Ctrl14', 'Ctrl15',
'General1','General2','General3','General4',
'Ctrl20', 'Ctrl21', 'Ctrl22', 'Ctrl23',
'Ctrl24', 'Ctrl25', 'Ctrl26', 'Ctrl27',
'Ctrl28', 'Ctrl29', 'Ctrl30', 'Ctrl31',
### 32-63 Double Precise Controllers
### LSB (14-bits, 16,384 values)
'BankLSB', 'ModulationLSB', 'BreathLSB',
'Ctrl35', 'FootLSB', 'PortamentoLSB',
'DataLSB','VolumeLSB','BalanceLSB',
'Ctrl41','PanLSB','ExpressionLSB',
'Effect1LSB', 'Effect2LSB','Ctrl46', 'Ctrl47',
'General1LSB','General2LSB', 'General3LSB',
'General4LSB', 'Ctrl52','Ctrl53', 'Ctrl54',
'Ctrl55', 'Ctrl56', 'Ctrl57', 'Ctrl58',
'Ctrl59', 'Ctrl60', 'Ctrl61', 'Ctrl62',
'Ctrl63',
### 64-119 Single Precise Controllers
### (7-bits, 128 values)
'Sustain', 'Portamento', 'Sostenuto',
'SoftPedal', 'Legato', 'Hold2', 'Variation',
'Resonance', 'ReleaseTime','AttackTime', 'Brightness',
'DecayTime','VibratoRate','VibratoDepth', 'VibratoDelay',
'Ctrl79','General5','General6','General7',
'General8','PortamentoCtrl','Ctrl85','Ctrl86',
'Ctrl87', 'Ctrl88', 'Ctrl89', 'Ctrl90',
'Reverb', 'Tremolo', 'Chorus','Detune',
'Phaser', 'DataInc','DataDec',
'NonRegLSB', 'NonRegMSB',
'RegParLSB', 'RegParMSB',
'Ctrl102','Ctrl103','Ctrl104','Ctrl105',
'Ctrl106','Ctrl107','Ctrl108','Ctrl109',
'Ctrl110','Ctrl111','Ctrl112','Ctrl113',
'Ctrl114','Ctrl115','Ctrl116','Ctrl117',
'Ctrl118','Ctrl119',
### 120-127 Channel Mode Messages
'AllSoundsOff','ResetAll',
'LocalCtrl','AllNotesOff',
'OmniOff','OmniOn', 'PolyOff','PolyOn' ]
upperCtrlNames = [name.upper() for name in ctrlNames]
def drumToValue(name): def drumToValue(name):
""" Get the value of the drum tone (-1==error). """ """ Get the value of the drum tone (-1==error). """
try: try:
v=int(name, 0) v=int(name, 0)
except: except:
try: try:
v = upperDrumNames.index(name.upper()) + 27 v = upperDrumNames.index(name.upper()) + 27
except ValueError: except ValueError:
error("Expecting a valid drum name or value for drum tone, not '%s'" % name) error("Expecting a valid drum name or value for drum tone, not '%s'" % name)
if v <0 or v > 127: if v <0 or v > 127:
error("Note in Drum Tone list must be 0..127, not %s" % v) error("Note in Drum Tone list must be 0..127, not %s" % v)
return v return v
def instToValue(name): def instToValue(name):
""" Get the value of the instrument name (-1==error). """ """ Get the value of the instrument name (-1==error). """
try: try:
return upperVoiceNames.index(name.upper()) return upperVoiceNames.index(name.upper())
except ValueError: except ValueError:
return -1 return -1
def ctrlToValue(name): def ctrlToValue(name):
""" Get the value of the controler name (-1==error). """ """ Get the value of the controler name (-1==error). """
try: try:
return upperCtrlNames.index(name.upper()) return upperCtrlNames.index(name.upper())
except ValueError: except ValueError:
return -1 return -1
def valueToInst(val): def valueToInst(val):
""" Get the name of the inst. (or 'ERR'). """ """ Get the name of the inst. (or 'ERR'). """
try: try:
return voiceNames[val] return voiceNames[val]
except IndexError: except IndexError:
return "ERROR" return "ERROR"
def valueToDrum(val): def valueToDrum(val):
""" Get the name of the drum tone. """ Get the name of the drum tone.
We return the NAME of the tone, or the original value if there is We return the NAME of the tone, or the original value if there is
no name associated with the value (only value 27 to 86 have names). no name associated with the value (only value 27 to 86 have names).
""" """
if val<27 or val>86: if val<27 or val>86:
return str(val) return str(val)
else: else:
return drumNames[val-27] return drumNames[val-27]
def valueToCtrl(val): def valueToCtrl(val):
""" Get the name of the controller (or 'ERR'). """ """ Get the name of the controller (or 'ERR'). """
try: try:
return ctrlNames[val] return ctrlNames[val]
except IndexError: except IndexError:
return "ERROR" return "ERROR"

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -38,482 +38,481 @@ offset = 0 # Current pointer into the MIDI file
""" Helper functions """ Helper functions
It might be better to have these It might be better to have these
functions setup in midiM.py ... but it's easier just functions setup in midiM.py ... but it's easier just
now to have it here. The main problem is that we are now to have it here. The main problem is that we are
reading from a buffer and don't know how many bytes to reading from a buffer and don't know how many bytes to
pass back and forth. pass back and forth.
""" """
def mvarlen(): def mvarlen():
""" Convert variable length midi value to int. """ """ Convert variable length midi value to int. """
global offset global offset
x=0L x=0L
for i in range(4): for i in range(4):
try: try:
byte=ord(midifile[offset]) byte=ord(midifile[offset])
offset += 1 offset += 1
except: except:
error("Invalid MIDI file include (varlen->int).") error("Invalid MIDI file include (varlen->int)")
if byte < 0x80: if byte < 0x80:
x = ( x << 7 ) + byte x = ( x << 7 ) + byte
break break
else: else:
x = ( x << 7 ) + ( byte & 0x7f ) x = ( x << 7 ) + ( byte & 0x7f )
return int(x) return int(x)
def chars(count): def chars(count):
""" Return 'count' chars from file (updates global pointer). """ """ Return 'count' chars from file (updates global pointer). """
global offset global offset
bytes=midifile[offset:offset+count] bytes=midifile[offset:offset+count]
offset+=count offset+=count
return bytes return bytes
def m1i(): def m1i():
""" Get 1 byte (updates global pointer). """ """ Get 1 byte (updates global pointer). """
global offset global offset
try: try:
byte = midifile[offset] byte = midifile[offset]
offset += 1 offset += 1
except: except:
error("Invalid MIDI file include (byte, offset=%s)." % offset) error("Invalid MIDI file include (byte, offset=%s)" % offset)
return ord(byte) return ord(byte)
def m32i(): def m32i():
""" Convert 4 bytes to integer. """ """ Convert 4 bytes to integer. """
global offset global offset
x = 0L x = 0L
for i in range(4): for i in range(4):
try: try:
byte = midifile[offset] byte = midifile[offset]
offset += 1 offset += 1
except: except:
error("Invalid MIDI file include (i32->int, offset=%s)." % offset) error("Invalid MIDI file include (i32->int, offset=%s)" % offset)
x = (x << 8) + ord(byte) x = (x << 8) + ord(byte)
return int(x) return int(x)
def m16i(): def m16i():
""" Convert 2 bytes to integer. """ """ Convert 2 bytes to integer. """
global offset global offset
x = 0L x = 0L
for i in range(2): for i in range(2):
try: try:
byte = midifile[offset] byte = midifile[offset]
offset += 1 offset += 1
except: except:
error("Invalid MIDI file include (i16->int, offset=%s)." % offset) error("Invalid MIDI file include (i16->int, offset=%s)" % offset)
x = (x << 8) + ord(byte) x = (x << 8) + ord(byte)
return int(x) return int(x)
###################################################### ######################################################
## Main function, called from parser. ## Main function, called from parser.
def midiinc(ln): def midiinc(ln):
""" Include a MIDI file into MMA generated files. """ """ Include a MIDI file into MMA generated files. """
global midifile, offset global midifile, offset
filename = '' filename = ''
doLyric = 0 doLyric = 0
doText = 0 doText = 0
volAdjust = 100 volAdjust = 100
octAdjust = 0 octAdjust = 0
transpose = None transpose = None
channels = [] channels = []
# These are the start/end points for the included file. They are in # These are the start/end points for the included file. They are in
# beats, but are adjusted after the file is opened to ticks. # beats, but are adjusted after the file is opened to ticks.
istart=0 istart=0
iend = 0xffffff iend = 0xffffff
for a in ln: for a in ln:
cmd, opt = a.split('=') cmd, opt = a.split('=')
cmd=cmd.upper() cmd=cmd.upper()
if cmd == 'FILE': if cmd == 'FILE':
filename = os.path.expanduser(opt) filename = os.path.expanduser(opt)
elif cmd == 'VOLUME': elif cmd == 'VOLUME':
volAdjust = stoi(opt) volAdjust = stoi(opt)
elif cmd == 'OCTAVE': elif cmd == 'OCTAVE':
octAdjust = stoi(opt) octAdjust = stoi(opt)
if octAdjust < -4 or octAdjust > 4: if octAdjust < -4 or octAdjust > 4:
error("Octave adjustment must be -4 to 4, not %s." % opt) error("Octave adjustment must be -4 to 4, not %s" % opt)
octAdjust *= 12 octAdjust *= 12
elif cmd == 'TRANSPOSE': elif cmd == 'TRANSPOSE':
transpose = stoi(opt) transpose = stoi(opt)
if transpose < -24 or transpose > 24: if transpose < -24 or transpose > 24:
error("Tranpose must be -24 to 24, not %s." % opt) error("Tranpose must be -24 to 24, not %s" % opt)
elif cmd == 'START': elif cmd == 'START':
istart = stof(opt) istart = stof(opt)
elif cmd == 'END': elif cmd == 'END':
iend = stof(opt) iend = stof(opt)
elif cmd == 'TEXT': elif cmd == 'TEXT':
opt=opt.upper() opt=opt.upper()
if opt in ("ON", 1): if opt in ("ON", 1):
doText=1 doText=1
elif opt in ("OFF", 0): elif opt in ("OFF", 0):
doText=0 doText=0
else: else:
error("MidiInc Text= expecting 'ON' or 'OFF'") error("MidiInc Text= expecting 'ON' or 'OFF'")
elif cmd == 'LYRIC' and opt != '0': elif cmd == 'LYRIC' and opt != '0':
opt=opt.upper() opt=opt.upper()
if opt in ("ON", 1): if opt in ("ON", 1):
doLyric=1 doLyric=1
elif opt in ("OFF", 0): elif opt in ("OFF", 0):
doLyric=0 doLyric=0
else: else:
error("MidiInc Lyric= expecting 'ON' or 'OFF'") error("MidiInc Lyric= expecting 'ON' or 'OFF'")
# make sure this is last option ... it has to be a TRACKNAME=CHANNEL-NUMBER # make sure this is last option ... it has to be a TRACKNAME=CHANNEL-NUMBER
else: else:
trackAlloc(cmd, 0) trackAlloc(cmd, 0)
if not cmd in gbl.tnames: if not cmd in gbl.tnames:
error("%s is not a valid MMA track." % cmd) error("%s is not a valid MMA track" % cmd)
ch = stoi(opt) ch = stoi(opt)
if ch < 1 or ch > 16: if ch < 1 or ch > 16:
error("MIDI channel for import must be 1..16, not %s." % ch) error("MIDI channel for import must be 1..16, not %s" % ch)
channels.append( (cmd, ch-1)) channels.append( (cmd, ch-1))
if not channels: if not channels:
if doLyric or doText: if doLyric or doText:
warning("MidiInc: no import channels specified, only text or lyrics imported.") warning("MidiInc: no import channels specified, only text or lyrics imported")
else: else:
error("MidiInc: A channel to import and a destination track must be specified.") error("MidiInc: A channel to import and a destination track must be specified")
if (istart >= iend) or (istart < 0) or (iend < 0): if (istart >= iend) or (istart < 0) or (iend < 0):
error("MidiInc range invalid: start=%s, end=%s" % (istart, iend)) error("MidiInc range invalid: start=%s, end=%s" % (istart, iend))
if gbl.debug: if gbl.debug:
print "MidiInc: file=%s, Volume=%s, Octave=%s, Transpose=%s, Lyric=%s, Text=%s, Range=%s..%s"\ print "MidiInc: file=%s, Volume=%s, Octave=%s, Transpose=%s, Lyric=%s, Text=%s, Range=%s..%s"\
% (filename, volAdjust, octAdjust, transpose, doLyric, doText, istart, iend) % (filename, volAdjust, octAdjust, transpose, doLyric, doText, istart, iend)
for t, ch in channels: for t, ch in channels:
print "MidiInc: Channel %s --> Track %s" % (ch+1, t) print "MidiInc: Channel %s --> Track %s" % (ch+1, t)
# If transpose was NOT set, use the global transpose value # If transpose was NOT set, use the global transpose value
if transpose == None: if transpose == None:
transpose = gbl.transpose transpose = gbl.transpose
octAdjust += transpose # this takes care of octave and transpose octAdjust += transpose # this takes care of octave and transpose
try: try:
inpath = file(filename, "rb") inpath = file(filename, "rb")
except: except:
error("Unable to open MIDI file %s for reading" % filename) error("Unable to open MIDI file %s for reading" % filename)
midifile=inpath.read() midifile=inpath.read()
inpath.close() inpath.close()
# Create our storage: # Create our storage:
# A dic with the channels 0-15 as keys for the midi note events # A dic with the channels 0-15 as keys for the midi note events
# 2 lists for lyrics and text events. These have tuples for (time, text) # 2 lists for lyrics and text events. These have tuples for (time, text)
events={} events={}
for c in range(0,16): for c in range(0,16):
events[c]=[] events[c]=[]
textEvs=[] textEvs=[]
lyricEvs=[] lyricEvs=[]
# Ensure this is valid header # Ensure this is valid header
hd=midifile[0:4] hd=midifile[0:4]
if hd != 'MThd': if hd != 'MThd':
error("Expecting 'HThd', %s not a standard midi file." % filename) error("Expecting 'HThd', %s not a standard midi file" % filename)
offset = 4 offset = 4
a = m32i() a = m32i()
if a != 6: if a != 6:
error("Expecting a 32 bit value of 6 in header") error("Expecting a 32 bit value of 6 in header")
format=m16i() format=m16i()
if format not in (0,1): if format not in (0,1):
error("MIDI file format %s not recognized" % format) error("MIDI file format %s not recognized" % format)
ntracks=m16i() ntracks=m16i()
beatDivision=m16i() beatDivision=m16i()
if beatDivision != gbl.BperQ: if beatDivision != gbl.BperQ:
warning("MIDI file '%s' tick/beat of %s differs from MMA's " warning("MIDI file '%s' tick/beat of %s differs from MMA's "
"%s. Will try to compensate." % "%s. Will try to compensate" %
(filename, beatDivision, gbl.BperQ)) (filename, beatDivision, gbl.BperQ))
# Adjust start/end to the file's tick # Adjust start/end to the file's tick
istart *= beatDivision istart *= beatDivision
iend *= beatDivision iend *= beatDivision
midievents={} midievents={}
firstNote = 0xffffff firstNote = 0xffffff
for tr in range(ntracks): for tr in range(ntracks):
tm=0 tm=0
hdr = midifile[offset:offset+4] hdr = midifile[offset:offset+4]
offset+=4 offset+=4
if hdr != 'MTrk': if hdr != 'MTrk':
error("Malformed MIDI file in track header") error("Malformed MIDI file in track header")
trlen = m32i() # track length, not used? trlen = m32i() # track length, not used?
lastevent = None lastevent = None
""" Parse the midi file. We have to parse off each event, even """ Parse the midi file. We have to parse off each event, even
though many will just be thrown away. You can't just skip around though many will just be thrown away. You can't just skip around
in a midi file :) In the future we might decide to include meta in a midi file :) In the future we might decide to include meta
stuff, etc. Or, we may not :) For now, we keep: stuff, etc. Or, we may not :) For now, we keep:
- note on - note on
- note off - note off
- key pressure - key pressure
- control change - control change
- program change - program change
- channel pressure - channel pressure
- pitch blend - pitch blend
- text event - text event
- lyric event - lyric event
""" """
while 1: while 1:
tm += mvarlen() # adjust total offset by delta tm += mvarlen() # adjust total offset by delta
ev=m1i() ev=m1i()
if ev < 0x80: if ev < 0x80:
if not lastevent: if not lastevent:
error("Illegal running status in %s at %s" \ error("Illegal running status in %s at %s" % (midifile, offset))
% (midifile, offset)) offset -= 1
offset -= 1 ev=lastevent
ev=lastevent
sValue = ev>>4 # Shift MSBs to get a 4 bit value sValue = ev>>4 # Shift MSBs to get a 4 bit value
channel = ev & 0x0f channel = ev & 0x0f
if sValue == 0x8: # note off event if sValue == 0x8: # note off event
note=m1i() note=m1i()
vel=m1i() vel=m1i()
if octAdjust and channel != 10: if octAdjust and channel != 10:
note += octAdjust note += octAdjust
if note < 0 or note > 127: if note < 0 or note > 127:
continue continue
events[channel].append([tm, ev & 0xf0, chr(note)+chr(vel)]) events[channel].append([tm, ev & 0xf0, chr(note)+chr(vel)])
elif sValue == 0x9: # note on event elif sValue == 0x9: # note on event
if tm < firstNote: if tm < firstNote:
firstNote = tm firstNote = tm
note=m1i() note=m1i()
vel=m1i() vel=m1i()
if octAdjust and channel != 10: if octAdjust and channel != 10:
note += octAdjust note += octAdjust
if note < 0 or note > 127: if note < 0 or note > 127:
continue continue
if volAdjust != 100: if volAdjust != 100:
vel = int( (vel*volAdjust)/100) vel = int( (vel*volAdjust)/100)
if vel<0: vel=1 if vel<0: vel=1
if vel>127: vel=127 if vel>127: vel=127
events[ev & 0xf].append([tm, ev & 0xf0, chr(note)+chr(vel)]) events[ev & 0xf].append([tm, ev & 0xf0, chr(note)+chr(vel)])
elif sValue == 0xa: # key pressure elif sValue == 0xa: # key pressure
events[ev & 0xf].append([tm, ev & 0xf0, chars(2)]) events[ev & 0xf].append([tm, ev & 0xf0, chars(2)])
elif sValue == 0xb: # control change elif sValue == 0xb: # control change
events[ev & 0xf].append([tm, ev & 0xf0, chars(2)]) events[ev & 0xf].append([tm, ev & 0xf0, chars(2)])
elif sValue == 0xc: # program change elif sValue == 0xc: # program change
events[ev & 0xf].append([tm, ev & 0xf0, chars(1)]) events[ev & 0xf].append([tm, ev & 0xf0, chars(1)])
elif sValue == 0xd: # channel pressure elif sValue == 0xd: # channel pressure
events[ev & 0xf].append([tm, ev & 0xf0, chars(1)]) events[ev & 0xf].append([tm, ev & 0xf0, chars(1)])
elif sValue == 0xe: # pitch blend elif sValue == 0xe: # pitch blend
events[ev & 0xf].append([tm, ev & 0xf0, chars(2)]) events[ev & 0xf].append([tm, ev & 0xf0, chars(2)])
elif sValue == 0xf: # system, mostly ignored elif sValue == 0xf: # system, mostly ignored
if ev == 0xff: # meta events if ev == 0xff: # meta events
a=m1i() a=m1i()
if a == 0x00: # sequence number if a == 0x00: # sequence number
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x01: # text (could be lyrics) elif a == 0x01: # text (could be lyrics)
textEvs.append((tm, chars(mvarlen()))) textEvs.append((tm, chars(mvarlen())))
elif a == 0x02: # copyright elif a == 0x02: # copyright
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x03: # seq/track name elif a == 0x03: # seq/track name
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x04: # instrument name elif a == 0x04: # instrument name
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x05: # lyric elif a == 0x05: # lyric
lyricEvs.append((tm, chars(mvarlen()))) lyricEvs.append((tm, chars(mvarlen())))
elif a == 0x06: # marker elif a == 0x06: # marker
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x07: # cue point elif a == 0x07: # cue point
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x21: # midi port elif a == 0x21: # midi port
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x2f: # end of track elif a == 0x2f: # end of track
l=mvarlen() l=mvarlen()
offset += l offset += l
break break
elif a == 0x51: #tempo elif a == 0x51: #tempo
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x54: # SMPTE offset elif a == 0x54: # SMPTE offset
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x58: # time sig elif a == 0x58: # time sig
l=mvarlen() l=mvarlen()
offset += l offset += l
elif a == 0x59: # key sig elif a == 0x59: # key sig
l=mvarlen() l=mvarlen()
offset += l offset += l
else: # probably 0x7f, proprietary event else: # probably 0x7f, proprietary event
l=mvarlen() l=mvarlen()
offset += l offset += l
elif ev == 0xf0: # system exclusive elif ev == 0xf0: # system exclusive
l=mvarlen() l=mvarlen()
offset += l offset += l
elif ev == 0xf2: # song position pointer, 2 bytes elif ev == 0xf2: # song position pointer, 2 bytes
offset += 2 offset += 2
elif ev == 0xf3: # song select, 1 byte elif ev == 0xf3: # song select, 1 byte
offset += 1 offset += 1
else: # all others are single byte commands else: # all others are single byte commands
pass pass
if ev >= 0x80 and ev <= 0xef: if ev >= 0x80 and ev <= 0xef:
lastevent = ev lastevent = ev
# Midi file parsed, add selected events to mma data # Midi file parsed, add selected events to mma data
beatad = gbl.BperQ / float(beatDivision) beatad = gbl.BperQ / float(beatDivision)
if doText: if doText:
inst=0 inst=0
disc=0 disc=0
for tm,tx in textEvs: for tm,tx in textEvs:
delta = tm-firstNote delta = tm-firstNote
if delta >= istart and delta <= iend: if delta >= istart and delta <= iend:
gbl.mtrks[0].addText(gbl.tickOffset + int(delta * beatad), tx) gbl.mtrks[0].addText(gbl.tickOffset + int(delta * beatad), tx)
inst+=1 inst+=1
else: else:
disc+=1 disc+=1
if gbl.debug: if gbl.debug:
print"MidiInc text events: %s inserted, %s out of range." % (inst, disc) print"MidiInc text events: %s inserted, %s out of range." % (inst, disc)
if doLyric: if doLyric:
inst=0 inst=0
disc=0 disc=0
for tm, tx in lyricEvs: for tm, tx in lyricEvs:
delta = tm-firstNote delta = tm-firstNote
if delta >= istart and delta <= iend: if delta >= istart and delta <= iend:
gbl.mtrks[0].addLyric(gbl.tickOffset + int(delta * beatad), tx) gbl.mtrks[0].addLyric(gbl.tickOffset + int(delta * beatad), tx)
inst+=1 inst+=1
else: else:
disc+=1 disc+=1
if gbl.debug: if gbl.debug:
print"MidiInc lyric events: %s inserted, %s out of range." % (inst, disc) print"MidiInc lyric events: %s inserted, %s out of range." % (inst, disc)
for n,c in channels: for n,c in channels:
if not len(events[c]): if not len(events[c]):
warning("No data to assign from imported channel %s to track %s." % (c+1, n)) warning("No data to assign from imported channel %s to track %s" % (c+1, n))
inst=0 inst=0
disc=0 disc=0
for tr, ch in channels: for tr, ch in channels:
t=gbl.tnames[tr] t=gbl.tnames[tr]
if not t.channel: if not t.channel:
t.setChannel() t.setChannel()
t.clearPending() t.clearPending()
if t.voice[0] != t.ssvoice: if t.voice[0] != t.ssvoice:
gbl.mtrks[t.channel].addProgChange( gbl.tickOffset, t.voice[0]) gbl.mtrks[t.channel].addProgChange( gbl.tickOffset, t.voice[0])
channel = t.channel channel = t.channel
track = gbl.mtrks[channel] track = gbl.mtrks[channel]
for ev in events[ch]: for ev in events[ch]:
delta = ev[0]-firstNote delta = ev[0]-firstNote
if delta >= istart and delta <= iend: if delta >= istart and delta <= iend:
track.addToTrack( gbl.tickOffset + int(delta * beatad), track.addToTrack( gbl.tickOffset + int(delta * beatad),
chr(ev[1] | channel-1) + ev[2] ) chr(ev[1] | channel-1) + ev[2] )
inst+=1 inst+=1
else: else:
disc+=1 disc+=1
if gbl.debug: if gbl.debug:
print"MidiInc events: %s inserted, %s out of range." % (inst, disc) print"MidiInc events: %s inserted, %s out of range." % (inst, disc)

View File

@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
This module contains the MIDI number (un)packing routines. This module contains the MIDI number (un)packing routines.
@ -29,29 +29,29 @@ MIDI expects.
def intToWord(x): def intToWord(x):
""" Convert INT to a 2 byte MSB LSB value. """ """ Convert INT to a 2 byte MSB LSB value. """
return chr(x>>8 & 0xff) + chr(x & 0xff) return chr(x>>8 & 0xff) + chr(x & 0xff)
def intTo3Byte(x): def intTo3Byte(x):
""" Convert INT to a 3 byte MSB...LSB value. """ """ Convert INT to a 3 byte MSB...LSB value. """
return intToLong(x)[1:] return intToLong(x)[1:]
def intToLong(x): def intToLong(x):
""" Convert INT to a 4 byte MSB...LSB value. """ """ Convert INT to a 4 byte MSB...LSB value. """
return intToWord(x>>16) + intToWord(x) return intToWord(x>>16) + intToWord(x)
def intToVarNumber(x): def intToVarNumber(x):
""" Convert INT to a variable length MIDI value. """ """ Convert INT to a variable length MIDI value. """
lst = chr(x & 0x7f) lst = chr(x & 0x7f)
while 1: while 1:
x = x >> 7 x = x >> 7
if x: if x:
lst = chr((x & 0x7f) | 0x80) + lst lst = chr((x & 0x7f) | 0x80) + lst
else: else:
return lst return lst

166
mma/MMA/miditables.py Normal file
View File

@ -0,0 +1,166 @@
# miditables.py
"""
This module is an integeral part of the program
MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bob@mellowood.ca>
This module contains the constant names for the various
MIDI controllers.
Having only the constants in this separate file permits to
call this from other programs, mainly the mma doc creators.
"""
""" English names for midi instruments and drums.
These tables are used by the pattern classes to
convert inst/drum names to midi values and by the
doc routines to print tables.
"""
# The drum names are valid for tones 27 to 87
drumNames=[
'HighQ', 'Slap', 'ScratchPush', 'ScratchPull',
'Sticks', 'SquareClick', 'MetronomeClick',
'MetronomeBell', 'KickDrum2', 'KickDrum1',
'SideKick', 'SnareDrum1', 'HandClap',
'SnareDrum2', 'LowTom2', 'ClosedHiHat',
'LowTom1', 'PedalHiHat', 'MidTom2', 'OpenHiHat',
'MidTom1', 'HighTom2', 'CrashCymbal1',
'HighTom1', 'RideCymbal1', 'ChineseCymbal',
'RideBell', 'Tambourine', 'SplashCymbal',
'CowBell', 'CrashCymbal2', 'VibraSlap',
'RideCymbal2', 'HighBongo', 'LowBongo',
'MuteHighConga', 'OpenHighConga', 'LowConga',
'HighTimbale', 'LowTimbale', 'HighAgogo',
'LowAgogo', 'Cabasa', 'Maracas',
'ShortHiWhistle', 'LongLowWhistle', 'ShortGuiro',
'LongGuiro', 'Claves', 'HighWoodBlock',
'LowWoodBlock', 'MuteCuica', 'OpenCuica',
'MuteTriangle', 'OpenTriangle', 'Shaker',
'JingleBell', 'Castanets', 'MuteSudro',
'OpenSudro' ]
upperDrumNames = [name.upper() for name in drumNames]
voiceNames=[
'Piano1', 'Piano2','Piano3',
'Honky-TonkPiano', 'RhodesPiano', 'EPiano',
'HarpsiChord', 'Clavinet', 'Celesta',
'Glockenspiel', 'MusicBox', 'Vibraphone',
'Marimba', 'Xylophone', 'TubularBells', 'Santur',
'Organ1', 'Organ2', 'Organ3', 'ChurchOrgan',
'ReedOrgan', 'Accordion', 'Harmonica',
'Bandoneon', 'NylonGuitar', 'SteelGuitar',
'JazzGuitar', 'CleanGuitar', 'MutedGuitar',
'OverDriveGuitar', 'DistortonGuitar',
'GuitarHarmonics', 'AcousticBass',
'FingeredBass', 'PickedBass', 'FretlessBass',
'SlapBass1', 'SlapBass2', 'SynthBass1',
'SynthBass2', 'Violin', 'Viola', 'Cello',
'ContraBass', 'TremoloStrings',
'PizzicatoString', 'OrchestralHarp', 'Timpani',
'Strings', 'SlowStrings', 'SynthStrings1',
'SynthStrings2', 'ChoirAahs', 'VoiceOohs',
'SynthVox', 'OrchestraHit', 'Trumpet',
'Trombone', 'Tuba', 'MutedTrumpet', 'FrenchHorn',
'BrassSection', 'SynthBrass1', 'SynthBrass2',
'SopranoSax', 'AltoSax', 'TenorSax',
'BaritoneSax', 'Oboe', 'EnglishHorn', 'Bassoon',
'Clarinet', 'Piccolo', 'Flute', 'Recorder',
'PanFlute', 'BottleBlow', 'Shakuhachi',
'Whistle', 'Ocarina', 'SquareWave', 'SawWave',
'SynCalliope', 'ChifferLead', 'Charang',
'SoloVoice', '5thSawWave', 'Bass&Lead',
'Fantasia', 'WarmPad', 'PolySynth', 'SpaceVoice',
'BowedGlass', 'MetalPad', 'HaloPad', 'SweepPad',
'IceRain', 'SoundTrack', 'Crystal', 'Atmosphere',
'Brightness', 'Goblins', 'EchoDrops',
'StarTheme', 'Sitar', 'Banjo', 'Shamisen',
'Koto', 'Kalimba', 'BagPipe', 'Fiddle', 'Shanai',
'TinkleBell', 'AgogoBells', 'SteelDrums',
'WoodBlock', 'TaikoDrum', 'MelodicTom1',
'SynthDrum', 'ReverseCymbal', 'GuitarFretNoise',
'BreathNoise', 'SeaShore', 'BirdTweet',
'TelephoneRing', 'HelicopterBlade',
'Applause/Noise', 'GunShot' ]
upperVoiceNames = [name.upper() for name in voiceNames]
ctrlNames = [
### also see: http://www.midi.org/about-midi/table3.shtml
### 0-31 Double Precise Controllers
### MSB (14-bits, 16,384 values)
'Bank', 'Modulation', 'Breath', 'Ctrl3',
'Foot', 'Portamento', 'Data', 'Volume',
'Balance', 'Ctrl9', 'Pan', 'Expression',
'Effect1', 'Effect2', 'Ctrl14', 'Ctrl15',
'General1','General2','General3','General4',
'Ctrl20', 'Ctrl21', 'Ctrl22', 'Ctrl23',
'Ctrl24', 'Ctrl25', 'Ctrl26', 'Ctrl27',
'Ctrl28', 'Ctrl29', 'Ctrl30', 'Ctrl31',
### 32-63 Double Precise Controllers
### LSB (14-bits, 16,384 values)
'BankLSB', 'ModulationLSB', 'BreathLSB',
'Ctrl35', 'FootLSB', 'PortamentoLSB',
'DataLSB','VolumeLSB','BalanceLSB',
'Ctrl41','PanLSB','ExpressionLSB',
'Effect1LSB', 'Effect2LSB','Ctrl46', 'Ctrl47',
'General1LSB','General2LSB', 'General3LSB',
'General4LSB', 'Ctrl52','Ctrl53', 'Ctrl54',
'Ctrl55', 'Ctrl56', 'Ctrl57', 'Ctrl58',
'Ctrl59', 'Ctrl60', 'Ctrl61', 'Ctrl62',
'Ctrl63',
### 64-119 Single Precise Controllers
### (7-bits, 128 values)
'Sustain', 'Portamento', 'Sostenuto',
'SoftPedal', 'Legato', 'Hold2', 'Variation',
'Resonance', 'ReleaseTime','AttackTime', 'Brightness',
'DecayTime','VibratoRate','VibratoDepth', 'VibratoDelay',
'Ctrl79','General5','General6','General7',
'General8','PortamentoCtrl','Ctrl85','Ctrl86',
'Ctrl87', 'Ctrl88', 'Ctrl89', 'Ctrl90',
'Reverb', 'Tremolo', 'Chorus','Detune',
'Phaser', 'DataInc','DataDec',
'NonRegLSB', 'NonRegMSB',
'RegParLSB', 'RegParMSB',
'Ctrl102','Ctrl103','Ctrl104','Ctrl105',
'Ctrl106','Ctrl107','Ctrl108','Ctrl109',
'Ctrl110','Ctrl111','Ctrl112','Ctrl113',
'Ctrl114','Ctrl115','Ctrl116','Ctrl117',
'Ctrl118','Ctrl119',
### 120-127 Channel Mode Messages
'AllSoundsOff','ResetAll',
'LocalCtrl','AllNotesOff',
'OmniOff','OmniOn', 'PolyOff','PolyOn' ]
upperCtrlNames = [name.upper() for name in ctrlNames]

View File

@ -2,7 +2,7 @@
# notelen.py # notelen.py
""" """
This module is an integeral part of the program This module is an integeral part of the program
MMA - Musical Midi Accompaniment. MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
import gbl import gbl
@ -28,103 +28,103 @@ from MMA.common import *
noteLenTable = { noteLenTable = {
'0' : 1, # special 0==1 midi tick '0' : 1, # special 0==1 midi tick
'1' : gbl.BperQ * 4, # whole note '1' : gbl.BperQ * 4, # whole note
'2' : gbl.BperQ * 2, # 1/2 '2' : gbl.BperQ * 2, # 1/2
'23' : gbl.BperQ * 4 / 3, # 1/2 triplet '23' : gbl.BperQ * 4 / 3, # 1/2 triplet
'4' : gbl.BperQ, # 1/4 '4' : gbl.BperQ, # 1/4
'43' : gbl.BperQ * 2 / 3, # 1/4 triplet '43' : gbl.BperQ * 2 / 3, # 1/4 triplet
'8' : gbl.BperQ / 2, # 1/8 '8' : gbl.BperQ / 2, # 1/8
'81' : None, # short 1/8 swing note '81' : None, # short 1/8 swing note
'82' : None, # long 1/8 swing note '82' : None, # long 1/8 swing note
'16' : gbl.BperQ / 4, # 1/16 '16' : gbl.BperQ / 4, # 1/16
'32' : gbl.BperQ / 8, # 1/32 '32' : gbl.BperQ / 8, # 1/32
'64' : gbl.BperQ / 16, # 1/64 '64' : gbl.BperQ / 16, # 1/64
'6' : gbl.BperQ / 6, # 1/16 note triplet '6' : gbl.BperQ / 6, # 1/16 note triplet
'3' : gbl.BperQ / 3, # 1/8 note triplet '3' : gbl.BperQ / 3, # 1/8 note triplet
'5' : gbl.BperQ / 5 } # 1/8 note quintuplet '5' : gbl.BperQ / 5 } # 1/8 note quintuplet
def swingMode(ln): def swingMode(ln):
""" Enable/Disable Swing timing mode. """ """ Enable/Disable Swing timing mode. """
emsg = "Use: SwingMode [ On, Off, 0, 1 Skew=xx ]."
if not ln:
error(emsg)
emsg = "Use: SwingMode [ On, Off, 0, 1 Skew=xx ]."
for v in ln:
a = v.upper() if not ln:
error(emsg)
if a in ("ON", "1"):
gbl.swingMode = 1
continue
if a in ("OFF", "0"):
gbl.swingMode = 0
continue
if a.find('=')>1: for v in ln:
a,b = a.split('=')
if a == 'SKEW': a = v.upper()
gbl.swingSkew = b
v = int( stoi(b) * gbl.BperQ / 100)
noteLenTable['81'] = v
noteLenTable['82'] = gbl.BperQ - v
continue
error(emsg) if a in ("ON", "1"):
gbl.swingMode = 1
continue
if a in ("OFF", "0"):
gbl.swingMode = 0
continue
if a.find('=')>1:
a,b = a.split('=')
if a == 'SKEW':
gbl.swingSkew = b
v = int( stoi(b) * gbl.BperQ / 100)
noteLenTable['81'] = v
noteLenTable['82'] = gbl.BperQ - v
continue
error(emsg)
if gbl.debug:
print "SwingMode: Status=%s, Skew Note lengths: %s and %s ticks." % \
(gbl.swingMode, noteLenTable['81'], noteLenTable['82'])
if gbl.debug:
print "SwingMode: Status=%s, Skew Note lengths: %s and %s ticks." % \
(gbl.swingMode, noteLenTable['81'], noteLenTable['82'])
swingMode(['Skew=66']) # Set the default swingskew values. swingMode(['Skew=66']) # Set the default swingskew values.
def getNoteLen(n): def getNoteLen(n):
""" Convert a Note to a midi tick length. """ Convert a Note to a midi tick length.
Notes are 1==Whole, 4==Quarter, etc. Notes are 1==Whole, 4==Quarter, etc.
Notes can be dotted or double dotted. Notes can be dotted or double dotted.
Notes can be combined: 1+4 == 5 beats, 4. or 4+8 == dotted 1/4 Notes can be combined: 1+4 == 5 beats, 4. or 4+8 == dotted 1/4
1-4 == 3 beats, 1-0 == 4 beats less a midi tick 1-4 == 3 beats, 1-0 == 4 beats less a midi tick
""" """
length = 0
n=n.replace('-', '+-') # change "2-4" to "2+-4" for easier parsing
n=n.replace('++-', '+-') # and in case we already used "+-", take out 2nd "+"
for a in str(n).split('+'):
if a.endswith('..'):
dot = 2
a=a[:-2]
elif a.endswith('.'):
dot = 1
a=a[:-1]
else:
dot = 0
try: length = 0
if a.startswith('-'):
i = noteLenTable[a[1:]] * -1
else:
i = noteLenTable[a]
except: n=n.replace('-', '+-') # change "2-4" to "2+-4" for easier parsing
error("Unknown note duration %s" % n ) n=n.replace('++-', '+-') # and in case we already used "+-", take out 2nd "+"
if dot == 2: for a in str(n).split('+'):
i += i/2 + i/4 if a.endswith('..'):
elif dot == 1: dot = 2
i += i/2 a=a[:-2]
length += i elif a.endswith('.'):
dot = 1
return length a=a[:-1]
else:
dot = 0
try:
if a.startswith('-'):
i = noteLenTable[a[1:]] * -1
else:
i = noteLenTable[a]
except:
error("Unknown note duration %s" % n )
if dot == 2:
i += i/2 + i/4
elif dot == 1:
i += i/2
length += i
return length

View File

@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -38,188 +38,156 @@ from MMA.macro import macros
def opts(): def opts():
""" Option parser. """ """ Option parser. """
try: try:
opts, args = getopt.gnu_getopt(sys.argv[1:], opts, args = getopt.gnu_getopt(sys.argv[1:],
"dpsS:ri:wneom:f:M:cgGvD:", [] ) "dpsS:ri:wneom:f:M:cgGvD:0", [] )
except getopt.GetoptError: except getopt.GetoptError:
usage() usage()
for o,a in opts: for o,a in opts:
if o == '-d':
gbl.debug = gbl.Ldebug = 1 if o == '-d':
gbl.debug = gbl.Ldebug = 1
elif o == '-o': elif o == '-o':
gbl.showFilenames = gbl.LshowFilenames = 1 gbl.showFilenames = gbl.LshowFilenames = 1
elif o == '-p': elif o == '-p':
gbl.pshow = gbl.Lpshow = 1 gbl.pshow = gbl.Lpshow = 1
elif o == '-s': elif o == '-s':
gbl.seqshow = gbl.Lseqshow = 1 gbl.seqshow = gbl.Lseqshow = 1
elif o == '-S': elif o == '-S':
ln = a.split('=', 1) ln = a.split('=', 1)
macros.setvar(ln) macros.setvar(ln)
elif o == '-r': elif o == '-r':
gbl.showrun = gbl.Lshowrun = 1 gbl.showrun = gbl.Lshowrun = 1
elif o == '-w': elif o == '-w':
gbl.noWarn = gbl.LnoWarn = 1 gbl.noWarn = gbl.LnoWarn = 1
elif o == '-n': elif o == '-n':
gbl.noOutput = gbl.LnoOutput = 1 gbl.noOutput = gbl.LnoOutput = 1
elif o == '-e': elif o == '-e':
gbl.showExpand = gbl.LshowExpand = 1 gbl.showExpand = gbl.LshowExpand = 1
elif o == '-c': elif o == '-c':
gbl.chshow = gbl.Lchshow = 1 gbl.chshow = gbl.Lchshow = 1
elif o == '-f': elif o == '-f':
gbl.outfile = a gbl.outfile = a
elif o == '-i': elif o == '-i':
gbl.mmaRC = a gbl.mmaRC = a
elif o == '-g': elif o == '-g':
gbl.makeGrvDefs = 1 gbl.makeGrvDefs = 1
elif o == '-G': elif o == '-G':
gbl.makeGrvDefs = 2 gbl.makeGrvDefs = 2
elif o == '-m': elif o == '-m':
try: try:
a=int(a) a=int(a)
except: except:
error("Expecting -m arg to be a integer") error("Expecting -m arg to be a integer")
gbl.maxBars = a gbl.maxBars = a
elif o == '-v': elif o == '-v':
print "%s" % gbl.version print "%s" % gbl.version
sys.exit(0) sys.exit(0)
elif o == '-M': elif o == '-M':
if a in ['0', '1']: if a in ['0', '1']:
gbl.cmdSMF = a gbl.cmdSMF = a
else: else:
error("Only a '0' or '1' is permitted for the -M arg.") error("Only a '0' or '1' is permitted for the -M arg")
elif o == '-D': elif o == '-D':
if a == 'xl': if a == 'xl':
gbl.docs = 1 gbl.docs = 1
elif a == 'xh': elif a == 'xh':
gbl.docs = 2 gbl.docs = 2
elif a == 'k': elif a == 'k':
def pl(msg, lst): def pl(msg, lst):
print msg, print msg,
for i in sorted(lst.keys()): for i in sorted(lst.keys()):
print i, print i,
print "\n" print "\n"
pl("Base track names:", MMA.alloc.trkClasses ) pl("Base track names:", MMA.alloc.trkClasses )
pl("Commands:", MMA.parse.simpleFuncs) pl("Commands:", MMA.parse.simpleFuncs)
pl("TrackCommands:", MMA.parse.trackFuncs) pl("TrackCommands:", MMA.parse.trackFuncs)
print "Not complete ... subcommands, comments, chords..." print "Not complete ... subcommands, comments, chords..."
sys.exit(0) sys.exit(0)
else:
print "Unknown -D option."
usage()
elif a == 'n': elif o == '-0':
MMA.chords.docs() gbl.synctick = 1
sys.exit(0)
elif a == 'da': else:
MMA.docs.docDrumNames("a") usage() # unreachable??
sys.exit(0)
elif a == 'dm': if args:
MMA.docs.docDrumNames("m") if gbl.infile:
sys.exit(0) usage("Only one input filename is permitted.")
gbl.infile = args.pop(0)
elif a == 'ia':
MMA.docs.docInstNames("a")
sys.exit(0)
elif a == 'im':
MMA.docs.docInstNames("m")
sys.exit(0)
elif a == 'ca':
MMA.docs.docCtrlNames("a")
sys.exit(0)
elif a == 'cm':
MMA.docs.docCtrlNames("m")
sys.exit(0)
else:
print "Unknown -D option."
usage()
else:
usage() # unreachable??
if args:
if gbl.infile:
usage("Only one input filename is permitted.")
gbl.infile = args.pop(0)
def usage(msg=''): def usage(msg=''):
""" Usage message. """ """ Usage message. """
txt=[ txt=[
"MMA - Musical Midi Accompaniment", "MMA - Musical Midi Accompaniment",
" Copyright 2003-5, Bob van der Poel. Version %s" % gbl.version , " Copyright 2003-5, Bob van der Poel. Version %s" % gbl.version ,
" Distributed under the terms of the GNU Public License.", " Distributed under the terms of the GNU Public License.",
" Usage: mma [opts ...] INFILE [opts ...]", " Usage: mma [opts ...] INFILE [opts ...]",
"", "",
"Options:", "Options:",
" -c display default Channel assignments", " -c display default Channel assignments",
" -d enable lots of Debugging messages", " -d enable lots of Debugging messages",
" -Dk print list of MMA keywords", " -Dk print list of MMA keywords",
" -Dxl eXtract Latex doc blocks from file", " -Dxl eXtract Latex doc blocks from file",
" -Dxh eXtract HTML doc blocks from file", " -Dxh eXtract HTML doc blocks from file",
" -Dn print Note/chord table", " -e show parsed/Expanded lines",
" -Ddm print Midi drum names (by MIDI value)", " -f <file> set output Filename",
" -Dda print Midi drum names (alphabetical)", " -g update Groove dependency database",
" -Dim print Inst. names (by MIDI value)", " -G create Groove dependency database",
" -Dia print Inst. names (alphabetical)", " -i <file> specify init (mmarc) file",
" -Dcm print Controller names (by value)", " -m <x> set Maxbars (default == 500)",
" -Dca print Controller names (alphabetical)", " -M <x> set SMF to 0 or 1",
" -e show parsed/Expanded lines", " -n No generation of midi output",
" -f <file> set output Filename", " -o show complete filenames when Opened",
" -g update Groove dependency database", " -p display Patterns as they are defined",
" -G create Groove dependency database", " -r display Running progress",
" -i <file> specify init (mmarc) file", " -s display Sequence info during run",
" -m <x> set Maxbars (default == 500)", " -S <var[=data]> Set macro 'var' to 'data'",
" -M <x> set SMF to 0 or 1", " -v display Version number",
" -n No generation of midi output", " -w disable Warning messages",
" -o show complete filenames when Opened", " -0 create sync at start of all channel tracks" ]
" -p display Patterns as they are defined",
" -r display Running progress",
" -s display Sequence info during run",
" -S <var[=data]> Set macro 'var' to 'data'",
" -v display Version number",
" -w disable Warning messages" ]
for a in txt: for a in txt:
print a print a
if msg: if msg:
print print
print msg print msg
print print
sys.exit(1) sys.exit(1)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

228
mma/MMA/patAria.py Normal file
View File

@ -0,0 +1,228 @@
# patAria.py
"""
This module is an integeral part of the program
MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bob@mellowood.ca>
"""
import gbl
from MMA.notelen import getNoteLen
from MMA.common import *
from MMA.harmony import harmonize
from MMA.pat import PC, seqBump
import random
class Aria(PC):
""" Pattern class for an aria (auto-melody) track. """
vtype = 'ARIA'
notes = []
selectDir = [1]
noteptr = 0
dirptr = 0
lastChord = None
lastStype = None
lastRange = None
def restoreGroove(self, gname):
""" Grooves are not saved/restored for aria tracks. But, seqsize is honored! """
self.setSeqSize()
def saveGroove(self, gname):
""" No save done for grooves. """
pass
def getPgroup(self, ev):
""" Get group for aria pattern.
Fields - start, length, velocity
"""
if len(ev) != 3:
error("There must be n groups of 3 in a pattern definition, "
"not <%s>" % ' '.join(ev) )
a = struct()
a.offset = self.setBarOffset(ev[0])
a.duration = getNoteLen( ev[1] )
a.vol = stoi(ev[2], "Note volume in Aria definition not int")
return a
def setScaletype(self, ln):
""" Set scale type. """
ln = self.lnExpand(ln, "ScaleType")
tmp = []
for n in ln:
n = n.upper()
if not n in ( 'CHROMATIC', 'AUTO', 'CHORD'):
error("Unknown %s ScaleType. Only Chromatic, Scale and Chord are valid" % self.name)
tmp.append(n)
self.scaleType = seqBump(tmp)
if gbl.debug:
print "Set %s ScaleType: " % self.name,
printList(self.scaleType)
def setDirection(self, ln):
""" Set direction for melody creation.
This function replaces the pattern function of the same name ...
the command name is shared, the function is different. Note we
need to use a different storage name as well since
self.direction is managed in the PC class.
"""
if not len(ln):
error("There must be at least one value for %s Direction." % self.name)
self.selectDir = []
for a in ln:
if a.upper() == 'R':
self.selectDir.append(a.upper())
else:
a=stoi(a, "Expecting integer value or 'r'.")
if a < -4 or a > 4:
error("Aria direction must be 'r' or -4 to 4, not '%s'" % a)
self.selectDir.append(a)
if gbl.debug:
print "Set %s Direction:" % self.name,
printList(self.selectDir)
def restart(self):
self.ssvoice = -1
def trackBar(self, pattern, ctable):
""" Do the aria bar.
Called from self.bar()
"""
sc = self.seq
unify = self.unify[sc]
for p in pattern:
ct = self.getChordInPos(p.offset, ctable)
if ct.ariaZ:
continue
thisChord = ct.chord.tonic + ct.chord.chordType
stype = self.scaleType[sc]
range = self.chordRange[sc]
### Generate notelist if nesc.
if self.lastChord != thisChord or self.lastStype != stype or \
self.lastRange != range:
self.lastChord = thisChord
self.lastStype = stype
self.lastRange = range
if stype == 'CHORD':
notelist = ct.chord.noteList
elif stype == 'CHROMATIC':
notelist = [ ct.chord.rootNote + x for x in range(0,12)]
else:
notelist = list(ct.chord.scaleList)
o=0
self.notes=[]
while range >= 1:
for a in notelist:
self.notes.append(a+o)
o+=12
range-=1
if range>0 and range<1: # for fractional scale lengths
range = int(len(notelist) * range)
if range < 2: # important, must be at least 2 notes in a scale
range=2
for a in notelist[:range]:
self.notes.append(a+o)
# grab a note from the list
if self.dirptr >= len(self.selectDir):
self.dirptr=0
a = self.selectDir[self.dirptr]
if a == 'R':
a = random.choice( (-1, 0, 1) )
self.noteptr += a
if self.noteptr >= len(self.notes):
if a > 0:
self.noteptr = 0
else:
self.noteptr = len(self.notes)-1
elif self.noteptr < 0:
if a < 0:
self.noteptr = len(self.notes)-1
else:
self.noteptr = 0
note = self.notes[self.noteptr]
self.dirptr += 1
# output
if not self.harmonyOnly[sc]:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(note),
self.adjustVolume(p.vol, p.offset))
if self.harmony[sc]:
h = harmonize(self.harmony[sc], note, ct.chord.noteList)
for n in h:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(n),
self.adjustVolume(p.vol * self.harmonyVolume[sc], -1))

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -34,128 +34,128 @@ from MMA.pat import PC
class Arpeggio(PC): class Arpeggio(PC):
""" Pattern class for an arpeggio track. """ """ Pattern class for an arpeggio track. """
vtype = 'ARPEGGIO' vtype = 'ARPEGGIO'
arpOffset = -1 arpOffset = -1
arpDirection = 1 arpDirection = 1
def getPgroup(self, ev): def getPgroup(self, ev):
""" Get group for apreggio pattern. """ Get group for apreggio pattern.
Fields - start, length, volume Fields - start, length, volume
""" """
a = struct() a = struct()
if len(ev) != 3: if len(ev) != 3:
error("There must be exactly 3 items in each group " error("There must be exactly 3 items in each group "
"for apreggio define, not <%s>." % ' '.join(ev) ) "for apreggio define, not '%s'" % ' '.join(ev) )
a.offset = self.setBarOffset(ev[0]) a.offset = self.setBarOffset(ev[0])
a.duration = getNoteLen(ev[1]) a.duration = getNoteLen(ev[1])
a.vol = stoi(ev[2], "Type error in Arpeggio definition.") a.vol = stoi(ev[2], "Type error in Arpeggio definition")
return a return a
def restart(self): def restart(self):
self.ssvoice = -1 self.ssvoice = -1
self.arpOffset=-1 self.arpOffset=-1
self.arpDirection=1 self.arpDirection=1
def trackBar(self, pattern, ctable): def trackBar(self, pattern, ctable):
""" Do a arpeggio bar. """ Do a arpeggio bar.
Called from self.bar() Called from self.bar()
""" """
sc = self.seq sc = self.seq
direct = self.direction[sc] direct = self.direction[sc]
for p in pattern: for p in pattern:
tb = self.getChordInPos(p.offset, ctable) tb = self.getChordInPos(p.offset, ctable)
if tb.arpeggioZ: if tb.arpeggioZ:
continue continue
if direct == 'DOWN': if direct == 'DOWN':
self.arpDirection = -1 self.arpDirection = -1
if self.chordLimit: if self.chordLimit:
tb.chord.limit(self.chordLimit) tb.chord.limit(self.chordLimit)
if self.compress[sc]: if self.compress[sc]:
tb.chord.compress() tb.chord.compress()
if self.invert[sc]: if self.invert[sc]:
tb.chord.invert(self.invert[sc]) tb.chord.invert(self.invert[sc])
# This should be optimized, it recreates the chord for every pattern. # This should be optimized, it recreates the chord for every pattern.
# Problem is that one would need to check all the LIMIT, COMPRESS, etc # Problem is that one would need to check all the LIMIT, COMPRESS, etc
# settings each for each bar as well, so it's probably just as easy to # settings each for each bar as well, so it's probably just as easy to
# leave it as is. Besides, this works. # leave it as is. Besides, this works.
ln = self.chordRange[sc] ln = self.chordRange[sc]
o = 0 o = 0
ourChord = [] ourChord = []
while ln >= 1: while ln >= 1:
for a in tb.chord.noteList: for a in tb.chord.noteList:
ourChord.append(a+o) ourChord.append(a+o)
ln -= 1 ln -= 1
o += 12 o += 12
if ln > 0 and ln < 1: # for fractional lengths if ln > 0 and ln < 1: # for fractional lengths
ln = int(tb.chord.noteListLen * ln) ln = int(tb.chord.noteListLen * ln)
if ln < 2: # important, min of 2 notes in arp. if ln < 2: # important, min of 2 notes in arp.
ln=2 ln=2
for a in tb.chord.noteList[:ln]: for a in tb.chord.noteList[:ln]:
ourChord.append(a+o) ourChord.append(a+o)
if direct == 'BOTH': if direct == 'BOTH':
if self.arpOffset < 0: if self.arpOffset < 0:
self.arpOffset = 1 self.arpOffset = 1
self.arpDirection = 1 self.arpDirection = 1
elif self.arpOffset >= len(ourChord): elif self.arpOffset >= len(ourChord):
self.arpOffset = len(ourChord)-2 self.arpOffset = len(ourChord)-2
self.arpDirection = -1 self.arpDirection = -1
elif direct == 'UP': elif direct == 'UP':
if self.arpOffset >= len(ourChord) or self.arpOffset < 0: if self.arpOffset >= len(ourChord) or self.arpOffset < 0:
self.arpOffset = 0 self.arpOffset = 0
self.arpDirection = 1 self.arpDirection = 1
elif direct == 'DOWN': elif direct == 'DOWN':
if self.arpOffset < 0 or self.arpOffset >= len(ourChord): if self.arpOffset < 0 or self.arpOffset >= len(ourChord):
self.arpOffset = len(ourChord)-1 self.arpOffset = len(ourChord)-1
self.arpDirection = -1 self.arpDirection = -1
if direct == 'RANDOM': if direct == 'RANDOM':
note = random.choice(ourChord) note = random.choice(ourChord)
else: else:
note = ourChord[self.arpOffset] note = ourChord[self.arpOffset]
self.arpOffset += self.arpDirection self.arpOffset += self.arpDirection
if not self.harmonyOnly[sc]: if not self.harmonyOnly[sc]:
self.sendNote( self.sendNote(
p.offset, p.offset,
self.getDur(p.duration), self.getDur(p.duration),
self.adjustNote(note), self.adjustNote(note),
self.adjustVolume(p.vol, p.offset) ) self.adjustVolume(p.vol, p.offset) )
if self.harmony[sc]: if self.harmony[sc]:
h = harmonize(self.harmony[sc], note, ourChord) h = harmonize(self.harmony[sc], note, ourChord)
for n in h: for n in h:
self.sendNote( self.sendNote(
p.offset, p.offset,
self.getDur(p.duration), self.getDur(p.duration),
self.adjustNote(n), self.adjustNote(n),
self.adjustVolume(p.vol * self.harmonyVolume[sc], -1) ) self.adjustVolume(p.vol * self.harmonyVolume[sc], -1) )
tb.chord.reset() # important, other tracks chord object tb.chord.reset() # important, other tracks chord object

View File

@ -1,8 +1,8 @@
# patBass.py # patBass.py
""" """
This module is an integeral part of the program This module is an integeral part of the program
MMA - Musical Midi Accompaniment. MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -19,10 +19,10 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
import gbl import gbl
@ -33,102 +33,102 @@ from MMA.pat import PC
class Bass(PC): class Bass(PC):
""" Pattern class for a bass track. """ """ Pattern class for a bass track. """
vtype = 'BASS' vtype = 'BASS'
def getPgroup(self, ev):
""" Get group for bass pattern.
Fields - start, length, note, volume
"""
if len(ev) != 4:
error("There must be n groups of 4 in a pattern definition, "
"not <%s>." % ' '.join(ev) )
a = struct() def getPgroup(self, ev):
""" Get group for bass pattern.
a.offset = self.setBarOffset(ev[0]) Fields - start, length, note, volume
a.duration = getNoteLen( ev[1] )
offset = ev[2] """
n=offset[0]
if n in "1234567":
a.noteoffset = int(n)-1
else:
error("Note offset in Bass must be '1'...'7', not '%s'" % n )
n = offset[1:2]
if n == "#":
a.accidental = 1
ptr = 2
elif n == 'b' or n == 'b' or n == '&':
a.accidental = -1
ptr = 2
else:
a.accidental = 0
ptr = 1
a.addoctave = 0
for n in ev[2][ptr:]: if len(ev) != 4:
if n == '+': error("There must be n groups of 4 in a pattern definition, "
a.addoctave += 12 "not <%s>" % ' '.join(ev) )
elif n == '-':
a.addoctave -= 12
else:
error("Only '- + # b &' are permitted after a noteoffset, not '%s'" % n)
a.vol = stoi(ev[3], "Note volume in Bass definition not int.")
return a
def restart(self): a = struct()
self.ssvoice = -1
def trackBar(self, pattern, ctable): a.offset = self.setBarOffset(ev[0])
""" Do the bass bar. a.duration = getNoteLen( ev[1] )
Called from self.bar() offset = ev[2]
n=offset[0]
""" if n in "1234567":
a.noteoffset = int(n)-1
sc = self.seq else:
unify = self.unify[sc] error("Note offset in Bass must be '1'...'7', not '%s'" % n )
n = offset[1:2]
if n == "#":
a.accidental = 1
ptr = 2
elif n == 'b' or n == 'b' or n == '&':
a.accidental = -1
ptr = 2
else:
a.accidental = 0
ptr = 1
a.addoctave = 0
for n in ev[2][ptr:]:
if n == '+':
a.addoctave += 12
elif n == '-':
a.addoctave -= 12
else:
error("Only '- + # b &' are permitted after a noteoffset, not '%s'" % n)
a.vol = stoi(ev[3], "Note volume in Bass definition not int")
return a
def restart(self):
self.ssvoice = -1
def trackBar(self, pattern, ctable):
""" Do the bass bar.
Called from self.bar()
"""
sc = self.seq
unify = self.unify[sc]
for p in pattern:
ct = self.getChordInPos(p.offset, ctable)
if ct.bassZ:
continue
note = ct.chord.scaleList[p.noteoffset] + p.addoctave + p.accidental
if not self.harmonyOnly[sc]:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(note),
self.adjustVolume(p.vol, p.offset))
if self.harmony[sc]:
h = harmonize(self.harmony[sc], note, ct.chord.noteList)
for n in h:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(n),
self.adjustVolume(p.vol * self.harmonyVolume[sc], -1))
for p in pattern:
ct = self.getChordInPos(p.offset, ctable)
if ct.bassZ:
continue
note = ct.chord.scaleList[p.noteoffset] + p.addoctave + p.accidental
if not self.harmonyOnly[sc]:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(note),
self.adjustVolume(p.vol, p.offset))
if self.harmony[sc]:
h = harmonize(self.harmony[sc], note, ct.chord.noteList)
for n in h:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(n),
self.adjustVolume(p.vol * self.harmonyVolume[sc], -1))

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -29,240 +29,376 @@ import random
import gbl import gbl
from MMA.notelen import getNoteLen from MMA.notelen import getNoteLen
from MMA.common import * from MMA.common import *
from MMA.pat import PC from MMA.pat import PC, seqBump
class Chord(PC): class Chord(PC):
""" Pattern class for a chord track. """ """ Pattern class for a chord track. """
vtype = 'CHORD' vtype = 'CHORD'
def getPgroup(self, ev): def setVoicing(self, ln):
""" Get group for chord pattern. """ set the Voicing Mode options. Only valid for CHORDS. """
Tuples: [start, length, volume (,volume ...) ] for l in ln:
""" try:
mode, val = l.upper().split('=')
except:
error("Each Voicing option must contain a '=', not '%s'" % l)
if len(ev) < 3:
error("There must be at least 3 items in each group "
"of a chord pattern definition, not <%s>." % ' '.join(ev))
a = struct() if mode == 'MODE':
valid= ("-", "OPTIMAL", "NONE", "ROOT", "COMPRESSED", "INVERT")
a.offset = self.setBarOffset(ev[0]) if not val in valid:
a.duration = getNoteLen(ev[1]) error("Valid Voicing Modes are: %s" % " ".join(valid))
vv = ev[2:] if val in ('-', 'NONE',"ROOT"):
if len(vv)>8: val = None
error("Only 8 volumes are permitted in Chord definition, not %s." % len(vv))
a.vol = [0] * 8
for i,v in enumerate(vv):
v=stoi(v, "Expecting integer in volume list for Chord definition.")
a.vol[i]=v
for i in range(i+1,8): # force remaining volumes if val and (max(self.invert) + max(self.compress)):
a.vol[i]=v warning("Setting both VoicingMode and Invert/Compress is not a good idea")
return a """ When we set voicing mode we always reset this. This forces
the voicingmode code to restart its rotations.
"""
def restart(self): self.lastChord = []
self.ssvoice = -1
self.lastChord = None
self.voicing.mode = val
def chordVoicing(self, chord, vMove):
""" Voicing algorithm by Alain Brenzikofer. """
elif mode == 'RANGE':
val = stoi(val, "Argument for %s Voicing Range "
"must be a value" % self.name)
sc = self.seq if val < 1 or val > 30:
vmode=self.voicing.mode error("Voicing Range '%s' out-of-range; "
"must be 1 to 30" % val)
if vmode == "OPTIMAL": self.voicing.range = val
# Initialize with a voicing around centerNote
chord.center1(self.lastChord) elif mode == 'CENTER':
val = stoi(val, "Argument for %s Voicing Center "
"must be a value" % self.name)
# Adjust range and center if val < 1 or val > 12:
error("Voicing Center %s out-of-range; "
"must be 1 to 12" % val)
if not (self.voicing.bcount or self.voicing.random): self.voicing.center = val
chord.center2(self.voicing.center, self.voicing.range/2)
elif mode == 'RMOVE':
val = stoi(val, "Argument for %s Voicing Random "
"must be a value" % self.name)
# Move voicing if val < 0 or val > 100:
error("Voicing Random value must be 0 to 100 "
"not %s" % val)
elif self.lastChord: self.voicing.random = val
if (self.lastChord != chord.noteList ) and vMove: self.voicing.bcount = 0
chord.center2(self.voicing.center,self.voicing.range/2)
vMove = 0
# Update voicingCenter elif mode == 'MOVE':
val = stoi(val, "Argument for %s Voicing Move "
"must be a value" % self.name)
sum=0 if val < 0 :
for n in chord.noteList: error("Voicing Move (bar count) must >= 0, not %s" % val)
sum += n if val > 20:
c=sum/chord.noteListLen warning("Voicing Move (bar count) %s is quite large" % val)
""" If using random voicing move it it's possible to self.voicing.bcount = val
get way off the selected octave. This check ensures self.voicing.random = 0
that the centerpoint stays in a tight range.
Note that if using voicingMove manually (not random)
it is quite possible to move the chord centers to very
low or high keyboard positions!
"""
if self.voicing.random: elif mode == 'DIR':
if c < -4: c=0 val = stoi(val, "Argument for %s Voicing Dir (move direction) "
elif c >4: c=4 "must be a value" % self.name)
self.voicing.center=c
if not val in (1,0,-1):
error("Voicing Move Dir -1, 0 or 1, not %s" % val)
elif vmode == "COMPRESSED": self.voicing.dir = val
chord.compress()
elif vmode == "INVERT":
if chord.rootNote < -2:
chord.invert(1)
elif chord.rootNote > 2: if gbl.debug:
chord.invert(-1) v=self.voicing
chord.compress() print "Set %s Voicing MODE=%s" % (self.name, v.mode),
print "RANGE=%s CENTER=%s" % (v.range, v.center),
print "RMOVE=%s MOVE=%s DIR=%s" % (v.random, v.bcount, v.dir)
self.lastChord = chord.noteList[:]
return vMove def setDupRoot(self, ln):
""" set/unset root duplication. Only for CHORDs """
def trackBar(self, pattern, ctable): ln=self.lnExpand(ln, 'DupRoot')
""" Do a chord bar. Called from self.bar() """ tmp = []
sc = self.seq for n in ln:
unify = self.unify[sc] n = stoi(n, "Argument for %s DupRoot must be a value" % self.name)
""" Set voicing move ONCE at the top of each bar. if n < -9 or n > 9:
The voicing code resets vmove to 0 the first error("DupRoot %s out-of-range; must be -9 to 9" % n)
time it's used. That way only one movement is
done in a bar.
"""
vmove = 0 tmp.append( n * 12 )
if self.voicing.random: self.dupRoot = seqBump(tmp)
if random.randrange(100) <= self.voicing.random:
vmove = random.choice((-1,1))
elif self.voicing.bcount and self.voicing.dir:
vmove = self.voicing.dir
if gbl.debug:
print "Set %s DupRoot to " % self.name,
printList(ln)
for p in pattern:
tb = self.getChordInPos(p.offset, ctable)
if tb.chordZ: def setStrum(self, ln):
continue """ Set Strum time. """
self.crDupRoot = self.dupRoot[sc] ln=self.lnExpand(ln, 'Strum')
tmp = []
vmode = self.voicing.mode for n in ln:
vols = p.vol[0:tb.chord.noteListLen] n = stoi(n, "Argument for %s Strum must be an integer" % self.name)
# Limit the chord notes. This works even if THERE IS A VOICINGMODE! if n < 0 or n > 100:
error("Strum %s out-of-range; must be 0..100" % n)
if self.chordLimit: tmp.append(n)
tb.chord.limit(self.chordLimit)
""" Compress chord into single octave if 'compress' is set self.strum = seqBump(tmp)
We do it here, before octave, transpose and invert!
Ignored if we have a VOICINGMODE.
"""
if self.compress[sc] and not vmode: if gbl.debug:
tb.chord.compress() print "Set %s Strum to %s" % (self.name, self.strum)
# Do the voicing stuff.
if vmode: def getPgroup(self, ev):
vmove=self.chordVoicing(tb.chord, vmove) """ Get group for chord pattern.
# Invert. Tuples: [start, length, volume (,volume ...) ]
"""
if self.invert[sc]: if len(ev) < 3:
tb.chord.invert(self.invert[sc]) error("There must be at least 3 items in each group "
"of a chord pattern definition, not <%s>" % ' '.join(ev))
# Set STRUM flags a = struct()
strumAdjust = self.strum[sc] a.offset = self.setBarOffset(ev[0])
strumOffset = 0 a.duration = getNoteLen(ev[1])
sd = self.direction[sc]
if sd=='BOTH':
sd = 'BOTHDOWN'
if sd == 'BOTHDOWN':
sd = 'BOTHUP'
elif sd == 'BOTHUP':
sd = 'BOTHDOWN'
if strumAdjust and sd in ('DOWN', 'BOTHDOWN'): vv = ev[2:]
strumOffset += strumAdjust * tb.chord.noteListLen if len(vv)>8:
strumAdjust = -strumAdjust error("Only 8 volumes are permitted in Chord definition, not %s" % len(vv))
a.vol = [0] * 8
for i,v in enumerate(vv):
v=stoi(v, "Expecting integer in volume list for Chord definition")
a.vol[i]=v
""" Voicing adjustment for 'jazz' or altered chords. If a chord (most for i in range(i+1,8): # force remaining volumes
likely something like a M7 or flat-9 ends up with any 2 adjacent a.vol[i]=v
notes separated by a single tone an unconfortable dissonance results.
This little check compares all notes in the chord and will cut the
volume of one note to reduce the disonance. Usually this will be
the root note volume being decreased.
"""
nl=tb.chord.noteList return a
l=len(nl)
for j in range(l-1):
r = nl[j]
for i in range(j+1, l):
if nl[i] in (r-1, r+1, r-13, r+13) and vols[i] >= vols[0]:
vols[j] = vols[i]/2
break
loo = zip(nl, vols) # this is a note/volume array of tuples def restart(self):
self.ssvoice = -1
self.lastChord = None
""" Duplicate the root. This can be set from a DupRoot command def chordVoicing(self, chord, vMove):
or by chordVoicing(). Notes: """ Voicing algorithm by Alain Brenzikofer. """
- The volume for the added root will be the average of the chord
notes (ignoring OFF notes) divided by 2.
- If the new note (after transpose and octave adjustments
is out of MIDI range it will be ignored.
"""
if self.crDupRoot:
root = tb.chord.rootNote + self.crDupRoot
t = root + self.octave[sc] + gbl.transpose
if t >=0 and t < 128:
v=0
c=0
for vv in vols:
if vv:
v += vv
c += 2
v /= c
loo.append( (tb.chord.rootNote + self.crDupRoot, v))
for note, v in sorted(loo): # sorting low-to-high notes. Mainly for STRUM. sc = self.seq
self.sendNote( vmode=self.voicing.mode
p.offset+strumOffset,
self.getDur(p.duration),
self.adjustNote(note),
self.adjustVolume( v, p.offset) )
strumOffset += strumAdjust if vmode == "OPTIMAL":
tb.chord.reset() # important, other tracks chord object # Initialize with a voicing around centerNote
# Adjust the voicingMove counter at the end of the bar chord.center1(self.lastChord)
if self.voicing.bcount: # Adjust range and center
self.voicing.bcount -= 1
if not (self.voicing.bcount or self.voicing.random):
chord.center2(self.voicing.center, self.voicing.range/2)
# Move voicing
elif self.lastChord:
if (self.lastChord != chord.noteList ) and vMove:
chord.center2(self.voicing.center,self.voicing.range/2)
vMove = 0
# Update voicingCenter
sum=0
for n in chord.noteList:
sum += n
c=sum/chord.noteListLen
""" If using random voicing move it it's possible to
get way off the selected octave. This check ensures
that the centerpoint stays in a tight range.
Note that if using voicingMove manually (not random)
it is quite possible to move the chord centers to very
low or high keyboard positions!
"""
if self.voicing.random:
if c < -4: c=0
elif c >4: c=4
self.voicing.center=c
elif vmode == "COMPRESSED":
chord.compress()
elif vmode == "INVERT":
if chord.rootNote < -2:
chord.invert(1)
elif chord.rootNote > 2:
chord.invert(-1)
chord.compress()
self.lastChord = chord.noteList[:]
return vMove
def trackBar(self, pattern, ctable):
""" Do a chord bar. Called from self.bar() """
sc = self.seq
unify = self.unify[sc]
""" Set voicing move ONCE at the top of each bar.
The voicing code resets vmove to 0 the first
time it's used. That way only one movement is
done in a bar.
"""
vmove = 0
if self.voicing.random:
if random.randrange(100) <= self.voicing.random:
vmove = random.choice((-1,1))
elif self.voicing.bcount and self.voicing.dir:
vmove = self.voicing.dir
for p in pattern:
tb = self.getChordInPos(p.offset, ctable)
if tb.chordZ:
continue
self.crDupRoot = self.dupRoot[sc]
vmode = self.voicing.mode
vols = p.vol[0:tb.chord.noteListLen]
# Limit the chord notes. This works even if THERE IS A VOICINGMODE!
if self.chordLimit:
tb.chord.limit(self.chordLimit)
""" Compress chord into single octave if 'compress' is set
We do it here, before octave, transpose and invert!
Ignored if we have a VOICINGMODE.
"""
if self.compress[sc] and not vmode:
tb.chord.compress()
# Do the voicing stuff.
if vmode:
vmove=self.chordVoicing(tb.chord, vmove)
# Invert.
if self.invert[sc]:
tb.chord.invert(self.invert[sc])
# Set STRUM flags
strumAdjust = self.strum[sc]
strumOffset = 0
sd = self.direction[sc]
if sd=='BOTH':
sd = 'BOTHDOWN'
if sd == 'BOTHDOWN':
sd = 'BOTHUP'
elif sd == 'BOTHUP':
sd = 'BOTHDOWN'
if strumAdjust and sd in ('DOWN', 'BOTHDOWN'):
strumOffset += strumAdjust * tb.chord.noteListLen
strumAdjust = -strumAdjust
""" Voicing adjustment for 'jazz' or altered chords. If a chord (most
likely something like a M7 or flat-9 ends up with any 2 adjacent
notes separated by a single tone an unconfortable dissonance results.
This little check compares all notes in the chord and will cut the
volume of one note to reduce the disonance. Usually this will be
the root note volume being decreased.
"""
nl=tb.chord.noteList
l=len(nl)
for j in range(l-1):
r = nl[j]
for i in range(j+1, l):
if nl[i] in (r-1, r+1, r-13, r+13) and vols[i] >= vols[0]:
vols[j] = vols[i]/2
break
loo = zip(nl, vols) # this is a note/volume array of tuples
""" Duplicate the root. This can be set from a DupRoot command
or by chordVoicing(). Notes:
- The volume for the added root will be the average of the chord
notes (ignoring OFF notes) divided by 2.
- If the new note (after transpose and octave adjustments
is out of MIDI range it will be ignored.
"""
if self.crDupRoot:
root = tb.chord.rootNote + self.crDupRoot
t = root + self.octave[sc] + gbl.transpose
if t >=0 and t < 128:
v=0
c=0
for vv in vols:
if vv:
v += vv
c += 2
v /= c
loo.append( (tb.chord.rootNote + self.crDupRoot, v))
for note, v in sorted(loo): # sorting low-to-high notes. Mainly for STRUM.
self.sendNote(
p.offset+strumOffset,
self.getDur(p.duration),
self.adjustNote(note),
self.adjustVolume( v, p.offset) )
strumOffset += strumAdjust
tb.chord.reset() # important, other tracks chord object
# Adjust the voicingMove counter at the end of the bar
if self.voicing.bcount:
self.voicing.bcount -= 1

View File

@ -2,7 +2,7 @@
# patDrum.py # patDrum.py
""" """
This module is an integeral part of the program This module is an integeral part of the program
MMA - Musical Midi Accompaniment. MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
import gbl import gbl
@ -31,73 +31,84 @@ from MMA.pat import PC, seqBump
class Drum(PC): class Drum(PC):
""" Pattern class for a drum track. """ """ Pattern class for a drum track. """
vtype = 'DRUM' vtype = 'DRUM'
toneList = [38] toneList = [38]
def setTone(self, ln): def __init__(self, ln):
""" Set a tone list. Only valid for DRUMs. """ init for drum track. """
ln[] is not nesc. the right length.
"""
ln=self.lnExpand(ln, 'Tone')
tmp = []
for n in ln:
tmp.append(MMA.translate.dtable.get(n))
self.toneList = seqBump( tmp ) PC.__init__(self, ln)
self.setChannel('10')
if not gbl.mtrks[self.channel].trackname:
gbl.mtrks[self.channel].addTrkName(0, 'Drum')
def restart(self):
self.ssvoice = -1 def setTone(self, ln):
""" Set a tone list. Only valid for DRUMs.
ln[] is not nesc. the right length.
def getPgroup(self, ev): """
""" Get group for a drum pattern.
Fields - start, length, volume
"""
if len(ev) != 3: ln=self.lnExpand(ln, 'Tone')
error("There must be at exactly 3 items in each " tmp = []
"group of a drum define, not <%s>." % ' '.join(ev) )
for n in ln:
tmp.append(MMA.translate.dtable.get(n))
self.toneList = seqBump( tmp )
def restart(self):
self.ssvoice = -1
def getPgroup(self, ev):
""" Get group for a drum pattern.
Fields - start, length, volume
"""
if len(ev) != 3:
error("There must be at exactly 3 items in each "
"group of a drum define, not <%s>" % ' '.join(ev) )
a = struct()
a.offset = self.setBarOffset(ev[0])
a.duration = getNoteLen(ev[1])
a.vol = stoi(ev[2], "Type error in Drum volume")
return a
def trackBar(self, pattern, ctable):
""" Do a drum bar.
Called from self.bar()
"""
sc = self.seq
for p in pattern:
tb = self.getChordInPos(p.offset, ctable)
if tb.drumZ:
continue
self.sendNote(
p.offset,
self.getDur(p.duration),
self.toneList[sc],
self.adjustVolume(p.vol, p.offset) )
a = struct()
a.offset = self.setBarOffset(ev[0])
a.duration = getNoteLen(ev[1])
a.vol = stoi(ev[2], "Type error in Drum volume.")
return a
def trackBar(self, pattern, ctable):
""" Do a drum bar.
Called from self.bar()
"""
sc = self.seq
for p in pattern:
tb = self.getChordInPos(p.offset, ctable)
if tb.drumZ:
continue
self.sendNote(
p.offset,
self.getDur(p.duration),
self.toneList[sc],
self.adjustVolume(p.vol, p.offset) )

View File

@ -19,197 +19,213 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
import random import random
from MMA.harmony import harmonize from MMA.harmony import harmonize
from MMA.notelen import getNoteLen from MMA.notelen import getNoteLen
import gbl import gbl
from MMA.common import * from MMA.common import *
from MMA.pat import PC from MMA.pat import PC, seqBump
class Scale(PC): class Scale(PC):
""" Pattern class for a Scale track. """ """ Pattern class for a Scale track. """
vtype = 'SCALE' vtype = 'SCALE'
lastNote = -1 lastNote = -1
lastChord = None lastChord = None
lastStype = None lastStype = None
lastDirect = 1 lastDirect = 1
lastRange = 0 lastRange = 0
sOffset = 0 sOffset = 0
notes = None notes = None
dirfact = 1 dirfact = 1
def getPgroup(self, ev): def getPgroup(self, ev):
""" Get group for scale patterns. """ Get group for scale patterns.
Fields - start, length, volume Fields - start, length, volume
""" """
if len(ev) != 3: if len(ev) != 3:
error("There must be at exactly 3 items in each group " error("There must be at exactly 3 items in each group "
"in a Scale definition, not <%s>." % ' '.join(ev)) "in a Scale definition, not <%s>." % ' '.join(ev))
a = struct() a = struct()
a.offset = self.setBarOffset(ev[0]) a.offset = self.setBarOffset(ev[0])
a.duration = getNoteLen(ev[1]) a.duration = getNoteLen(ev[1])
a.vol = stoi(ev[2], "Type error in Scale definition") a.vol = stoi(ev[2], "Type error in Scale definition")
return a return a
def restart(self): def setScaletype(self, ln):
self.ssvoice = -1 """ Set scale type. """
self.lastNote = -1
self.lastChord = None
self.lastStype = None
self.lastDirect = 1
self.lastRange = 0
self.sOffset = 0
self.notes = None
self.dirfact = 1
def trackBar(self, pattern, ctable): ln = self.lnExpand(ln, "ScaleType")
""" Do a scale bar. tmp = []
Called from self.bar() for n in ln:
""" n = n.upper()
if not n in ( 'CHROMATIC', 'AUTO'):
error("Unknown %s ScaleType. Only Chromatic and Auto are valid" % self.name)
tmp.append(n)
sc = self.seq self.scaleType = seqBump(tmp)
direct = self.direction[sc]
unify = self.unify[sc]
# If the range or direction has changed, we just start if gbl.debug:
# with a new scale. print "Set %s ScaleType to " % self.name,
printList(ln)
t = self.chordRange[sc] def restart(self):
if t != self.lastRange: self.ssvoice = -1
self.lastRange = t self.lastNote = -1
self.lastChord = None self.lastChord = None
self.lastStype = None
self.lastDirect = 1
self.lastRange = 0
self.sOffset = 0
self.notes = None
self.dirfact = 1
if self.lastDirect != direct: def trackBar(self, pattern, ctable):
self.lastDirect = direct """ Do a scale bar.
self.lastChord = None
for p in pattern: Called from self.bar()
"""
tb = self.getChordInPos(p.offset, ctable) sc = self.seq
direct = self.direction[sc]
unify = self.unify[sc]
if tb.scaleZ: # If the range or direction has changed, we just start
continue # with a new scale.
thisChord = tb.chord.tonic + tb.chord.chordType t = self.chordRange[sc]
stype = self.scaleType[sc] if t != self.lastRange:
self.lastRange = t
self.lastChord = None
if thisChord != self.lastChord or stype != self.lastStype: if self.lastDirect != direct:
self.lastChord = thisChord self.lastDirect = direct
self.lastStype = stype self.lastChord = None
if stype == 'CHROMATIC': for p in pattern:
notelist = [ tb.chord.rootNote + x for x in range(0,12)]
else: tb = self.getChordInPos(p.offset, ctable)
notelist = list(tb.chord.scaleList)
""" Get the current scale and append enuf copies if tb.scaleZ:
together for RANGE setting. If Range happens continue
to be 0 or 1 we end up with a single copy.
"""
ln=self.chordRange[sc] # RANGE 1...x (def. == 1)
o=0
self.notes = []
while ln >= 1:
for a in notelist:
self.notes.append(a+o)
o+=12
ln-=1
if ln>0 and ln<1: # for fractional scale lengths
ln = int(len(notelist) * ln)
if ln < 2: # important, must be at least 2 notes in a scale
ln=2
for a in notelist[:ln]:
self.notes.append(a+o)
if direct == 'DOWN':
self.dirfact = -1
if self.lastNote == -1:
self.sOffset = len(self.notes)-1
else:
self.sOffset = 0
if self.lastNote > -1:
if self.lastNote in self.notes:
self.sOffset = self.notes.index(self.lastNote)
else:
self.sOffset=len(self.notes)-1
for i, a in enumerate(self.notes):
if a>self.lastNote:
self.sOffset = i
break
# Keep offset into note list in range thisChord = tb.chord.tonic + tb.chord.chordType
stype = self.scaleType[sc]
# only > end of list if BOTH or UP if thisChord != self.lastChord or stype != self.lastStype:
self.lastChord = thisChord
self.lastStype = stype
if self.sOffset >= len(self.notes): if stype == 'CHROMATIC':
if direct == 'BOTH': notelist = [ tb.chord.rootNote + x for x in range(0,12)]
self.dirfact = -1
self.sOffset = len(self.notes)-2 else:
else: ## UP notelist = list(tb.chord.scaleList)
self.sOffset = 0
# only < start of list if DOWN or BOTH """ Get the current scale and append enuf copies
together for RANGE setting. If Range happens
to be 0 or 1 we end up with a single copy.
"""
elif self.sOffset < 0: ln=self.chordRange[sc] # RANGE 1...x (def. == 1)
if direct == 'BOTH':
self.dirfact = 1
self.sOffset = 1
else: ## DOWN
self.sOffset = len(self.notes)-1
if direct == 'RANDOM': o=0
note = random.choice(self.notes) self.notes = []
else:
note = self.notes[self.sOffset]
self.sOffset += self.dirfact
self.lastNote = note while ln >= 1:
for a in notelist:
self.notes.append(a+o)
o+=12
ln-=1
if not self.harmonyOnly[sc]: if ln>0 and ln<1: # for fractional scale lengths
self.sendNote( ln = int(len(notelist) * ln)
p.offset, if ln < 2: # important, must be at least 2 notes in a scale
self.getDur(p.duration), ln=2
self.adjustNote(note), for a in notelist[:ln]:
self.adjustVolume(p.vol, p.offset)) self.notes.append(a+o)
if direct == 'DOWN':
self.dirfact = -1
if self.lastNote == -1:
self.sOffset = len(self.notes)-1
else:
self.sOffset = 0
if self.lastNote > -1:
if self.lastNote in self.notes:
self.sOffset = self.notes.index(self.lastNote)
else:
self.sOffset=len(self.notes)-1
for i, a in enumerate(self.notes):
if a>self.lastNote:
self.sOffset = i
break
if self.harmony[sc]: # Keep offset into note list in range
ch = self.getChordInPos(p.offset, ctable).chord.noteList
h = harmonize(self.harmony[sc], note, ch) # only > end of list if BOTH or UP
for n in h:
self.sendNote( if self.sOffset >= len(self.notes):
p.offset, if direct == 'BOTH':
self.getDur(p.duration), self.dirfact = -1
self.adjustNote(n), self.sOffset = len(self.notes)-2
self.adjustVolume(self.harmonyVolume[sc] * p.vol, -1) ) else: ## UP
self.sOffset = 0
# only < start of list if DOWN or BOTH
elif self.sOffset < 0:
if direct == 'BOTH':
self.dirfact = 1
self.sOffset = 1
else: ## DOWN
self.sOffset = len(self.notes)-1
if direct == 'RANDOM':
note = random.choice(self.notes)
else:
note = self.notes[self.sOffset]
self.sOffset += self.dirfact
self.lastNote = note
if not self.harmonyOnly[sc]:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(note),
self.adjustVolume(p.vol, p.offset))
if self.harmony[sc]:
ch = self.getChordInPos(p.offset, ctable).chord.noteList
h = harmonize(self.harmony[sc], note, ch)
for n in h:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(n),
self.adjustVolume(self.harmonyVolume[sc] * p.vol, -1) )

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -34,500 +34,512 @@ import MMA.volume
class NoteList: class NoteList:
def __init__(self, length): def __init__(self, length):
self.dur = length self.dur = length
self.velocity = [] self.velocity = []
self.nl = [] self.nl = []
############################## ##############################
class Melody(PC): class Melody(PC):
""" The melody and solo tracks are identical, expect that """ The melody and solo tracks are identical, expect that
the solo tracks DO NOT get saved in grooves and are only the solo tracks DO NOT get saved in grooves and are only
initialized once. initialized once.
""" """
vtype = 'MELODY' vtype = 'MELODY'
drumType = None drumType = None
endTilde = []
drumTone = 38
endTilde = [] def setDrumType(self):
drumTone = 38 """ Set this track to be a drum track. """
def setDrumType(self): if self.channel:
""" Set this track to be a drum track. """ error("You cannot change a track to DRUM once it has been used")
if self.channel: self.drumType = 1
error("You cannot change a track to DRUM once it has been used.") self.setChannel('10')
self.drumType = 1
self.setChannel('10')
def definePattern(self, name, ln):
error("Melody/solo patterns cannot be defined")
def definePattern(self, name, ln):
error("Melody/solo patterns cannot be defined.")
def restart(self):
self.ssvoice = -1
def restart(self): def setTone(self, ln):
self.ssvoice = -1 """ A solo track can have a tone, if it is DRUMTYPE."""
def setTone(self, ln): if not self.drumType:
""" A solo track can have a tone, if it is DRUMTYPE.""" error("You must set a Solo track to DrumType before setting Tone")
if not self.drumType: if len(ln) > 1:
error("You must set a Solo track to DrumType before setting Tone.") error("Only 1 value permitted for Drum Tone in Solo tracks")
if len(ln) > 1: self.drumTone = MMA.translate.dtable.get(ln[0])
error("Only 1 value permitted for Drum Tone in Solo tracks.")
self.drumTone = MMA.translate.dtable.get(ln[0])
def getLine(self, pat, ctable):
""" Extract a melodyline for solo/melody tracks.
This is only called from trackbar(), but it's nicer
to isolate it here.
def getLine(self, pat, ctable):
""" Extract a melodyline for solo/melody tracks.
This is only called from trackbar(), but it's nicer RETURNS: notes structure. This is a dictionary. Each key represents
to isolate it here. an offset in MIDI ticks in the current bar. The data for
""" each entry is an array of notes, a duration and velocity:
sc = self.seq notes[offset].dur - duration in ticks
barEnd = gbl.BperQ*gbl.QperBar notes[offset].velocity[] - velocity for notes
notes[offset].defaultVel - default velocity for this offset
notes[offset].nl[] - list of notes (if the only note value
is None this is a rest placeholder)
acc=keySig.getAcc() """
# list of notename to midivalues sc = self.seq
barEnd = gbl.BperQ*gbl.QperBar
midiNotes = {'c':0, 'd':2, 'e':4, 'f':5, 'g':7, 'a':9, 'b':11, 'r':None } acc=keySig.getAcc()
""" The initial string is in the format "1ab;4c;;4r;". The trailing # list of notename to midivalues
';' is important and needed. If we don't have this requirement
we can't tell if the last note is a repeat of the previous. For
example, if we have coded "2a;2a;" as "2a;;" and we didn't
have the 'must end with ;' rule, we end up with "2a;" and
then we make this into 2 notes...or do we? Easiest just to
insist that all bars end with a ";".
"""
if not pat.endswith(';'): midiNotes = {'c':0, 'd':2, 'e':4, 'f':5, 'g':7, 'a':9, 'b':11, 'r':None }
error("All Solo strings must end with a ';'")
""" Take our list of note/value pairs and decode into """ The initial string is in the format "1ab;4c;;4r;". The trailing
a list of midi values. Quite ugly. ';' is important and needed. If we don't have this requirement
""" we can't tell if the last note is a repeat of the previous. For
example, if we have coded "2a;2a;" as "2a;;" and we didn't
have the 'must end with ;' rule, we end up with "2a;" and
then we make this into 2 notes...or do we? Easiest just to
insist that all bars end with a ";".
"""
if gbl.swingMode: if not pat.endswith(';'):
len8 = getNoteLen('8') error("All Solo strings must end with a ';'")
len81 = getNoteLen('81')
len82 = getNoteLen('82')
onBeats = [ x * gbl.BperQ for x in range(gbl.QperBar)]
offBeats = [ (x * gbl.BperQ + len8) for x in range(gbl.QperBar)]
""" Take our list of note/value pairs and decode into
a list of midi values. Quite ugly.
"""
length = getNoteLen('4') # default note length if gbl.swingMode:
lastc = '' # last parsed note len8 = getNoteLen('8')
velocity = 90 # intial/default velocity for solo notes len81 = getNoteLen('81')
harmony = self.harmony[sc] len82 = getNoteLen('82')
harmOnly = self.harmonyOnly[sc] onBeats = [ x * gbl.BperQ for x in range(gbl.QperBar)]
offBeats = [ (x * gbl.BperQ + len8) for x in range(gbl.QperBar)]
notes={} # A dict of NoteList, keys == offset
if self.drumType: length = getNoteLen('4') # default note length
isdrum = 1 lastc = '' # last parsed note
lastc = str(self.drumTone) velocity = 90 # intial/default velocity for solo notes
else:
isdrum = None
pat = pat.replace(' ', '').split(';')[:-1] notes={} # A dict of NoteList, keys == offset
# set initial offset into bar if self.drumType:
isdrum = 1
lastc = str(self.drumTone)
else:
isdrum = None
if pat[0].startswith("~"): pat = pat.replace(' ', '').split(';')[:-1]
pat[0]=pat[0][1:]
if not self.endTilde or self.endTilde[1] != gbl.tickOffset:
error("Previous line did not end with '~'.")
else:
offset = self.endTilde[0]
else:
offset = 0
lastOffset = None
# Strip off trailing ~ # set initial offset into bar
if pat[-1].endswith("~"): if pat[0].startswith("~"):
self.endTilde = [1, gbl.tickOffset + (gbl.BperQ * gbl.QperBar) ] pat[0]=pat[0][1:]
pat[-1]=pat[-1][:-1] if not self.endTilde or self.endTilde[1] != gbl.tickOffset:
else: error("Previous line did not end with '~'")
self.endTilde = [] else:
offset = self.endTilde[0]
else:
offset = 0
lastOffset = None
# Strip off trailing ~
# Begin parse loop if pat[-1].endswith("~"):
self.endTilde = [1, gbl.tickOffset + (gbl.BperQ * gbl.QperBar) ]
pat[-1]=pat[-1][:-1]
else:
self.endTilde = []
for a in pat:
if a == '<>':
continue
if offset >= barEnd: # Begin parse loop
error("Attempt to start Solo note '%s' after end of bar." % a)
# strip out all '<volume>' setting and adjust velocity for a in pat:
if a == '<>':
continue
a, vls = pextract(a, "<", ">") if offset >= barEnd:
if vls: error("Attempt to start Solo note '%s' after end of bar" % a)
if len(vls) > 1:
error("Only 1 volume string is permitted per note-set")
vls = vls[0].upper().strip() # strip out all '<volume>' setting and adjust velocity
if not vls in MMA.volume.vols:
error("%s string Expecting a valid volume, not '%s'" % \
(self.name, vls))
velocity *= MMA.volume.vols[vls]
a, vls = pextract(a, "<", ">")
if vls:
if len(vls) > 1:
error("Only 1 volume string is permitted per note-set")
""" Split the chord chunk into a note length and notes. Each vls = vls[0].upper().strip()
part of this is optional and defaults to the previously if not vls in MMA.volume.vols:
parsed value. error("%s string Expecting a valid volume, not '%s'" % \
""" (self.name, vls))
velocity *= MMA.volume.vols[vls]
i = 0
while i < len(a):
if not a[i] in '1234568.+':
break
else:
i+=1
if i: """ Split the chord chunk into a note length and notes. Each
l=getNoteLen(a[0:i]) part of this is optional and defaults to the previously
c=a[i:] parsed value.
else: """
l=length
c=a
if not c: i = 0
c=lastc while i < len(a):
if not c: if not a[i] in '1234568.+':
error("You must specify the first note in a solo line") break
else:
i+=1
length = l # set defaults for next loop if i:
lastc = c l=getNoteLen(a[0:i])
c=a[i:]
else:
l=length
c=a
if not c:
c=lastc
if not c:
error("You must specify the first note in a solo line")
""" Convert the note part into a series of midi values length = l # set defaults for next loop
Notes can be a single note, or a series of notes. And lastc = c
each note can be a letter a-g (or r), a '#,&,n' plus
a series of '+'s or '-'s. Drum solos must have each
note separated by ','s: "Snare1,Kick1,44".
"""
if isdrum:
c=c.split(',')
else:
c=list(c)
while c: """ Convert the note part into a series of midi values
Notes can be a single note, or a series of notes. And
each note can be a letter a-g (or r), a '#,&,n' plus
a series of '+'s or '-'s. Drum solos must have each
note separated by ','s: "Snare1,Kick1,44".
"""
# Parse off note name or 'r' for a rest if isdrum:
c=c.split(',')
else:
c=list(c)
name = c.pop(0) while c:
if name == 'r' and (offset in notes or c): # Parse off note name or 'r' for a rest
error("You cannot combine a rest with a note in "
"a chord for solos.")
name = c.pop(0)
if not isdrum: if name == 'r' and (offset in notes or c):
if not name in midiNotes: error("You cannot combine a rest with a note in a chord for solos")
error("%s encountered illegal note name '%s'."
% (self.name, name))
v = midiNotes[ name ]
# Parse out a "#', '&' or 'n' accidental. if not isdrum:
if not name in midiNotes:
error("%s encountered illegal note name '%s'"
% (self.name, name))
if c and c[0]=='#': v = midiNotes[ name ]
c.pop(0)
acc[name] = 1
elif c and c[0]=='&': # Parse out a "#', '&' or 'n' accidental.
c.pop(0)
acc[name] = -1
elif c and c[0]=='n': if c and c[0]=='#':
c.pop(0) c.pop(0)
acc[name] = 0 acc[name] = 1
if v != None: elif c and c[0]=='&':
v += acc[name] c.pop(0)
acc[name] = -1
# Parse out +/- (or series) for octave elif c and c[0]=='n':
c.pop(0)
acc[name] = 0
if c and c[0] == '+': if v != None:
while c and c[0] == '+': v += acc[name]
c.pop(0)
v += 12
elif c and c[0] == '-':
while c and c[0] == '-':
c.pop(0)
v -= 12
else: # Parse out +/- (or series) for octave
if not name: # just for leading '.'s
continue
if name == 'r':
v = midiNotes[ name ]
elif name == '*':
v = self.drumTone
else:
v = MMA.translate.dtable.get(name)
if c and c[0] == '+':
while c and c[0] == '+':
c.pop(0)
v += 12
elif c and c[0] == '-':
while c and c[0] == '-':
c.pop(0)
v -= 12
""" Swingmode -- This tests for successive 8ths on/off beat else:
If found, the first is converted to 'long' 8th, the 2nd to a 'short' if not name: # just for leading '.'s
and the offset for the 2nd is adjusted to comp. for the 'long'. continue
""" if name == 'r':
v = midiNotes[ name ]
elif name == '*':
v = self.drumTone
else:
v = MMA.translate.dtable.get(name)
if gbl.swingMode and l==len8 and \
offset in offBeats and \
lastOffset in onBeats and \
lastOffset in notes:
if notes[lastOffset].dur == len8:
offset = lastOffset + len81
notes[lastOffset].dur = len81
l=len82
""" Swingmode -- This tests for successive 8ths on/off beat
If found, the first is converted to 'long' 8th, the 2nd to a 'short'
and the offset for the 2nd is adjusted to comp. for the 'long'.
"""
# create a new note[] entry for this offset if gbl.swingMode and l==len8 and \
offset in offBeats and \
lastOffset in onBeats and \
lastOffset in notes:
if notes[lastOffset].dur == len8:
offset = lastOffset + len81
notes[lastOffset].dur = len81
l=len82
if not offset in notes:
notes[offset] = NoteList(l)
# add note event to note[] array # create a new note[] entry for this offset
notes[offset].nl.append(v) if not offset in notes:
notes[offset].velocity.append(self.adjustVolume(velocity, offset)) notes[offset] = NoteList(l)
""" Do harmony. This is done for each chord as they are # add note event to note[] array
parsed out. So, after parsing out the "16g" from the solo
string "4a;16g;4c;" we add the harmony notes to the 'g' note.
The chord is not processed if this is a "drum-type", if there is notes[offset].nl.append(v)
more than one note in the chord (we assume user harmony), notes[offset].velocity.append(self.adjustVolume(velocity, offset))
if the chord for the current beat is a 'z', or if the note
is a 'rest' (note==None).
"""
if harmony and offset in notes and not isdrum: notes[offset].defaultVel = velocity # needed for addHarmony()
nn=notes[offset]
if len(nn.nl) == 1 and nn.nl[0] != None: lastOffset = offset
tb = self.getChordInPos(offset, ctable) offset += l
if not tb.chordZ:
h = harmonize(harmony, nn.nl[0], tb.chord.bnoteList)
if offset <= barEnd:
if self.endTilde:
error("Tilde at end of bar has no effect")
""" If harmonyonly set then drop note, substitute harmony, else:
else append harmony notes to chord. if self.endTilde:
""" self.endTilde[0]=offset-barEnd
else:
warning("%s, end of last note overlaps end of bar by %2.3f "
"beat(s)." % (self.name, (offset-barEnd)/float(gbl.BperQ)))
for i in range(len(h)): return notes
nn.velocity.append(self.adjustVolume(velocity *
self.harmonyVolume[sc], offset))
if harmOnly:
nn.nl = h
else:
nn.nl.extend(h)
lastOffset = offset def addHarmony(self, notes, ctable):
offset += l """ Add harmony to solo notes. """
sc=self.seq
if offset <= barEnd: harmony = self.harmony[sc]
if self.endTilde: harmOnly = self.harmonyOnly[sc]
error("Tilde at end of bar has no effect.")
for offset in notes:
nn = notes[offset]
if len(nn.nl) == 1 and nn.nl[0] != None:
tb = self.getChordInPos(offset, ctable)
if tb.chordZ:
continue
else: h = harmonize(harmony, nn.nl[0], tb.chord.bnoteList)
if self.endTilde:
self.endTilde[0]=offset-barEnd
else:
warning("%s, end of last note overlaps end of bar by %2.3f "
"beat(s)." % (self.name, (offset-barEnd)/float(gbl.BperQ)))
return notes """ If harmonyonly set then drop note, substitute harmony,
else append harmony notes to chord.
"""
if harmOnly:
nn.nl = h
nn.velocity = []
off=0
else:
nn.nl.extend(h)
off=1
# Create velocites for harmony note(s)
def trackBar(self, pat, ctable): for i in range(off,len(nn.nl)):
""" Do the solo/melody line. Called from self.bar() """ nn.velocity.append(self.adjustVolume(nn.defaultVel *
self.harmonyVolume[sc], offset))
notes = self.getLine(pat, ctable) return notes
""" The notes structure is a dictionary. Each key represents an offset
in MIDI ticks in the current bar. The data for each entry is an array
of notes, a duration and velocity:
notes[offset].dur - duration in ticks
notes[offset].velocity[] - velocity for notes
notes[offset].nl[] - list of notes (if the only note value is None
this is a rest placeholder)
""" def trackBar(self, pat, ctable):
""" Do the solo/melody line. Called from self.bar() """
sc=self.seq notes = self.getLine(pat, ctable)
unify = self.unify[sc]
rptr = self.mallet if self.harmony[self.seq] and not self.drumType:
self.addHarmony(notes, ctable)
for offset in sorted(notes.keys()): sc=self.seq
nn=notes[offset] unify = self.unify[sc]
for n,v in zip(nn.nl, nn.velocity): rptr = self.mallet
if n == None: # skip rests
continue
if not self.drumType: # octave, transpose for offset in sorted(notes.keys()):
n = self.adjustNote(n) nn=notes[offset]
self.sendNote( offset, self.getDur(nn.dur), n, v) for n,v in zip(nn.nl, nn.velocity):
if n == None: # skip rests
continue
if not self.drumType: # octave, transpose
n = self.adjustNote(n)
self.sendNote( offset, self.getDur(nn.dur), n, v)
class Solo(Melody): class Solo(Melody):
""" Pattern class for a solo track. """ """ Pattern class for a solo track. """
vtype = 'SOLO' vtype = 'SOLO'
# Grooves are not saved/restored for solo tracks. # Grooves are not saved/restored for solo tracks.
def restoreGroove(self, gname): def restoreGroove(self, gname):
self.setSeqSize() self.setSeqSize()
def saveGroove(self, gname): def saveGroove(self, gname):
pass pass
################################## ##################################
""" Keysignature. This is only used in the solo/melody tracks so it """ Keysignature. This is only used in the solo/melody tracks so it
probably makes sense to have the parse routine here as well. To probably makes sense to have the parse routine here as well. To
contain everything in one location we make a single instance class contain everything in one location we make a single instance class
of the whole mess. of the whole mess.
""" """
class KeySig: class KeySig:
def __init__(self): def __init__(self):
self.kSig = 0 self.kSig = 0
majKy = { "C" : 0, "G" : 1, "D" : 2, majKy = { "C" : 0, "G" : 1, "D" : 2,
"A" : 3, "E" : 4, "B" : 5, "A" : 3, "E" : 4, "B" : 5,
"F#": 6, "C#": 7, "F" : -1, "F#": 6, "C#": 7, "F" : -1,
"Bb": -2, "Eb": -3, "Ab": -4, "Bb": -2, "Eb": -3, "Ab": -4,
"Db": -5, "Gb": -6, "Cb": -7 } "Db": -5, "Gb": -6, "Cb": -7 }
minKy = { "A" : 0, "E" : 1, "B" : 2, minKy = { "A" : 0, "E" : 1, "B" : 2,
"F#": 3, "C#": 4, "G#": 5, "F#": 3, "C#": 4, "G#": 5,
"D#": 6, "A#": 7, "D" : -1, "D#": 6, "A#": 7, "D" : -1,
"G" : -2, "C" : -3, "F" : -4, "G" : -2, "C" : -3, "F" : -4,
"Bb": -5, "Eb": -6, "Ab": -7 } "Bb": -5, "Eb": -6, "Ab": -7 }
def set(self,ln): def set(self,ln):
""" Set the keysignature. Used by solo tracks.""" """ Set the keysignature. Used by solo tracks."""
mi = 0 mi = 0
if len(ln) < 1 or len(ln) > 2: if len(ln) < 1 or len(ln) > 2:
error("KeySig only takes 1 or 2 arguments.") error("KeySig only takes 1 or 2 arguments")
if len(ln) == 2: if len(ln) == 2:
l=ln[1][0:3].upper() l=ln[1][0:3].upper()
if l == 'MIN': if l == 'MIN':
mi=1 mi=1
elif l == 'MAJ': elif l == 'MAJ':
mi=0 mi=0
else: else:
error("KeySig 2nd arg must be 'Major' or 'Minor', not '%s'" % ln[1]) error("KeySig 2nd arg must be 'Major' or 'Minor', not '%s'" % ln[1])
l=ln[0] l=ln[0]
t=l[0].upper() + l[1:] t=l[0].upper() + l[1:]
if mi and t in self.minKy: if mi and t in self.minKy:
self.kSig = self.minKy[t] self.kSig = self.minKy[t]
elif not mi and t in self.majKy: elif not mi and t in self.majKy:
self.kSig = self.majKy[t] self.kSig = self.majKy[t]
elif l[0] in "ABCDEFG": elif l[0] in "ABCDEFG":
error("There is no key signature name: '%s'" % l) error("There is no key signature name: '%s'" % l)
else: else:
c=l[0] c=l[0]
f=l[1].upper() f=l[1].upper()
if not f in ("B", "&", "#"): if not f in ("B", "&", "#"):
error("2nd char in KeySig must be 'b' or '#', not '%s'" % f) error("2nd char in KeySig must be 'b' or '#', not '%s'" % f)
if not c in "01234567": if not c in "01234567":
error("1st char in KeySig must be digit 0..7, not '%s'" % c) error("1st char in KeySig must be digit 0..7, not '%s'" % c)
self.kSig = int(c) self.kSig = int(c)
if f in ('B', '&'): if f in ('B', '&'):
self.kSig = -self.kSig self.kSig = -self.kSig
if not c in "01234567": if not c in "01234567":
error("1st char in KeySig must be digit 0..7, not '%s'" % c) error("1st char in KeySig must be digit 0..7, not '%s'" % c)
# Set the midi meta track with the keysig. This doen't do anything # Set the midi meta track with the keysig. This doen't do anything
# in the playback, but other programs may use it. # in the playback, but other programs may use it.
n = self.kSig n = self.kSig
if n < 0: if n < 0:
n = 256 + n n = 256 + n
gbl.mtrks[0].addKeySig(gbl.tickOffset, n, mi) gbl.mtrks[0].addKeySig(gbl.tickOffset, n, mi)
if gbl.debug: if gbl.debug:
n = self.kSig n = self.kSig
if n >= 0: if n >= 0:
f = "Sharps" f = "Sharps"
else: else:
f = "Flats" f = "Flats"
print "KeySig set to %s %s" % (abs(n), f) print "KeySig set to %s %s" % (abs(n), f)
def getAcc(self): def getAcc(self):
""" The solo parser needs to know which notes are accidentals. """ The solo parser needs to know which notes are accidentals.
This is simple with a keysig table. There is an entry for each note, This is simple with a keysig table. There is an entry for each note,
either -1,0,1 corresponding to flat,natural,sharp. We populate either -1,0,1 corresponding to flat,natural,sharp. We populate
the table for each bar from the keysig value. As we process the table for each bar from the keysig value. As we process
the bar data we update the table. There is one flaw here---in the bar data we update the table. There is one flaw here---in
real music an accidental for a note in a give octave does not real music an accidental for a note in a give octave does not
effect the following same-named notes in different octaves. effect the following same-named notes in different octaves.
In this routine IT DOES. In this routine IT DOES.
NOTE: This is recreated for each bar of music for each solo/melody track. NOTE: This is recreated for each bar of music for each solo/melody track.
""" """
acc = {'a':0, 'b':0, 'c':0, 'd':0, 'e':0, 'f':0, 'g':0 } acc = {'a':0, 'b':0, 'c':0, 'd':0, 'e':0, 'f':0, 'g':0 }
ks=self.kSig ks=self.kSig
if ks < 0: if ks < 0:
for a in range( abs(ks) ): for a in range( abs(ks) ):
acc[ ['b','e','a','d','g','c','f'][a] ] = -1 acc[ ['b','e','a','d','g','c','f'][a] ] = -1
else: else:
for a in range(ks): for a in range(ks):
acc[ ['f','c','g','d','a','e','b'][a] ] = 1 acc[ ['f','c','g','d','a','e','b'][a] ] = 1
return acc return acc
keySig=KeySig() # single instance keySig=KeySig() # single instance
####################### #######################
""" When solos are included in a chord/data line they are """ When solos are included in a chord/data line they are
@ -539,83 +551,83 @@ autoSoloTracks = [ 'SOLO', 'SOLO-1', 'SOLO-2', 'SOLO-3' ]
def setAutoSolo(ln): def setAutoSolo(ln):
""" Set the order and names of tracks to use when assigning """ Set the order and names of tracks to use when assigning
automatic solos (specified on chord lines in {}s). automatic solos (specified on chord lines in {}s).
""" """
global autoSoloTracks global autoSoloTracks
if not len(ln): if not len(ln):
error("You must specify at least one track for autosolos.") error("You must specify at least one track for autosolos")
autoSoloTracks = [] autoSoloTracks = []
for n in ln: for n in ln:
n=n.upper() n=n.upper()
MMA.alloc.trackAlloc(n, 1) MMA.alloc.trackAlloc(n, 1)
if gbl.tnames[n].vtype not in ('MELODY', 'SOLO'): if gbl.tnames[n].vtype not in ('MELODY', 'SOLO'):
error("All autotracks must be Melody or Solo tracks, " error("All autotracks must be Melody or Solo tracks, not %s" % gbl.tnames[n].vtype)
"not %s." % gbl.tnames[n].vtype)
autoSoloTracks.append(n) autoSoloTracks.append(n)
if gbl.debug: if gbl.debug:
print "AutoSolo track names:", print "AutoSolo track names:",
for a in autoSoloTracks: for a in autoSoloTracks:
print a, print a,
print print
############### ###############
def extractSolo(ln, rptcount): def extractSolo(ln, rptcount):
""" Parser calls this to extract solo strings. """ """ Parser calls this to extract solo strings. """
a = ln.count('{') a = ln.count('{')
b = ln.count('}') b = ln.count('}')
if a != b: if a != b:
error("Mismatched {}s for solo found in chord line.") error("Mismatched {}s for solo found in chord line")
if a: if a:
if rptcount > 1: if rptcount > 1:
error("Bars with both repeat count and solos are not permitted.") error("Bars with both repeat count and solos are not permitted")
ln, solo = pextract(ln, '{', '}') ln, solo = pextract(ln, '{', '}')
if len(solo) > len(autoSoloTracks): if len(solo) > len(autoSoloTracks):
error("Too many melody/solo riffs in chord line. %s used, " error("Too many melody/solo riffs in chord line. %s used, "
"only %s defined." % (len(solo), len(autoSoloTracks)) ) "only %s defined" % (len(solo), len(autoSoloTracks)) )
firstSolo = solo[0][:] # save for autoharmony tracks firstSolo = solo[0][:] # save for autoharmony tracks
""" We have the solo information. Now we loop though each "solo" and: """ We have the solo information. Now we loop though each "solo" and:
1. Ensure or Create a MMA track for the solo 1. Ensure or Create a MMA track for the solo
2. Push the solo data into a Riff for the given track. 2. Push the solo data into a Riff for the given track.
"""
for s, trk in zip(solo, autoSoloTracks):
MMA.alloc.trackAlloc(trk, 1)
gbl.tnames[trk].setRiff( s.strip() )
""" After all the solo data is interpreted and sent to the
correct track, we check any leftover tracks. If any of these
tracks are empty of data AND are harmonyonly the note
data from the first track is interpeted again for that
track. Tricky: the max() is needed since harmonyonly can
have different setting for each bar...this way
the copy is done if ANY bar in the seq has harmonyonly set.
""" """
for t in autoSoloTracks[1:]: for s, trk in zip(solo, autoSoloTracks):
if gbl.tnames.has_key(t) and gbl.tnames[t].riff == [] \ MMA.alloc.trackAlloc(trk, 1)
and max(gbl.tnames[t].harmonyOnly): gbl.tnames[trk].setRiff( s.strip() )
gbl.tnames[t].setRiff( firstSolo[:] )
if gbl.debug:
print "%s duplicated to %s for HarmonyOnly." % (trk, t)
return ln """ After all the solo data is interpreted and sent to the
correct track, we check any leftover tracks. If any of these
tracks are empty of data AND are harmonyonly the note
data from the first track is interpeted again for that
track. Tricky: the max() is needed since harmonyonly can
have different setting for each bar...this way
the copy is done if ANY bar in the seq has harmonyonly set.
"""
for t in autoSoloTracks[1:]:
if gbl.tnames.has_key(t) and gbl.tnames[t].riff == [] \
and max(gbl.tnames[t].harmonyOnly):
gbl.tnames[t].setRiff( firstSolo[:] )
if gbl.debug:
print "%s duplicated to %s for HarmonyOnly." % (trk, t)
return ln

View File

@ -2,7 +2,7 @@
# patWalk.py # patWalk.py
""" """
This module is an integeral part of the program This module is an integeral part of the program
MMA - Musical Midi Accompaniment. MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
@ -34,131 +34,131 @@ from MMA.pat import PC
class Walk(PC): class Walk(PC):
""" Pattern class for a walking bass track. """ """ Pattern class for a walking bass track. """
vtype = 'WALK' vtype = 'WALK'
walkChoice = 0 walkChoice = 0
def getPgroup(self, ev):
""" Get group for walking bass pattern.
Fields - start, length, volume
"""
if len(ev) != 3: def getPgroup(self, ev):
error("There must be at exactly 3 items in each group in " """ Get group for walking bass pattern.
"a Walking Bass definition, not <%s>." % ' '.join(ev))
a = struct() Fields - start, length, volume
"""
a.offset = self.setBarOffset(ev[0])
a.duration = getNoteLen(ev[1])
a.vol = stoi(ev[2], "Type error in Walking Bass definition")
return a if len(ev) != 3:
error("There must be at exactly 3 items in each group in "
"a Walking Bass definition, not <%s>" % ' '.join(ev))
def restart(self): a = struct()
self.ssvoice = -1
self.walkChoice = 0
def trackBar(self, pattern, ctable):
""" Do a waling bass bar.
Called from self.bar()
"""
sc=self.seq a.offset = self.setBarOffset(ev[0])
dir = self.direction[sc] a.duration = getNoteLen(ev[1])
unify = self.unify[sc] a.vol = stoi(ev[2], "Type error in Walking Bass definition")
for p in pattern:
tb = self.getChordInPos(p.offset, ctable)
if tb.walkZ:
continue
root = tb.chord.rootNote # root note of chord
""" Create a note list from the current scale. We do return a
this for each beat, but it's pretty fast. The note
list is simply notes 0..6 of the scale PLUS notes
1..5 reversed. So, a Cmajor chord would result in
the note list (0,2,4,5,7,9,7,5,4,2).
Note that we deliberately skip the 7th. Too often
the chord is a Major but the melody note will be
the dom. 7th and the M7 will sound off. So, just
err on the side of caution.
If DIR is UP or DOWN we don't append the 2nd half
of the scale.
If DIR is DOWN we reverse the order as well.
"""
wNotes = list(tb.chord.scaleList[0:6])
if dir not in ('UP', 'DOWN'):
b = list(tb.chord.scaleList[1:5])
b.reverse()
wNotes += b
if dir == 'DOWN':
wNotes.reverse()
# Ensure that the offset is in range.
if self.walkChoice >= len(wNotes) or self.walkChoice < 0:
self.walkChoice = 0
""" Even with a walking bass it's nice to have the chord root on
beat 1 ... not all the time, but most. This bit of code ensures
that more that 50% of beat ones will have the root.
"""
if p.offset == 0 and random.choice((0,1)):
self.walkChoice=0
note = wNotes[self.walkChoice]
""" Adjust offset for NEXT TIME. If the direction is
up/down we just increment the pointer. If we have
direction set to RANDOM then we select either -1,
0 or 1 with equal change for moving up, down or
not-at-all. With BOTH we have a preference to move up.
"""
if dir in ('UP', 'DOWN'):
self.walkChoice += 1
elif dir == 'RANDOM':
self.walkChoice += random.choice((0,1,-1))
else: # BOTH
self.walkChoice += random.choice( (-1,0,0,2,2,1,1,1,1,1,1,1))
if not self.harmonyOnly[sc]:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(note),
self.adjustVolume(p.vol, p.offset) )
if self.harmony[sc]: def restart(self):
ch = self.getChordInPos(p.offset, ctable).chord.noteList self.ssvoice = -1
h = harmonize(self.harmony[sc], note, ch) self.walkChoice = 0
for n in h:
self.sendNote(
p.offset, def trackBar(self, pattern, ctable):
self.getDur(p.duration), """ Do a waling bass bar.
self.adjustNote(n),
self.adjustVolume(p.vol * self.harmonyVolume[sc], -1) ) Called from self.bar()
"""
sc=self.seq
dir = self.direction[sc]
unify = self.unify[sc]
for p in pattern:
tb = self.getChordInPos(p.offset, ctable)
if tb.walkZ:
continue
root = tb.chord.rootNote # root note of chord
""" Create a note list from the current scale. We do
this for each beat, but it's pretty fast. The note
list is simply notes 0..6 of the scale PLUS notes
1..5 reversed. So, a Cmajor chord would result in
the note list (0,2,4,5,7,9,7,5,4,2).
Note that we deliberately skip the 7th. Too often
the chord is a Major but the melody note will be
the dom. 7th and the M7 will sound off. So, just
err on the side of caution.
If DIR is UP or DOWN we don't append the 2nd half
of the scale.
If DIR is DOWN we reverse the order as well.
"""
wNotes = list(tb.chord.scaleList[0:6])
if dir not in ('UP', 'DOWN'):
b = list(tb.chord.scaleList[1:5])
b.reverse()
wNotes += b
if dir == 'DOWN':
wNotes.reverse()
# Ensure that the offset is in range.
if self.walkChoice >= len(wNotes) or self.walkChoice < 0:
self.walkChoice = 0
""" Even with a walking bass it's nice to have the chord root on
beat 1 ... not all the time, but most. This bit of code ensures
that more that 50% of beat ones will have the root.
"""
if p.offset == 0 and random.choice((0,1)):
self.walkChoice=0
note = wNotes[self.walkChoice]
""" Adjust offset for NEXT TIME. If the direction is
up/down we just increment the pointer. If we have
direction set to RANDOM then we select either -1,
0 or 1 with equal change for moving up, down or
not-at-all. With BOTH we have a preference to move up.
"""
if dir in ('UP', 'DOWN'):
self.walkChoice += 1
elif dir == 'RANDOM':
self.walkChoice += random.choice((0,1,-1))
else: # BOTH
self.walkChoice += random.choice( (-1,0,0,2,2,1,1,1,1,1,1,1))
if not self.harmonyOnly[sc]:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(note),
self.adjustVolume(p.vol, p.offset) )
if self.harmony[sc]:
ch = self.getChordInPos(p.offset, ctable).chord.noteList
h = harmonize(self.harmony[sc], note, ch)
for n in h:
self.sendNote(
p.offset,
self.getDur(p.duration),
self.adjustNote(n),
self.adjustVolume(p.vol * self.harmonyVolume[sc], -1) )

View File

@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
This module handles voice name translations. This module handles voice name translations.
@ -32,114 +32,116 @@ from MMA.common import *
""" Translation table for VOICE. This is ONLY used when a voice is set """ Translation table for VOICE. This is ONLY used when a voice is set
from the VOICE command. If a translation exists the translation is from the VOICE command. If a translation exists the translation is
substituted. """ substituted.
"""
class Vtable: class Vtable:
def __init__(self): def __init__(self):
self.table = {} self.table = {}
def retlist(self): def retlist(self):
l=[] l=[]
for n in sorted(self.table.keys()): for n in sorted(self.table.keys()):
l.append("%s=%s" % (n.title(), self.table[n])) l.append("%s=%s" % (n.title(), self.table[n]))
return ' '.join(l) return ' '.join(l)
def set(self, ln): def set(self, ln):
""" Set a name/alias for voice translation, called from parser. """ """ Set a name/alias for voice translation, called from parser. """
if not ln: if not ln:
self.table = {} self.table = {}
if gbl.debug: if gbl.debug:
print "Voice Translaion table reset." print "Voice Translaion table reset."
return return
for l in ln: for l in ln:
l=l.upper() l=l.upper()
if l.count('=') != 1: if l.count('=') != 1:
error("Each translation pair must be in the format Voice=Alias") error("Each translation pair must be in the format Voice=Alias")
v,a = l.split('=') v,a = l.split('=')
self.table[v] = a self.table[v] = a
if gbl.debug: if gbl.debug:
print "Voice Translations: ", print "Voice Translations: ",
for l in ln: for l in ln:
print l, print l,
print print
def get(self, name): def get(self, name):
""" Return a translation or original. """ """ Return a translation or original. """
name=name.upper() name=name.upper()
if self.table.has_key(name): if self.table.has_key(name):
return self.table[name] return self.table[name]
else: else:
return name return name
vtable=Vtable() # Create single class instance. vtable=Vtable() # Create single class instance.
""" This is just like the Vtable, but it is used for DRUM TONES. We use """ This is just like the Vtable, but it is used for DRUM TONES. We use
this translation when a TONE is set for a drum in setTone() and when a this translation when a TONE is set for a drum in setTone() and when a
tone is selected in a Solo/Melody DRUM track. """ tone is selected in a Solo/Melody DRUM track.
"""
class Dtable: class Dtable:
def __init__(self): def __init__(self):
self.table = {} self.table = {}
def retlist(self): def retlist(self):
l=[] l=[]
for n in sorted(self.table.keys()): for n in sorted(self.table.keys()):
l.append("%s=%s" % ( MMA.midiC.valueToDrum(n), l.append("%s=%s" % ( MMA.midiC.valueToDrum(n),
MMA.midiC.valueToDrum(self.table[n]))) MMA.midiC.valueToDrum(self.table[n])))
return ' '.join(l) return ' '.join(l)
def set(self, ln): def set(self, ln):
""" Set a name/alias for drum tone translation, called from parser. """ """ Set a name/alias for drum tone translation, called from parser. """
if not ln: if not ln:
self.table = {} self.table = {}
if gbl.debug: if gbl.debug:
print "DrumTone Translaion table reset." print "DrumTone Translaion table reset."
return return
for l in ln: for l in ln:
l=l.upper() l=l.upper()
if l.count('=') != 1: if l.count('=') != 1:
error("Each translation pair must be in the format Voice=Alias") error("Each translation pair must be in the format Voice=Alias")
v,a = l.split('=') v,a = l.split('=')
v=MMA.midiC.drumToValue(v) v=MMA.midiC.drumToValue(v)
a=MMA.midiC.drumToValue(a) a=MMA.midiC.drumToValue(a)
self.table[v] = a self.table[v] = a
if gbl.debug: if gbl.debug:
print "DrumTone Translation: %s=%s" % \ print "DrumTone Translation: %s=%s" % \
(MMA.midiC.valueToDrum(v), MMA.midiC.valueToDrum(a)) (MMA.midiC.valueToDrum(v), MMA.midiC.valueToDrum(a))
def get(self, name): def get(self, name):
""" Return a translation or original. """ """ Return a translation or original. """
v=MMA.midiC.drumToValue(name) v=MMA.midiC.drumToValue(name)
if self.table.has_key(v): if self.table.has_key(v):
return self.table[v] return self.table[v]
else: else:
return v return v
@ -147,105 +149,106 @@ dtable=Dtable()
""" Volume adjustment. Again, similar to voice/tone translations, """ Volume adjustment. Again, similar to voice/tone translations,
but this is for the volume. The table creates a percentage adjustment but this is for the volume. The table creates a percentage adjustment
for tones/voices specified. When a TRACK VOLUME is set in for tones/voices specified. When a TRACK VOLUME is set in
MMApat.setVolume() the routine checks here for an adjustment. """ MMApat.setVolume() the routine checks here for an adjustment.
"""
class VoiceVolTable: class VoiceVolTable:
def __init__(self): def __init__(self):
self.table = {} self.table = {}
def retlist(self): def retlist(self):
l=[] l=[]
for n in sorted(self.table.keys()): for n in sorted(self.table.keys()):
l.append("%s=%s" % ( MMA.midiC.valueToInst(n), self.table[n])) l.append("%s=%s" % ( MMA.midiC.valueToInst(n), self.table[n]))
return ' '.join(l) return ' '.join(l)
def set(self, ln): def set(self, ln):
""" Set a name/alias for voice volume adjustment, called from parser. """ """ Set a name/alias for voice volume adjustment, called from parser. """
if not ln: if not ln:
self.table = {} self.table = {}
if gbl.debug: if gbl.debug:
print "Voice Volume Adjustment table reset." print "Voice Volume Adjustment table reset."
return return
for l in ln: for l in ln:
l=l.upper() l=l.upper()
if l.count('=') != 1: if l.count('=') != 1:
error("Each translation pair must be in the format Voice=Ajustment") error("Each translation pair must be in the format Voice=Ajustment")
v,a = l.split('=') v,a = l.split('=')
v=MMA.midiC.instToValue(v) v=MMA.midiC.instToValue(v)
a=stoi(a) a=stoi(a)
if a<1 or a>200: if a<1 or a>200:
error("Voice volume adjustments must be in range 1 to 200, not %." % a) error("Voice volume adjustments must be in range 1 to 200, not %s" % a)
self.table[v] = a/100. self.table[v] = a/100.
if gbl.debug: if gbl.debug:
print "Voice Volume Adjustment: %s=%s" % (MMA.midiC.valueToInst(v), a) print "Voice Volume Adjustment: %s=%s" % (MMA.midiC.valueToInst(v), a)
def get(self, v, vol): def get(self, v, vol):
""" Return an adjusted value or original. """ """ Return an adjusted value or original. """
if self.table.has_key(v): if self.table.has_key(v):
vol = int(vol * self.table[v]) vol = int(vol * self.table[v])
return vol return vol
voiceVolTable=VoiceVolTable() voiceVolTable=VoiceVolTable()
class DrumVolTable: class DrumVolTable:
def __init__(self): def __init__(self):
self.table = {} self.table = {}
def retlist(self): def retlist(self):
l=[] l=[]
for n in sorted(self.table.keys()): for n in sorted(self.table.keys()):
l.append("%s=%s" % ( MMA.midiC.valueToDrum(n), self.table[n])) l.append("%s=%s" % ( MMA.midiC.valueToDrum(n), self.table[n]))
return ' '.join(l) return ' '.join(l)
def set(self, ln): def set(self, ln):
""" Set a name/alias for voice volume adjustment, called from parser. """ """ Set a name/alias for voice volume adjustment, called from parser. """
if not ln: if not ln:
self.table = {} self.table = {}
if gbl.debug: if gbl.debug:
print "Drum Volume Adjustment table reset." print "Drum Volume Adjustment table reset."
return return
for l in ln: for l in ln:
l=l.upper() l=l.upper()
if l.count('=') != 1: if l.count('=') != 1:
error("Each translation pair must be in the format Drum=Ajustment") error("Each translation pair must be in the format Drum=Ajustment")
v,a = l.split('=') v,a = l.split('=')
v=MMA.midiC.instToValue(v) v=MMA.midiC.instToValue(v)
a=stoi(a) a=stoi(a)
if a<1 or a>200: if a<1 or a>200:
error("Drum volume adjustments must be in range 1 to 200, not %." % a) error("Drum volume adjustments must be in range 1 to 200, not %s" % a)
self.table[v] = a/100. self.table[v] = a/100.
if gbl.debug: if gbl.debug:
print "Drum Volume Adjustment: %s=%s" % (MMA.midiC.valueToDrum(v), a) print "Drum Volume Adjustment: %s=%s" % (MMA.midiC.valueToDrum(v), a)
def get(self, v, vol): def get(self, v, vol):
""" Return an adjusted value or original. """ """ Return an adjusted value or original. """
if self.table.has_key(v): if self.table.has_key(v):
vol = int(vol * self.table[v]) vol = int(vol * self.table[v])
return vol return vol
drumVolTable=DrumVolTable() drumVolTable=DrumVolTable()

View File

@ -2,7 +2,7 @@
# volume.py # volume.py
""" """
This module is an integeral part of the program This module is an integeral part of the program
MMA - Musical Midi Accompaniment. MMA - Musical Midi Accompaniment.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Bob van der Poel <bvdp@xplornet.com> Bob van der Poel <bob@mellowood.ca>
""" """
from MMA.common import * from MMA.common import *
@ -28,20 +28,20 @@ from MMA.common import *
""" Volumes are specified in musical terms, but converted to """ Volumes are specified in musical terms, but converted to
midi velocities. This table has a list of percentage changes midi velocities. This table has a list of percentage changes
to apply to the current volume. Used in both track and global to apply to the current volume. Used in both track and global
situations. Note that the volume for 'ffff' is 200%--this will situations. Note that the volume for 'ffff' is 200%--this will
most likely generate velocities outside the midi range of 0..127. most likely generate velocities outside the midi range of 0..127.
But that's fine since mma will adjust volumes into the valid But that's fine since mma will adjust volumes into the valid
range. Using very high percentages will ensure that 'ffff' notes range. Using very high percentages will ensure that 'ffff' notes
are (most likely) sounded with a maximum velocity. are (most likely) sounded with a maximum velocity.
""" """
vols={ 'OFF': 0.00, 'PPPP': 0.05, 'PPP': 0.10, vols={ 'OFF': 0.00, 'PPPP': 0.05, 'PPP': 0.10,
'PP': 0.25, 'P': 0.40, 'MP': 0.70, 'PP': 0.25, 'P': 0.40, 'MP': 0.70,
'M': 1.00, 'MF': 1.10, 'F': 1.30, 'M': 1.00, 'MF': 1.10, 'F': 1.30,
'FF': 1.60, 'FFF': 1.80, 'FFFF': 2.00 } 'FF': 1.60, 'FFF': 1.80, 'FFFF': 2.00 }
volume = vols['M'] # default global volume volume = vols['M'] # default global volume
lastVolume = volume lastVolume = volume
futureVol = [] futureVol = []
vTRatio = .6 vTRatio = .6
@ -49,158 +49,160 @@ vMRatio = 1-vTRatio
def adjvolume(ln): def adjvolume(ln):
""" Adjust the ratio used in the volume table and track/global ratio. """ """ Adjust the ratio used in the volume table and track/global ratio. """
global vols, vTRatio, vMRatio global vols, vTRatio, vMRatio
if not ln:
error("Use: AdjustVolume DYN=RATIO [..].")
for l in ln: if not ln:
error("Use: AdjustVolume DYN=RATIO [..]")
try: for l in ln:
v,r = l.split('=')
except:
error("AdjustVolume expecting DYN=RATIO pair, not '%s'." % l)
v=v.upper()
if v == 'RATIO': try:
v,r = l.split('=')
except:
error("AdjustVolume expecting DYN=RATIO pair, not '%s'" % l)
r=stof(r) v=v.upper()
if r<0 or r>100: if v == 'RATIO':
error("VolumeRatio must be value 0 to 100.")
vTRatio = r/100 r=stof(r)
vMRatio = 1-vTRatio
elif v in vols: if r<0 or r>100:
vols[v] = calcVolume(r, vols[v]) error("VolumeRatio must be value 0 to 100")
else: vTRatio = r/100
error("Dynamic '%s' for AdjustVolume is unknown." % v ) vMRatio = 1-vTRatio
elif v in vols:
vols[v] = calcVolume(r, vols[v])
else:
error("Dynamic '%s' for AdjustVolume is unknown" % v )
if gbl.debug:
print "Volume Ratio: %s%% Track / %s%% Master" % ( vTRatio * 100, vMRatio * 100)
print "Volume table:",
for a in vols:
print "%s=%s" % (a, int(vols[a] * 100)),
print
if gbl.debug:
print "Volume Ratio: %s%% Track / %s%% Master" % ( vTRatio * 100, vMRatio * 100)
print "Volume table:",
for a in vols:
print "%s=%s" % (a, int(vols[a] * 100)),
print
def calcVolume(new, old): def calcVolume(new, old):
""" Calculate a new volume "new" possibly adjusting from "old". """ """ Calculate a new volume "new" possibly adjusting from "old". """
if new[0] == '-' or new[0] == '+': if new[0] == '-' or new[0] == '+':
a = stoi(new, "Volume expecting value for %% adjustment, not %s." % new) a = stoi(new, "Volume expecting value for %% adjustment, not %s" % new)
v = old + (old * a/100.) v = old + (old * a/100.)
elif new[0] in "0123456789": elif new[0] in "0123456789":
v = stoi(new, "Volume expecting value, not '%s'" % new) / 100. v = stoi(new, "Volume expecting value, not '%s'" % new) / 100.
else:
new = new.upper()
adj = None
if '+' in new:
new,adj = new.split('+')
elif '-' in new:
new,adj = new.split('-')
adj = '-' + adj
if not new in vols: else:
error("Unknown volume '%s'." % new) new = new.upper()
v=vols[new] adj = None
if adj: if '+' in new:
a = stoi(adj, "Volume expecting adjustment value, not %s." % adj) new,adj = new.split('+')
v += (v * (a/100.)) elif '-' in new:
new,adj = new.split('-')
adj = '-' + adj
return v if not new in vols:
error("Unknown volume '%s'" % new)
v=vols[new]
if adj:
a = stoi(adj, "Volume expecting adjustment value, not %s" % adj)
v += (v * (a/100.))
return v
def setVolume(ln): def setVolume(ln):
""" Set master volume. """ """ Set master volume. """
global volume, lastVolume global volume, lastVolume
lastVolume = volume
if len(ln) != 1:
error ("Use: Volume DYNAMIC.")
volume = calcVolume(ln[0], volume) lastVolume = volume
if gbl.debug: if len(ln) != 1:
print "Volume: %s%%" % volume error ("Use: Volume DYNAMIC")
volume = calcVolume(ln[0], volume)
if gbl.debug:
print "Volume: %s%%" % volume
# The next 2 are called from the parser. # The next 2 are called from the parser.
def setCresc(ln): def setCresc(ln):
setCrescendo(1, ln) setCrescendo(1, ln)
def setDecresc(ln): def setDecresc(ln):
setCrescendo(-1, ln) setCrescendo(-1, ln)
def setCrescendo(dir, ln): def setCrescendo(dir, ln):
""" Combined (de)cresc() """ """ Combined (de)cresc() """
global futureVol, volume, lastVolume
lastVolume = volume global futureVol, volume, lastVolume
if len(ln) == 3: lastVolume = volume
setVolume([ln[0]])
ln=ln[1:]
if len(ln) not in (2, 3):
futureVol = fvolume(dir, volume, ln) error("Usage: (De)Cresc [start-Dynamic] final-Dynamic bar-count")
if len(ln) == 3:
setVolume([ln[0]])
ln=ln[1:]
futureVol = fvolume(dir, volume, ln)
# Used by both the 2 funcs above and from TRACK.setCresc() # Used by both the 2 funcs above and from TRACK.setCresc()
def fvolume(dir, startvol, ln): def fvolume(dir, startvol, ln):
""" Create a list of future vols. Called by (De)Cresc. """ """ Create a list of future vols. Called by (De)Cresc. """
# Get destination volume # Get destination volume
destvol = calcVolume(ln[0], startvol)
bcount = stoi(ln[1], "Type error in bar count for (De)Cresc, '%s'." % ln[1] ) destvol = calcVolume(ln[0], startvol)
if bcount <= 0:
error("Bar count for (De)Cresc must be postive.")
if dir > 0 and destvol < startvol:
warning("Cresc volume less than current setting. " )
elif dir < 0 and destvol > startvol:
warning("Decresc volume greater than current setting. " )
elif destvol == startvol:
warning("(De)Cresc volume equal to current setting. " )
bcount -= 1 bcount = stoi(ln[1], "Type error in bar count for (De)Cresc, '%s'" % ln[1] )
step = ( destvol-startvol ) / bcount
volList=[startvol] if bcount <= 0:
error("Bar count for (De)Cresc must be postive")
for a in range(bcount-1):
startvol += step if dir > 0 and destvol < startvol:
volList.append( startvol) warning("Cresc volume less than current setting" )
volList.append(destvol) elif dir < 0 and destvol > startvol:
warning("Decresc volume greater than current setting" )
elif destvol == startvol:
warning("(De)Cresc volume equal to current setting" )
bcount -= 1
step = ( destvol-startvol ) / bcount
volList=[startvol]
for a in range(bcount-1):
startvol += step
volList.append( startvol)
volList.append(destvol)
return volList
return volList

View File

@ -15,15 +15,40 @@ def okay(msg):
# Simple python script to install mma from tarball # Simple python script to install mma from tarball
# This should be fixed to be more versatile. Volunteers? # This should be fixed to be more versatile. Volunteers?
########################################### # Before we do anything, make sure we have an up-to-date python.
####### Banner, get destination
pyMaj=2
pyMin=4
if sys.version_info[0] < pyMaj or sys.version_info[1] < pyMin:
print
print "You need a more current version of Python to run MMA and this install script."
print "We're looking for something equal or greater than version %s.%s" % \
(pyMaj,pyMin)
print "Current Python version is ", sys.version
print
sys.exit(0)
# Banner. Check to make sure user has root permissions.
print """ print """
This script will install mma, the standard library and the This script will install mma, the standard library and the
python modules. python modules.
"""
YOU WILL NEED TO BE LOGGED IN AS ROOT TO CONTINUE! try:
u=os.getuid()
except:
u=1
if u:
okay("""You do not appear to be running this script as 'root' user.
Continuing will probably cause all kinds of strange errors
and a generally unsatisfactory experience. But, we can try...
""")
print """
We recommend that you install the package with this script We recommend that you install the package with this script
in the default locations. This script will create a in the default locations. This script will create a
directory 'mma' in /usr/local/share. If this isn't directory 'mma' in /usr/local/share. If this isn't
@ -48,6 +73,7 @@ bin='/usr/local/bin/mma'
if os.path.exists(bin): if os.path.exists(bin):
okay("Existing mma executable '%s' is being overwritten." % bin) okay("Existing mma executable '%s' is being overwritten." % bin)
os.remove(bin)
print "Copying mma to", bin print "Copying mma to", bin

View File

@ -48,15 +48,17 @@ information from the each library file:
<LI> The file description from the "Doc Note" directive. <LI> The file description from the "Doc Note" directive.
<LI> Any user variables documented in "DocVar" directives.
<LI> Each groove description: This is the optional text following a <LI> Each groove description: This is the optional text following a
<em>DefGroove</em> directive. <em>DefGroove</em> directive.
<UL> <UL>
<LI> The sequence size. This is extracted from the current groove <LI> The sequence size. This is extracted from the current groove
information and was set with the <em>SeqSize</em> directive. It is information and was set with the <em>SeqSize</em> directive. It is
displayed in a small box after the groove description. displayed in a small box after the groove description.
<LI> A "summary" of the voices used in the groove. Note that a <LI> A "summary" of the voices used in the groove. Note that a
different voice or MIDI note is possible for each bar in the different voice or MIDI note is possible for each bar in the
sequence size; however, this listing only lists the selection for sequence size; however, this listing only lists the selection for
the first bar. the first bar.
@ -65,86 +67,99 @@ information from the each library file:
</UL> </UL>
<P>If you find that you don't have some of the grooves listed below in your distribution <P>If you find that you don't have some of the grooves listed below in your distribution
you need to run the program mklibdoc.py to update these docs. Not all style files are you need to run the program mklibdoc.py to update these docs. Not all style files are
distributed in the default MMA distribution. distributed in the default MMA distribution.
<HR Size=3pt> <HR Size=3pt>
<CENTER> <H2> Index </H2> </CENTER> <CENTER> <H2> Index </H2> </CENTER>
<ul><li> <A Href=#stdlib> <h2> Stdlib </h2> </a> </li> <ul><li> <A Href=#stdlib> <h2> Stdlib </h2> </a> </li>
<li> <A Href=#kara> <h2> Kara </h2> </a> </li></ul><HR Size=3pt><P><h3>These grooves can be used from a program just by using their name.</h3> <li> <A Href=#kara> <h2> Kara </h2> </a> </li>
<li> <A Href=#yamaha> <h2> Yamaha </h2> </a> </li></ul><HR Size=3pt><P><h3>These grooves can be used from a program just by using their name.</h3>
<A Name =stdlib></a> <A Name =stdlib></a>
<h2> Stdlib </h2> <h2> Stdlib </h2>
<ul> <ul>
<li> <A Href = stdlib/folk.html> stdlib/folk.mma </a> </li> <li> <A Href = stdlib/50srock.html> stdlib/50srock.mma </a> </li>
<li> <A Href = stdlib/rhumba.html> stdlib/rhumba.mma </a> </li> <li> <A Href = stdlib/60srock.html> stdlib/60srock.mma </a> </li>
<li> <A Href = stdlib/tango.html> stdlib/tango.mma </a> </li>
<li> <A Href = stdlib/waltz.html> stdlib/waltz.mma </a> </li>
<li> <A Href = stdlib/8beat.html> stdlib/8beat.mma </a> </li> <li> <A Href = stdlib/8beat.html> stdlib/8beat.mma </a> </li>
<li> <A Href = stdlib/blues.html> stdlib/blues.mma </a> </li> <li> <A Href = stdlib/ballad.html> stdlib/ballad.mma </a> </li>
<li> <A Href = stdlib/foxtrot.html> stdlib/foxtrot.mma </a> </li> <li> <A Href = stdlib/ballad128.html> stdlib/ballad128.mma </a> </li>
<li> <A Href = stdlib/jazz-54.html> stdlib/jazz-54.mma </a> </li> <li> <A Href = stdlib/basicrock.html> stdlib/basicrock.mma </a> </li>
<li> <A Href = stdlib/swing.html> stdlib/swing.mma </a> </li>
<li> <A Href = stdlib/march.html> stdlib/march.mma </a> </li>
<li> <A Href = stdlib/beguine.html> stdlib/beguine.mma </a> </li> <li> <A Href = stdlib/beguine.html> stdlib/beguine.mma </a> </li>
<li> <A Href = stdlib/dixie.html> stdlib/dixie.mma </a> </li>
<li> <A Href = stdlib/calypso.html> stdlib/calypso.mma </a> </li>
<li> <A Href = stdlib/bigband.html> stdlib/bigband.mma </a> </li> <li> <A Href = stdlib/bigband.html> stdlib/bigband.mma </a> </li>
<li> <A Href = stdlib/jazzwaltz.html> stdlib/jazzwaltz.mma </a> </li>
<li> <A Href = stdlib/softrock.html> stdlib/softrock.mma </a> </li>
<li> <A Href = stdlib/countryswing.html> stdlib/countryswing.mma </a> </li>
<li> <A Href = stdlib/bluegrass.html> stdlib/bluegrass.mma </a> </li> <li> <A Href = stdlib/bluegrass.html> stdlib/bluegrass.mma </a> </li>
<li> <A Href = stdlib/polka.html> stdlib/polka.mma </a> </li> <li> <A Href = stdlib/blues.html> stdlib/blues.mma </a> </li>
<li> <A Href = stdlib/boggiewoggie.html> stdlib/boggiewoggie.mma </a> </li>
<li> <A Href = stdlib/bolero.html> stdlib/bolero.mma </a> </li>
<li> <A Href = stdlib/bossanova.html> stdlib/bossanova.mma </a> </li> <li> <A Href = stdlib/bossanova.html> stdlib/bossanova.mma </a> </li>
<li> <A Href = stdlib/broadway.html> stdlib/broadway.mma </a> </li>
<li> <A Href = stdlib/calypso.html> stdlib/calypso.mma </a> </li>
<li> <A Href = stdlib/chacha.html> stdlib/chacha.mma </a> </li>
<li> <A Href = stdlib/countryblues.html> stdlib/countryblues.mma </a> </li>
<li> <A Href = stdlib/countryswing.html> stdlib/countryswing.mma </a> </li>
<li> <A Href = stdlib/countrywaltz.html> stdlib/countrywaltz.mma </a> </li>
<li> <A Href = stdlib/desert.html> stdlib/desert.mma </a> </li>
<li> <A Href = stdlib/dixie.html> stdlib/dixie.mma </a> </li>
<li> <A Href = stdlib/dixiemarch.html> stdlib/dixiemarch.mma </a> </li>
<li> <A Href = stdlib/easyswing.html> stdlib/easyswing.mma </a> </li> <li> <A Href = stdlib/easyswing.html> stdlib/easyswing.mma </a> </li>
<li> <A Href = stdlib/fastblues.html> stdlib/fastblues.mma </a> </li> <li> <A Href = stdlib/fastblues.html> stdlib/fastblues.mma </a> </li>
<li> <A Href = stdlib/folk.html> stdlib/folk.mma </a> </li>
<li> <A Href = stdlib/foxtrot.html> stdlib/foxtrot.mma </a> </li>
<li> <A Href = stdlib/frenchwaltz.html> stdlib/frenchwaltz.mma </a> </li>
<li> <A Href = stdlib/guitarballad.html> stdlib/guitarballad.mma </a> </li>
<li> <A Href = stdlib/hillcountry.html> stdlib/hillcountry.mma </a> </li>
<li> <A Href = stdlib/jazz-54.html> stdlib/jazz-54.mma </a> </li>
<li> <A Href = stdlib/jazzguitar.html> stdlib/jazzguitar.mma </a> </li>
<li> <A Href = stdlib/jazzwaltz.html> stdlib/jazzwaltz.mma </a> </li>
<li> <A Href = stdlib/jive.html> stdlib/jive.mma </a> </li>
<li> <A Href = stdlib/lfusion.html> stdlib/lfusion.mma </a> </li>
<li> <A Href = stdlib/lighttango.html> stdlib/lighttango.mma </a> </li>
<li> <A Href = stdlib/lullaby.html> stdlib/lullaby.mma </a> </li>
<li> <A Href = stdlib/mambo.html> stdlib/mambo.mma </a> </li>
<li> <A Href = stdlib/march.html> stdlib/march.mma </a> </li>
<li> <A Href = stdlib/merengue.html> stdlib/merengue.mma </a> </li>
<li> <A Href = stdlib/metronome.html> stdlib/metronome.mma </a> </li> <li> <A Href = stdlib/metronome.html> stdlib/metronome.mma </a> </li>
<li> <A Href = stdlib/rockballad.html> stdlib/rockballad.mma </a> </li> <li> <A Href = stdlib/metronome3.html> stdlib/metronome3.mma </a> </li>
<li> <A Href = stdlib/ballad.html> stdlib/ballad.mma </a> </li> <li> <A Href = stdlib/modernjazz.html> stdlib/modernjazz.mma </a> </li>
<li> <A Href = stdlib/pianoballad.html> stdlib/pianoballad.mma </a> </li>
<li> <A Href = stdlib/polka.html> stdlib/polka.mma </a> </li>
<li> <A Href = stdlib/popballad.html> stdlib/popballad.mma </a> </li> <li> <A Href = stdlib/popballad.html> stdlib/popballad.mma </a> </li>
<li> <A Href = stdlib/quickstep.html> stdlib/quickstep.mma </a> </li>
<li> <A Href = stdlib/rb.html> stdlib/rb.mma </a> </li>
<li> <A Href = stdlib/rhumba.html> stdlib/rhumba.mma </a> </li>
<li> <A Href = stdlib/rock-128.html> stdlib/rock-128.mma </a> </li>
<li> <A Href = stdlib/rockballad.html> stdlib/rockballad.mma </a> </li>
<li> <A Href = stdlib/samba.html> stdlib/samba.mma </a> </li>
<li> <A Href = stdlib/shuffleboggie.html> stdlib/shuffleboggie.mma </a> </li>
<li> <A Href = stdlib/ska.html> stdlib/ska.mma </a> </li> <li> <A Href = stdlib/ska.html> stdlib/ska.mma </a> </li>
<li> <A Href = stdlib/slowblues.html> stdlib/slowblues.mma </a> </li> <li> <A Href = stdlib/slowblues.html> stdlib/slowblues.mma </a> </li>
<li> <A Href = stdlib/countrywaltz.html> stdlib/countrywaltz.mma </a> </li>
<li> <A Href = stdlib/frenchwaltz.html> stdlib/frenchwaltz.mma </a> </li>
<li> <A Href = stdlib/vienesewaltz.html> stdlib/vienesewaltz.mma </a> </li>
<li> <A Href = stdlib/50srock.html> stdlib/50srock.mma </a> </li>
<li> <A Href = stdlib/metronome3.html> stdlib/metronome3.mma </a> </li>
<li> <A Href = stdlib/rock-128.html> stdlib/rock-128.mma </a> </li>
<li> <A Href = stdlib/slowjazz.html> stdlib/slowjazz.mma </a> </li>
<li> <A Href = stdlib/jive.html> stdlib/jive.mma </a> </li>
<li> <A Href = stdlib/modernjazz.html> stdlib/modernjazz.mma </a> </li>
<li> <A Href = stdlib/lfusion.html> stdlib/lfusion.mma </a> </li>
<li> <A Href = stdlib/zydeco.html> stdlib/zydeco.mma </a> </li>
<li> <A Href = stdlib/60srock.html> stdlib/60srock.mma </a> </li>
<li> <A Href = stdlib/countryblues.html> stdlib/countryblues.mma </a> </li>
<li> <A Href = stdlib/rb.html> stdlib/rb.mma </a> </li>
<li> <A Href = stdlib/bolero.html> stdlib/bolero.mma </a> </li>
<li> <A Href = stdlib/basicrock.html> stdlib/basicrock.mma </a> </li>
<li> <A Href = stdlib/boggiewoggie.html> stdlib/boggiewoggie.mma </a> </li>
<li> <A Href = stdlib/lighttango.html> stdlib/lighttango.mma </a> </li>
<li> <A Href = stdlib/desert.html> stdlib/desert.mma </a> </li>
<li> <A Href = stdlib/dixiemarch.html> stdlib/dixiemarch.mma </a> </li>
<li> <A Href = stdlib/slowcountry.html> stdlib/slowcountry.mma </a> </li>
<li> <A Href = stdlib/hillcountry.html> stdlib/hillcountry.mma </a> </li>
<li> <A Href = stdlib/samba.html> stdlib/samba.mma </a> </li>
<li> <A Href = stdlib/quickstep.html> stdlib/quickstep.mma </a> </li>
<li> <A Href = stdlib/broadway.html> stdlib/broadway.mma </a> </li>
<li> <A Href = stdlib/softshoe.html> stdlib/softshoe.mma </a> </li>
<li> <A Href = stdlib/pianoballad.html> stdlib/pianoballad.mma </a> </li>
<li> <A Href = stdlib/guitarballad.html> stdlib/guitarballad.mma </a> </li>
<li> <A Href = stdlib/son.html> stdlib/son.mma </a> </li>
<li> <A Href = stdlib/mambo.html> stdlib/mambo.mma </a> </li>
<li> <A Href = stdlib/chacha.html> stdlib/chacha.mma </a> </li>
<li> <A Href = stdlib/merengue.html> stdlib/merengue.mma </a> </li>
<li> <A Href = stdlib/slowbolero.html> stdlib/slowbolero.mma </a> </li> <li> <A Href = stdlib/slowbolero.html> stdlib/slowbolero.mma </a> </li>
<li> <A Href = stdlib/slowcountry.html> stdlib/slowcountry.mma </a> </li>
<li> <A Href = stdlib/slowjazz.html> stdlib/slowjazz.mma </a> </li>
<li> <A Href = stdlib/softrock.html> stdlib/softrock.mma </a> </li>
<li> <A Href = stdlib/softshoe.html> stdlib/softshoe.mma </a> </li>
<li> <A Href = stdlib/son.html> stdlib/son.mma </a> </li>
<li> <A Href = stdlib/swing.html> stdlib/swing.mma </a> </li>
<li> <A Href = stdlib/tango.html> stdlib/tango.mma </a> </li>
<li> <A Href = stdlib/vienesewaltz.html> stdlib/vienesewaltz.mma </a> </li>
<li> <A Href = stdlib/waltz.html> stdlib/waltz.mma </a> </li>
<li> <A Href = stdlib/zydeco.html> stdlib/zydeco.mma </a> </li>
</ul> </ul>
<P><h3>Use the following grooves with a "use" directive.</h3> <P><h3>Use the following grooves with a "use" directive.</h3>
<A Name =kara></a> <A Name =kara></a>
<h2> Kara </h2> <h2> Kara </h2>
<ul> <ul>
<li> <A Href = kara/K50s_rock.html> kara/K50s_rock.mma </a> </li> <li> <A Href = kara/K50s_rock.html> kara/K50s_rock.mma </a> </li>
<li> <A Href = kara/twi.html> kara/twi.mma </a> </li>
<li> <A Href = kara/Kfunk1.html> kara/Kfunk1.mma </a> </li> <li> <A Href = kara/Kfunk1.html> kara/Kfunk1.mma </a> </li>
<li> <A Href = kara/twi.html> kara/twi.mma </a> </li>
</ul>
<A Name =yamaha></a>
<h2> Yamaha </h2>
<ul>
<li> <A Href = yamaha/mambo.html> yamaha/mambo.mma </a> </li>
<li> <A Href = yamaha/quando-g.s280.html> yamaha/quando-g.s280.mma </a> </li>
<li> <A Href = yamaha/w-rock.html> yamaha/w-rock.mma </a> </li>
<li> <A Href = yamaha/western.html> yamaha/western.mma </a> </li>
</ul> </ul>
<BR> <BR>
<HR Size=3pt> <HR Size=3pt>
@ -153,4 +168,4 @@ information from the each library file:
<P>It is a part of the MMA distribution <P>It is a part of the MMA distribution
and is protected by the same copyrights as MMA (the GNU General Public License). and is protected by the same copyrights as MMA (the GNU General Public License).
<P> Created: Sun Oct 15 11:26:36 2006<HTML> <P> Created: Wed Mar 7 11:50:18 2007<HTML>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:45 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:15 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>K50S_Rock</H1> <H1>K50S_Rock</H1>
@ -21,7 +21,6 @@
<LI><A Href=#50sFill-In-DD>50sFill-In-DD</a> <LI><A Href=#50sFill-In-DD>50sFill-In-DD</a>
</ul> </ul>
<A Name=50sMain-A></a> <A Name=50sMain-A></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sMain-A </H2> <H2> 50sMain-A </H2>
@ -39,7 +38,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sFill-In-AA></a> <A Name=50sFill-In-AA></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sFill-In-AA </H2> <H2> 50sFill-In-AA </H2>
@ -57,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sIntro-A></a> <A Name=50sIntro-A></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sIntro-A </H2> <H2> 50sIntro-A </H2>
@ -75,7 +72,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sEnding-A></a> <A Name=50sEnding-A></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sEnding-A </H2> <H2> 50sEnding-A </H2>
@ -96,7 +92,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sMain-B></a> <A Name=50sMain-B></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sMain-B </H2> <H2> 50sMain-B </H2>
@ -114,7 +109,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sFill-In-BB></a> <A Name=50sFill-In-BB></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sFill-In-BB </H2> <H2> 50sFill-In-BB </H2>
@ -133,7 +127,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sFill-In-BA></a> <A Name=50sFill-In-BA></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sFill-In-BA </H2> <H2> 50sFill-In-BA </H2>
@ -152,7 +145,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sIntro-B></a> <A Name=50sIntro-B></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sIntro-B </H2> <H2> 50sIntro-B </H2>
@ -171,7 +163,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sEnding-B></a> <A Name=50sEnding-B></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sEnding-B </H2> <H2> 50sEnding-B </H2>
@ -193,7 +184,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sMain-C></a> <A Name=50sMain-C></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sMain-C </H2> <H2> 50sMain-C </H2>
@ -212,7 +202,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sFill-In-CC></a> <A Name=50sFill-In-CC></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sFill-In-CC </H2> <H2> 50sFill-In-CC </H2>
@ -232,7 +221,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sIntro-C></a> <A Name=50sIntro-C></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sIntro-C </H2> <H2> 50sIntro-C </H2>
@ -251,7 +239,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sEnding-C></a> <A Name=50sEnding-C></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sEnding-C </H2> <H2> 50sEnding-C </H2>
@ -273,7 +260,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sMain-D></a> <A Name=50sMain-D></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sMain-D </H2> <H2> 50sMain-D </H2>
@ -291,7 +277,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sFill-In-DD></a> <A Name=50sFill-In-DD></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sFill-In-DD </H2> <H2> 50sFill-In-DD </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:45 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:16 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Kfunk1</H1> <H1>Kfunk1</H1>
@ -14,7 +14,6 @@
<LI><A Href=#Ending-A>Ending-A</a> <LI><A Href=#Ending-A>Ending-A</a>
</ul> </ul>
<A Name=Main-A></a> <A Name=Main-A></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Main-A </H2> <H2> Main-A </H2>
@ -35,7 +34,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Fill-In-AA></a> <A Name=Fill-In-AA></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Fill-In-AA </H2> <H2> Fill-In-AA </H2>
@ -57,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Fill-In-AB></a> <A Name=Fill-In-AB></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Fill-In-AB </H2> <H2> Fill-In-AB </H2>
@ -80,7 +77,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Main-B></a> <A Name=Main-B></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Main-B </H2> <H2> Main-B </H2>
@ -104,7 +100,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Fill-In-BA></a> <A Name=Fill-In-BA></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Fill-In-BA </H2> <H2> Fill-In-BA </H2>
@ -130,7 +125,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Fill-In-BB></a> <A Name=Fill-In-BB></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Fill-In-BB </H2> <H2> Fill-In-BB </H2>
@ -155,7 +149,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Intro-A></a> <A Name=Intro-A></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Intro-A </H2> <H2> Intro-A </H2>
@ -179,7 +172,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Ending-A></a> <A Name=Ending-A></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Ending-A </H2> <H2> Ending-A </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:45 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:16 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Twi</H1> <H1>Twi</H1>
@ -14,7 +14,6 @@
<LI><A Href=#Ending-B>Ending-B</a> <LI><A Href=#Ending-B>Ending-B</a>
</ul> </ul>
<A Name=Main-A></a> <A Name=Main-A></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Main-A </H2> <H2> Main-A </H2>
@ -32,7 +31,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Fill-In-AA></a> <A Name=Fill-In-AA></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Fill-In-AA </H2> <H2> Fill-In-AA </H2>
@ -51,7 +49,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Fill-In-AB></a> <A Name=Fill-In-AB></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Fill-In-AB </H2> <H2> Fill-In-AB </H2>
@ -73,7 +70,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Main-B></a> <A Name=Main-B></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Main-B </H2> <H2> Main-B </H2>
@ -94,7 +90,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Fill-In-BA></a> <A Name=Fill-In-BA></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Fill-In-BA </H2> <H2> Fill-In-BA </H2>
@ -116,7 +111,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Fill-In-BB></a> <A Name=Fill-In-BB></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Fill-In-BB </H2> <H2> Fill-In-BB </H2>
@ -136,7 +130,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Intro-B></a> <A Name=Intro-B></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Intro-B </H2> <H2> Intro-B </H2>
@ -155,7 +148,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Ending-B></a> <A Name=Ending-B></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Ending-B </H2> <H2> Ending-B </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:37 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:03 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>50Srock</H1> <H1>50Srock</H1>
@ -12,7 +12,6 @@
<LI><A Href=#50sRockEnd>50sRockEnd</a> <LI><A Href=#50sRockEnd>50sRockEnd</a>
</ul> </ul>
<A Name=50sRock></a> <A Name=50sRock></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sRock </H2> <H2> 50sRock </H2>
@ -32,7 +31,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sRockSus></a> <A Name=50sRockSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sRockSus </H2> <H2> 50sRockSus </H2>
@ -53,7 +51,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sRock1></a> <A Name=50sRock1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sRock1 </H2> <H2> 50sRock1 </H2>
@ -73,7 +70,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sRock1Sus></a> <A Name=50sRock1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sRock1Sus </H2> <H2> 50sRock1Sus </H2>
@ -94,7 +90,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sRockIntro></a> <A Name=50sRockIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sRockIntro </H2> <H2> 50sRockIntro </H2>
@ -114,7 +109,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=50sRockEnd></a> <A Name=50sRockEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 50sRockEnd </H2> <H2> 50sRockEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:39 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:03 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>60Srock</H1> <H1>60Srock</H1>
@ -11,7 +11,6 @@
<LI><A Href=#60sRockEnd>60sRockEnd</a> <LI><A Href=#60sRockEnd>60sRockEnd</a>
</ul> </ul>
<A Name=60sRock></a> <A Name=60sRock></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 60sRock </H2> <H2> 60sRock </H2>
@ -30,7 +29,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=60sRock1></a> <A Name=60sRock1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 60sRock1 </H2> <H2> 60sRock1 </H2>
@ -48,7 +46,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=60sRockSus></a> <A Name=60sRockSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 60sRockSus </H2> <H2> 60sRockSus </H2>
@ -68,7 +65,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=60sRock1Sus></a> <A Name=60sRock1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 60sRock1Sus </H2> <H2> 60sRock1Sus </H2>
@ -87,7 +83,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=60sRockEnd></a> <A Name=60sRockEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 60sRockEnd </H2> <H2> 60sRockEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:29 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:03 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>8Beat</H1> <H1>8Beat</H1>
@ -8,10 +8,10 @@
<LI><A Href=#8BeatSus>8BeatSus</a> <LI><A Href=#8BeatSus>8BeatSus</a>
<LI><A Href=#8Beat1>8Beat1</a> <LI><A Href=#8Beat1>8Beat1</a>
<LI><A Href=#8Beat1Sus>8Beat1Sus</a> <LI><A Href=#8Beat1Sus>8Beat1Sus</a>
<LI><A Href=#8BeatIntro>8BeatIntro</a>
<LI><A Href=#8BeatEnd>8BeatEnd</a> <LI><A Href=#8BeatEnd>8BeatEnd</a>
</ul> </ul>
<A Name=8Beat></a> <A Name=8Beat></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 8Beat </H2> <H2> 8Beat </H2>
@ -30,7 +30,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=8BeatSus></a> <A Name=8BeatSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 8BeatSus </H2> <H2> 8BeatSus </H2>
@ -50,7 +49,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=8Beat1></a> <A Name=8Beat1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 8Beat1 </H2> <H2> 8Beat1 </H2>
@ -70,7 +68,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=8Beat1Sus></a> <A Name=8Beat1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 8Beat1Sus </H2> <H2> 8Beat1Sus </H2>
@ -90,8 +87,25 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=8BeatIntro></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> 8BeatIntro </H2>
Straight-ahead four bar introduction. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> FingeredBass </TD></TR>
<TR><TD> Chord </TD> <TD> Honky-TonkPiano </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> CleanGuitar </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Ohh </TD> <TD> OpenHiHat </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=8BeatEnd></a> <A Name=8BeatEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> 8BeatEnd </H2> <H2> 8BeatEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:35 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:04 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Ballad</H1> <H1>Ballad</H1>
@ -12,9 +12,9 @@
<LI><A Href=#BalladIntro1>BalladIntro1</a> <LI><A Href=#BalladIntro1>BalladIntro1</a>
<LI><A Href=#BalladIntro2>BalladIntro2</a> <LI><A Href=#BalladIntro2>BalladIntro2</a>
<LI><A Href=#BalladEnd>BalladEnd</a> <LI><A Href=#BalladEnd>BalladEnd</a>
<LI><A Href=#Ballad1End>Ballad1End</a>
</ul> </ul>
<A Name=Ballad></a> <A Name=Ballad></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Ballad </H2> <H2> Ballad </H2>
@ -40,7 +40,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BalladSus></a> <A Name=BalladSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BalladSus </H2> <H2> BalladSus </H2>
@ -67,7 +66,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Ballad1></a> <A Name=Ballad1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Ballad1 </H2> <H2> Ballad1 </H2>
@ -93,7 +91,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Ballad1Sus></a> <A Name=Ballad1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Ballad1Sus </H2> <H2> Ballad1Sus </H2>
@ -120,7 +117,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BalladIntro></a> <A Name=BalladIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BalladIntro </H2> <H2> BalladIntro </H2>
@ -142,7 +138,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BalladIntro1></a> <A Name=BalladIntro1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BalladIntro1 </H2> <H2> BalladIntro1 </H2>
@ -163,7 +158,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BalladIntro2></a> <A Name=BalladIntro2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BalladIntro2 </H2> <H2> BalladIntro2 </H2>
@ -185,7 +179,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BalladEnd></a> <A Name=BalladEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BalladEnd </H2> <H2> BalladEnd </H2>
@ -210,5 +203,30 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Ballad1End></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Ballad1End </H2>
A simpler 4 bar ending. We still have a harp, but it's doing quarter note arpeggios. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> OrchestralHarp </TD></TR>
<TR><TD> Bass </TD> <TD> FretlessBass </TD></TR>
<TR><TD> Chord </TD> <TD> Atmosphere </TD></TR>
<TR><TD> Drum-Bongo </TD> <TD> LowBongo </TD></TR>
<TR><TD> Drum-Cabasa </TD> <TD> Cabasa </TD></TR>
<TR><TD> Drum-Cym </TD> <TD> RideCymbal1 </TD></TR>
<TR><TD> Drum-Hh </TD> <TD> PedalHiHat </TD></TR>
<TR><TD> Drum-Hiconga </TD> <TD> MuteHighConga </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Loconga </TD> <TD> LowConga </TD></TR>
<TR><TD> Drum-Mutetri </TD> <TD> MuteTriangle </TD></TR>
<TR><TD> Drum-Opentri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Drum-Shake </TD> <TD> Shaker </TD></TR>
<TR><TD> Drum-Tamb </TD> <TD> Tambourine </TD></TR>
</Table>
</TD></TR>
</Table>
</Body></HTML> </Body></HTML>

View File

@ -0,0 +1,113 @@
<!-- Auto-Generated by MMA on: Wed Mar 7 11:50:04 2007 -->
<HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Ballad128</H1>
<P>A 12/8 Ballad. Written for "Memory" This is written in 4/4, so, when figuring tempo use a dotted quarter for the beat count.
<ul>
<LI><A Href=#Ballad128>Ballad128</a>
<LI><A Href=#Ballad128Plus>Ballad128Plus</a>
<LI><A Href=#Ballad128Sus>Ballad128Sus</a>
<LI><A Href=#Ballad128SusPlus>Ballad128SusPlus</a>
<LI><A Href=#Ballad128Intro>Ballad128Intro</a>
<LI><A Href=#Ballad128End>Ballad128End</a>
</ul>
<A Name=Ballad128></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Ballad128 </H2>
A very simple, relaxed 12/8 ballad pattern. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Chord </TD> <TD> OrchestralHarp </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> SideKick </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
<TR><TD> Walk </TD> <TD> AcousticBass </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=Ballad128Plus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Ballad128Plus </H2>
Adds arpeggiated . <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Piano1 </TD></TR>
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Chord </TD> <TD> OrchestralHarp </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> SideKick </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
<TR><TD> Walk </TD> <TD> AcousticBass </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=Ballad128Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Ballad128Sus </H2>
Add in sustained TremoloStrings <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Chord </TD> <TD> OrchestralHarp </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> SideKick </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
<TR><TD> Walk </TD> <TD> AcousticBass </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=Ballad128SusPlus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Ballad128SusPlus </H2>
Sustained strings and apreggiating piano. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Piano1 </TD></TR>
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Chord </TD> <TD> OrchestralHarp </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> SideKick </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
<TR><TD> Walk </TD> <TD> AcousticBass </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=Ballad128Intro></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Ballad128Intro </H2>
This 4 bar intro plays bass notes and harp arpeggios. It pretty much assumes a 7th chord on the 4th bar. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> OrchestralHarp </TD></TR>
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Bass-Intro </TD> <TD> OrchestralHarp </TD></TR>
<TR><TD> Walk </TD> <TD> AcousticBass </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=Ballad128End></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Ballad128End </H2>
A 2 bar ending. <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Chord </TD> <TD> OrchestralHarp </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> SideKick </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
</Table>
</TD></TR>
</Table>
</Body></HTML>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:40 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:04 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Basicrock</H1> <H1>Basicrock</H1>
@ -11,7 +11,6 @@
<LI><A Href=#BasicRockEnd>BasicRockEnd</a> <LI><A Href=#BasicRockEnd>BasicRockEnd</a>
</ul> </ul>
<A Name=BasicRock></a> <A Name=BasicRock></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BasicRock </H2> <H2> BasicRock </H2>
@ -31,7 +30,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BasicRockSus></a> <A Name=BasicRockSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BasicRockSus </H2> <H2> BasicRockSus </H2>
@ -52,7 +50,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BasicRock4></a> <A Name=BasicRock4></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BasicRock4 </H2> <H2> BasicRock4 </H2>
@ -71,7 +68,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BasicRock4Sus></a> <A Name=BasicRock4Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BasicRock4Sus </H2> <H2> BasicRock4Sus </H2>
@ -91,7 +87,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BasicRockEnd></a> <A Name=BasicRockEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BasicRockEnd </H2> <H2> BasicRockEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:31 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:04 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Beguine</H1> <H1>Beguine</H1>
@ -11,9 +11,9 @@
<LI><A Href=#BeguineFill>BeguineFill</a> <LI><A Href=#BeguineFill>BeguineFill</a>
<LI><A Href=#BeguineIntro>BeguineIntro</a> <LI><A Href=#BeguineIntro>BeguineIntro</a>
<LI><A Href=#BeguineEnd>BeguineEnd</a> <LI><A Href=#BeguineEnd>BeguineEnd</a>
<LI><A Href=#Beguine2End>Beguine2End</a>
</ul> </ul>
<A Name=Beguine></a> <A Name=Beguine></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Beguine </H2> <H2> Beguine </H2>
@ -35,7 +35,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BeguineSus></a> <A Name=BeguineSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BeguineSus </H2> <H2> BeguineSus </H2>
@ -58,7 +57,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Beguine1></a> <A Name=Beguine1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Beguine1 </H2> <H2> Beguine1 </H2>
@ -81,7 +79,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Beguine1Sus></a> <A Name=Beguine1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Beguine1Sus </H2> <H2> Beguine1Sus </H2>
@ -105,7 +102,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BeguineFill></a> <A Name=BeguineFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BeguineFill </H2> <H2> BeguineFill </H2>
@ -127,7 +123,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BeguineIntro></a> <A Name=BeguineIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BeguineIntro </H2> <H2> BeguineIntro </H2>
@ -149,7 +144,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BeguineEnd></a> <A Name=BeguineEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BeguineEnd </H2> <H2> BeguineEnd </H2>
@ -171,5 +165,25 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Beguine2End></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Beguine2End </H2>
A more abrupt 2 bar ending. <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> FretlessBass </TD></TR>
<TR><TD> Chord </TD> <TD> Piano2 </TD></TR>
<TR><TD> Drum </TD> <TD> Claves </TD></TR>
<TR><TD> Drum-Hconga </TD> <TD> MuteHighConga </TD></TR>
<TR><TD> Drum-Hh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Lconga </TD> <TD> LowConga </TD></TR>
<TR><TD> Drum-Maraca </TD> <TD> Maracas </TD></TR>
<TR><TD> Drum-Toms1 </TD> <TD> MidTom1 </TD></TR>
<TR><TD> Drum-Toms2 </TD> <TD> MidTom2 </TD></TR>
</Table>
</TD></TR>
</Table>
</Body></HTML> </Body></HTML>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:32 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:04 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Bigband</H1> <H1>Bigband</H1>
@ -13,6 +13,7 @@
<LI><A Href=#BigBand8>BigBand8</a> <LI><A Href=#BigBand8>BigBand8</a>
<LI><A Href=#BigBand8Sus>BigBand8Sus</a> <LI><A Href=#BigBand8Sus>BigBand8Sus</a>
<LI><A Href=#BigBandFill>BigBandFill</a> <LI><A Href=#BigBandFill>BigBandFill</a>
<LI><A Href=#BigBand1Fill>BigBand1Fill</a>
<LI><A Href=#BigBandIntro>BigBandIntro</a> <LI><A Href=#BigBandIntro>BigBandIntro</a>
<LI><A Href=#BigBandEnd>BigBandEnd</a> <LI><A Href=#BigBandEnd>BigBandEnd</a>
<LI><A Href=#BigBand1End>BigBand1End</a> <LI><A Href=#BigBand1End>BigBand1End</a>
@ -20,7 +21,6 @@
<LI><A Href=#BigBand4End>BigBand4End</a> <LI><A Href=#BigBand4End>BigBand4End</a>
</ul> </ul>
<A Name=BigBand></a> <A Name=BigBand></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBand </H2> <H2> BigBand </H2>
@ -39,7 +39,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBandSus></a> <A Name=BigBandSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBandSus </H2> <H2> BigBandSus </H2>
@ -58,7 +57,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBandPlus></a> <A Name=BigBandPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBandPlus </H2> <H2> BigBandPlus </H2>
@ -78,7 +76,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBandSusPlus></a> <A Name=BigBandSusPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBandSusPlus </H2> <H2> BigBandSusPlus </H2>
@ -98,7 +95,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBand1></a> <A Name=BigBand1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBand1 </H2> <H2> BigBand1 </H2>
@ -118,7 +114,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBand1Sus></a> <A Name=BigBand1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBand1Sus </H2> <H2> BigBand1Sus </H2>
@ -139,7 +134,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBand8></a> <A Name=BigBand8></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBand8 </H2> <H2> BigBand8 </H2>
@ -159,7 +153,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBand8Sus></a> <A Name=BigBand8Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBand8Sus </H2> <H2> BigBand8Sus </H2>
@ -180,7 +173,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBandFill></a> <A Name=BigBandFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBandFill </H2> <H2> BigBandFill </H2>
@ -196,8 +188,25 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBand1Fill></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> BigBand1Fill </H2>
Louder, 4 in the bar fill. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Chord </TD> <TD> Trombone </TD></TR>
<TR><TD> Chord-Hits1 </TD> <TD> MutedTrumpet </TD></TR>
<TR><TD> Drum-Hh </TD> <TD> OpenHiHat </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Ride </TD> <TD> RideCymbal1 </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=BigBandIntro></a> <A Name=BigBandIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBandIntro </H2> <H2> BigBandIntro </H2>
@ -216,7 +225,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBandEnd></a> <A Name=BigBandEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBandEnd </H2> <H2> BigBandEnd </H2>
@ -234,7 +242,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBand1End></a> <A Name=BigBand1End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBand1End </H2> <H2> BigBand1End </H2>
@ -253,7 +260,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBand2End></a> <A Name=BigBand2End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBand2End </H2> <H2> BigBand2End </H2>
@ -272,7 +278,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BigBand4End></a> <A Name=BigBand4End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BigBand4End </H2> <H2> BigBand4End </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:33 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:05 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Bluegrass</H1> <H1>Bluegrass</H1>
@ -12,7 +12,6 @@
<LI><A Href=#BlueGrassEnd>BlueGrassEnd</a> <LI><A Href=#BlueGrassEnd>BlueGrassEnd</a>
</ul> </ul>
<A Name=BlueGrass></a> <A Name=BlueGrass></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BlueGrass </H2> <H2> BlueGrass </H2>
@ -30,7 +29,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BlueGrassClap></a> <A Name=BlueGrassClap></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BlueGrassClap </H2> <H2> BlueGrassClap </H2>
@ -49,7 +47,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BlueGrassBottle></a> <A Name=BlueGrassBottle></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BlueGrassBottle </H2> <H2> BlueGrassBottle </H2>
@ -69,7 +66,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BlueGrassBottleClap></a> <A Name=BlueGrassBottleClap></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BlueGrassBottleClap </H2> <H2> BlueGrassBottleClap </H2>
@ -89,7 +85,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BlueGrassSus></a> <A Name=BlueGrassSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BlueGrassSus </H2> <H2> BlueGrassSus </H2>
@ -108,7 +103,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BlueGrassEnd></a> <A Name=BlueGrassEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BlueGrassEnd </H2> <H2> BlueGrassEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:30 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:05 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Blues</H1> <H1>Blues</H1>
@ -14,7 +14,6 @@
<LI><A Href=#BluesEnd>BluesEnd</a> <LI><A Href=#BluesEnd>BluesEnd</a>
</ul> </ul>
<A Name=Blues></a> <A Name=Blues></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Blues </H2> <H2> Blues </H2>
@ -32,7 +31,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BluesTriple></a> <A Name=BluesTriple></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BluesTriple </H2> <H2> BluesTriple </H2>
@ -50,7 +48,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BluesSus></a> <A Name=BluesSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BluesSus </H2> <H2> BluesSus </H2>
@ -69,7 +66,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BluesTripleSus></a> <A Name=BluesTripleSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BluesTripleSus </H2> <H2> BluesTripleSus </H2>
@ -88,7 +84,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Blues1></a> <A Name=Blues1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Blues1 </H2> <H2> Blues1 </H2>
@ -107,7 +102,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Blues1Sus></a> <A Name=Blues1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Blues1Sus </H2> <H2> Blues1Sus </H2>
@ -127,7 +121,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BluesIntro></a> <A Name=BluesIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BluesIntro </H2> <H2> BluesIntro </H2>
@ -145,7 +138,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BluesEnd></a> <A Name=BluesEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BluesEnd </H2> <H2> BluesEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:40 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:05 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Boggiewoggie</H1> <H1>Boggiewoggie</H1>
@ -11,7 +11,6 @@
<LI><A Href=#BoggieWoggieEnd>BoggieWoggieEnd</a> <LI><A Href=#BoggieWoggieEnd>BoggieWoggieEnd</a>
</ul> </ul>
<A Name=BoggieWoggie></a> <A Name=BoggieWoggie></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoggieWoggie </H2> <H2> BoggieWoggie </H2>
@ -25,7 +24,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoggieWoggie1></a> <A Name=BoggieWoggie1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoggieWoggie1 </H2> <H2> BoggieWoggie1 </H2>
@ -39,7 +37,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoggieWoggie2></a> <A Name=BoggieWoggie2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoggieWoggie2 </H2> <H2> BoggieWoggie2 </H2>
@ -53,7 +50,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoggieWoggie3></a> <A Name=BoggieWoggie3></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoggieWoggie3 </H2> <H2> BoggieWoggie3 </H2>
@ -67,7 +63,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoggieWoggieEnd></a> <A Name=BoggieWoggieEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoggieWoggieEnd </H2> <H2> BoggieWoggieEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:40 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:05 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Bolero</H1> <H1>Bolero</H1>
@ -18,7 +18,6 @@
<LI><A Href=#Bolero1End>Bolero1End</a> <LI><A Href=#Bolero1End>Bolero1End</a>
</ul> </ul>
<A Name=Bolero></a> <A Name=Bolero></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Bolero </H2> <H2> Bolero </H2>
@ -38,7 +37,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoleroFill></a> <A Name=BoleroFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoleroFill </H2> <H2> BoleroFill </H2>
@ -59,7 +57,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoleroSus></a> <A Name=BoleroSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoleroSus </H2> <H2> BoleroSus </H2>
@ -80,7 +77,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoleroSusFill></a> <A Name=BoleroSusFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoleroSusFill </H2> <H2> BoleroSusFill </H2>
@ -102,7 +98,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoleroIntro></a> <A Name=BoleroIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoleroIntro </H2> <H2> BoleroIntro </H2>
@ -122,7 +117,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BoleroEnd></a> <A Name=BoleroEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BoleroEnd </H2> <H2> BoleroEnd </H2>
@ -143,7 +137,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Bolero1></a> <A Name=Bolero1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Bolero1 </H2> <H2> Bolero1 </H2>
@ -161,7 +154,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Bolero1Fill></a> <A Name=Bolero1Fill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Bolero1Fill </H2> <H2> Bolero1Fill </H2>
@ -180,7 +172,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Bolero1Sus></a> <A Name=Bolero1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Bolero1Sus </H2> <H2> Bolero1Sus </H2>
@ -199,7 +190,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Bolero1SusFill></a> <A Name=Bolero1SusFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Bolero1SusFill </H2> <H2> Bolero1SusFill </H2>
@ -219,7 +209,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Bolero1Intro></a> <A Name=Bolero1Intro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Bolero1Intro </H2> <H2> Bolero1Intro </H2>
@ -237,7 +226,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Bolero1End></a> <A Name=Bolero1End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Bolero1End </H2> <H2> Bolero1End </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:33 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:05 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Bossanova</H1> <H1>Bossanova</H1>
@ -7,6 +7,8 @@
<LI><A Href=#BossaNova>BossaNova</a> <LI><A Href=#BossaNova>BossaNova</a>
<LI><A Href=#BossaNovaSus>BossaNovaSus</a> <LI><A Href=#BossaNovaSus>BossaNovaSus</a>
<LI><A Href=#BossaNova1Sus>BossaNova1Sus</a> <LI><A Href=#BossaNova1Sus>BossaNova1Sus</a>
<LI><A Href=#BossaNova2Sus>BossaNova2Sus</a>
<LI><A Href=#BossaNova3Sus>BossaNova3Sus</a>
<LI><A Href=#BossaNovaFill>BossaNovaFill</a> <LI><A Href=#BossaNovaFill>BossaNovaFill</a>
<LI><A Href=#BossaNovaIntro>BossaNovaIntro</a> <LI><A Href=#BossaNovaIntro>BossaNovaIntro</a>
<LI><A Href=#BossaNovaIntro8>BossaNovaIntro8</a> <LI><A Href=#BossaNovaIntro8>BossaNovaIntro8</a>
@ -15,7 +17,6 @@
<LI><A Href=#BossaNova2End>BossaNova2End</a> <LI><A Href=#BossaNova2End>BossaNova2End</a>
</ul> </ul>
<A Name=BossaNova></a> <A Name=BossaNova></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNova </H2> <H2> BossaNova </H2>
@ -38,7 +39,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BossaNovaSus></a> <A Name=BossaNovaSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNovaSus </H2> <H2> BossaNovaSus </H2>
@ -62,7 +62,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BossaNova1Sus></a> <A Name=BossaNova1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNova1Sus </H2> <H2> BossaNova1Sus </H2>
@ -85,8 +84,54 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BossaNova2Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> BossaNova2Sus </H2>
Basic Bossa with decending string pattern. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Bass-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Drum </TD> <TD> Cabasa </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Clave </TD> <TD> Claves </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum2 </TD></TR>
<TR><TD> Drum-Lowbongo </TD> <TD> LowBongo </TD></TR>
<TR><TD> Drum-Lowconga </TD> <TD> LowConga </TD></TR>
<TR><TD> Drum-Muteconga </TD> <TD> MuteHighConga </TD></TR>
<TR><TD> Drum-Openhiconga </TD> <TD> OpenHighConga </TD></TR>
<TR><TD> Drum-Sidekick </TD> <TD> SideKick </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=BossaNova3Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> BossaNova3Sus </H2>
A combination of BossaNova1Sus and BossaNova2Sus. Alternating bars of decending strings with full chords. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Bass-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum </TD> <TD> Cabasa </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Clave </TD> <TD> Claves </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum2 </TD></TR>
<TR><TD> Drum-Lowbongo </TD> <TD> LowBongo </TD></TR>
<TR><TD> Drum-Lowconga </TD> <TD> LowConga </TD></TR>
<TR><TD> Drum-Muteconga </TD> <TD> MuteHighConga </TD></TR>
<TR><TD> Drum-Openhiconga </TD> <TD> OpenHighConga </TD></TR>
<TR><TD> Drum-Sidekick </TD> <TD> SideKick </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=BossaNovaFill></a> <A Name=BossaNovaFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNovaFill </H2> <H2> BossaNovaFill </H2>
@ -110,7 +155,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BossaNovaIntro></a> <A Name=BossaNovaIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNovaIntro </H2> <H2> BossaNovaIntro </H2>
@ -133,7 +177,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BossaNovaIntro8></a> <A Name=BossaNovaIntro8></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNovaIntro8 </H2> <H2> BossaNovaIntro8 </H2>
@ -156,7 +199,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BossaNovaEnd></a> <A Name=BossaNovaEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNovaEnd </H2> <H2> BossaNovaEnd </H2>
@ -180,7 +222,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BossaNova1End></a> <A Name=BossaNova1End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNova1End </H2> <H2> BossaNova1End </H2>
@ -205,7 +246,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BossaNova2End></a> <A Name=BossaNova2End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BossaNova2End </H2> <H2> BossaNova2End </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:42 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:06 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Broadway</H1> <H1>Broadway</H1>
@ -12,7 +12,6 @@
<LI><A Href=#BroadWayEnd>BroadWayEnd</a> <LI><A Href=#BroadWayEnd>BroadWayEnd</a>
</ul> </ul>
<A Name=Broadway></a> <A Name=Broadway></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Broadway </H2> <H2> Broadway </H2>
@ -32,7 +31,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Broadway1></a> <A Name=Broadway1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Broadway1 </H2> <H2> Broadway1 </H2>
@ -53,7 +51,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BroadwaySus></a> <A Name=BroadwaySus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BroadwaySus </H2> <H2> BroadwaySus </H2>
@ -74,7 +71,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Broadway1Sus></a> <A Name=Broadway1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Broadway1Sus </H2> <H2> Broadway1Sus </H2>
@ -96,7 +92,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BroadwayIntro></a> <A Name=BroadwayIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BroadwayIntro </H2> <H2> BroadwayIntro </H2>
@ -116,7 +111,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=BroadWayEnd></a> <A Name=BroadWayEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> BroadWayEnd </H2> <H2> BroadWayEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:32 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:06 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Calypso</H1> <H1>Calypso</H1>
@ -11,7 +11,6 @@
<LI><A Href=#CalypsoEnd>CalypsoEnd</a> <LI><A Href=#CalypsoEnd>CalypsoEnd</a>
</ul> </ul>
<A Name=Calypso></a> <A Name=Calypso></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Calypso </H2> <H2> Calypso </H2>
@ -28,7 +27,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CalypsoSus></a> <A Name=CalypsoSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CalypsoSus </H2> <H2> CalypsoSus </H2>
@ -46,7 +44,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Calypso1></a> <A Name=Calypso1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Calypso1 </H2> <H2> Calypso1 </H2>
@ -63,7 +60,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Calypso1Sus></a> <A Name=Calypso1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Calypso1Sus </H2> <H2> Calypso1Sus </H2>
@ -81,7 +77,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CalypsoEnd></a> <A Name=CalypsoEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CalypsoEnd </H2> <H2> CalypsoEnd </H2>

View File

@ -1,18 +1,41 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:44 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:06 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Chacha</H1> <H1>Chacha</H1>
<P>A popular, albeit somewhat dated and make trite by Americanized versions, The Cha-Cha-Cha remains a popular rhythm with broad audience appeal. I've used ``Rico Vacilon'' as a demo. This file was mostly developed from the patterns in``Latin Rhythms: Mystery Unraveled'' by Victor Lopez. <P>The Cha-Cha-Cha remains a popular rhythm with broad audience appeal, despite the fact that it is somewhat dated and made trite by Americanized versions. I've used "Rico Vacilon" as a demo. This file was mostly developed from the patterns in "Latin Rhythms: Mystery Unraveled" by Victor Lopez.
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Variables </H2>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="100%">
<TR>
<TD Valign=Top> <B> ArpeggioOctave </B> </TD>
<TD Valign=Top> The Octave setting for the flute arpeggios (default=7) </TD>
</TR>
<TR>
<TD Valign=Top> <B> ArpeggioVoice </B> </TD>
<TD Valign=Top> Voice for the ChaCha1 Arpeggios (default=Flute) </TD>
</TR>
<TR>
<TD Valign=Top> <B> ScaleVoice </B> </TD>
<TD Valign=Top> Voice for the accending scale in ChaCha1Fill (default=Flute) </TD>
</TR>
</Table>
</TD></TR>
</Table>
<ul> <ul>
<LI><A Href=#ChaCha>ChaCha</a> <LI><A Href=#ChaCha>ChaCha</a>
<LI><A Href=#ChaCha1>ChaCha1</a> <LI><A Href=#ChaCha1>ChaCha1</a>
<LI><A Href=#ChaChaSus>ChaChaSus</a> <LI><A Href=#ChaChaSus>ChaChaSus</a>
<LI><A Href=#ChaCha1Sus>ChaCha1Sus</a> <LI><A Href=#ChaCha1Sus>ChaCha1Sus</a>
<LI><A Href=#ChaChaFill>ChaChaFill</a>
<LI><A Href=#ChaCha1Fill>ChaCha1Fill</a>
<LI><A Href=#ChaChaIntro>ChaChaIntro</a> <LI><A Href=#ChaChaIntro>ChaChaIntro</a>
<LI><A Href=#ChaChaEnd>ChaChaEnd</a> <LI><A Href=#ChaChaEnd>ChaChaEnd</a>
</ul> </ul>
<A Name=ChaCha></a> <A Name=ChaCha></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ChaCha </H2> <H2> ChaCha </H2>
@ -35,7 +58,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ChaCha1></a> <A Name=ChaCha1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ChaCha1 </H2> <H2> ChaCha1 </H2>
@ -59,7 +81,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ChaChaSus></a> <A Name=ChaChaSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ChaChaSus </H2> <H2> ChaChaSus </H2>
@ -83,7 +104,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ChaCha1Sus></a> <A Name=ChaCha1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ChaCha1Sus </H2> <H2> ChaCha1Sus </H2>
@ -107,8 +127,52 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ChaChaFill></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> ChaChaFill </H2>
A one bar fill. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> Piano1 </TD></TR>
<TR><TD> Drum-Clave </TD> <TD> Claves </TD></TR>
<TR><TD> Drum-Hconga </TD> <TD> MuteHighConga </TD></TR>
<TR><TD> Drum-Hh </TD> <TD> RideCymbal1 </TD></TR>
<TR><TD> Drum-Htom </TD> <TD> HighTom2 </TD></TR>
<TR><TD> Drum-Lconga </TD> <TD> LowConga </TD></TR>
<TR><TD> Drum-Lguiro </TD> <TD> LongGuiro </TD></TR>
<TR><TD> Drum-Mtom </TD> <TD> MidTom2 </TD></TR>
<TR><TD> Drum-Sguiro </TD> <TD> ShortGuiro </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=ChaCha1Fill></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> ChaCha1Fill </H2>
Fill with accending flute run. Makes a good section introduction. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> Piano1 </TD></TR>
<TR><TD> Drum-Clave </TD> <TD> Claves </TD></TR>
<TR><TD> Drum-Hconga </TD> <TD> MuteHighConga </TD></TR>
<TR><TD> Drum-Hh </TD> <TD> RideCymbal1 </TD></TR>
<TR><TD> Drum-Htom </TD> <TD> HighTom2 </TD></TR>
<TR><TD> Drum-Lconga </TD> <TD> LowConga </TD></TR>
<TR><TD> Drum-Lguiro </TD> <TD> LongGuiro </TD></TR>
<TR><TD> Drum-Mtom </TD> <TD> MidTom2 </TD></TR>
<TR><TD> Drum-Sguiro </TD> <TD> ShortGuiro </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
<TR><TD> Scale </TD> <TD> Flute </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=ChaChaIntro></a> <A Name=ChaChaIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ChaChaIntro </H2> <H2> ChaChaIntro </H2>
@ -131,7 +195,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ChaChaEnd></a> <A Name=ChaChaEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ChaChaEnd </H2> <H2> ChaChaEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:39 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:06 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Countryblues</H1> <H1>Countryblues</H1>
@ -19,7 +19,6 @@
<LI><A Href=#CountryBluesEnd>CountryBluesEnd</a> <LI><A Href=#CountryBluesEnd>CountryBluesEnd</a>
</ul> </ul>
<A Name=CountryBlues></a> <A Name=CountryBlues></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBlues </H2> <H2> CountryBlues </H2>
@ -38,7 +37,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBluesSus></a> <A Name=CountryBluesSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBluesSus </H2> <H2> CountryBluesSus </H2>
@ -58,7 +56,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBluesWalk></a> <A Name=CountryBluesWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBluesWalk </H2> <H2> CountryBluesWalk </H2>
@ -76,7 +73,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBluesWalkSus></a> <A Name=CountryBluesWalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBluesWalkSus </H2> <H2> CountryBluesWalkSus </H2>
@ -95,7 +91,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBlues1></a> <A Name=CountryBlues1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBlues1 </H2> <H2> CountryBlues1 </H2>
@ -114,7 +109,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBlues1Sus></a> <A Name=CountryBlues1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBlues1Sus </H2> <H2> CountryBlues1Sus </H2>
@ -134,7 +128,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBlues1Walk></a> <A Name=CountryBlues1Walk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBlues1Walk </H2> <H2> CountryBlues1Walk </H2>
@ -152,7 +145,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBlues1WalkSus></a> <A Name=CountryBlues1WalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBlues1WalkSus </H2> <H2> CountryBlues1WalkSus </H2>
@ -171,7 +163,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBluesFill></a> <A Name=CountryBluesFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBluesFill </H2> <H2> CountryBluesFill </H2>
@ -191,7 +182,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBluesWalkFill></a> <A Name=CountryBluesWalkFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBluesWalkFill </H2> <H2> CountryBluesWalkFill </H2>
@ -210,7 +200,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBlues1Fill></a> <A Name=CountryBlues1Fill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBlues1Fill </H2> <H2> CountryBlues1Fill </H2>
@ -230,7 +219,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBlues1WalkFill></a> <A Name=CountryBlues1WalkFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBlues1WalkFill </H2> <H2> CountryBlues1WalkFill </H2>
@ -249,7 +237,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryBluesEnd></a> <A Name=CountryBluesEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryBluesEnd </H2> <H2> CountryBluesEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:33 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:06 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Countryswing</H1> <H1>Countryswing</H1>
@ -14,7 +14,6 @@
<LI><A Href=#CountrySwingEnd>CountrySwingEnd</a> <LI><A Href=#CountrySwingEnd>CountrySwingEnd</a>
</ul> </ul>
<A Name=CountrySwing></a> <A Name=CountrySwing></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountrySwing </H2> <H2> CountrySwing </H2>
@ -31,7 +30,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountrySwingSus></a> <A Name=CountrySwingSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountrySwingSus </H2> <H2> CountrySwingSus </H2>
@ -49,7 +47,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountrySwing1></a> <A Name=CountrySwing1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountrySwing1 </H2> <H2> CountrySwing1 </H2>
@ -67,7 +64,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountrySwing1Sus></a> <A Name=CountrySwing1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountrySwing1Sus </H2> <H2> CountrySwing1Sus </H2>
@ -86,7 +82,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountrySwing2></a> <A Name=CountrySwing2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountrySwing2 </H2> <H2> CountrySwing2 </H2>
@ -104,7 +99,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountrySwing2Sus></a> <A Name=CountrySwing2Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountrySwing2Sus </H2> <H2> CountrySwing2Sus </H2>
@ -123,7 +117,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountrySwingIntro></a> <A Name=CountrySwingIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountrySwingIntro </H2> <H2> CountrySwingIntro </H2>
@ -139,7 +132,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountrySwingEnd></a> <A Name=CountrySwingEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountrySwingEnd </H2> <H2> CountrySwingEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:36 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:07 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Countrywaltz</H1> <H1>Countrywaltz</H1>
@ -19,7 +19,6 @@
<LI><A Href=#CountryWaltzEnd>CountryWaltzEnd</a> <LI><A Href=#CountryWaltzEnd>CountryWaltzEnd</a>
</ul> </ul>
<A Name=CountryWaltz></a> <A Name=CountryWaltz></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltz </H2> <H2> CountryWaltz </H2>
@ -36,7 +35,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltzSus></a> <A Name=CountryWaltzSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltzSus </H2> <H2> CountryWaltzSus </H2>
@ -54,7 +52,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltz1></a> <A Name=CountryWaltz1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltz1 </H2> <H2> CountryWaltz1 </H2>
@ -72,7 +69,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltz1Sus></a> <A Name=CountryWaltz1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltz1Sus </H2> <H2> CountryWaltz1Sus </H2>
@ -91,7 +87,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltz2></a> <A Name=CountryWaltz2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltz2 </H2> <H2> CountryWaltz2 </H2>
@ -109,7 +104,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltz2Sus></a> <A Name=CountryWaltz2Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltz2Sus </H2> <H2> CountryWaltz2Sus </H2>
@ -128,7 +122,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltzWalk></a> <A Name=CountryWaltzWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltzWalk </H2> <H2> CountryWaltzWalk </H2>
@ -145,7 +138,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltzWalkSus></a> <A Name=CountryWaltzWalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltzWalkSus </H2> <H2> CountryWaltzWalkSus </H2>
@ -163,7 +155,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltz1Walk></a> <A Name=CountryWaltz1Walk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltz1Walk </H2> <H2> CountryWaltz1Walk </H2>
@ -181,7 +172,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Countrywaltz2Walk></a> <A Name=Countrywaltz2Walk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Countrywaltz2Walk </H2> <H2> Countrywaltz2Walk </H2>
@ -199,7 +189,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltz1SusWalk></a> <A Name=CountryWaltz1SusWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltz1SusWalk </H2> <H2> CountryWaltz1SusWalk </H2>
@ -218,7 +207,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltz2SusWalk></a> <A Name=CountryWaltz2SusWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltz2SusWalk </H2> <H2> CountryWaltz2SusWalk </H2>
@ -237,7 +225,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=CountryWaltzEnd></a> <A Name=CountryWaltzEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> CountryWaltzEnd </H2> <H2> CountryWaltzEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:41 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:07 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Desert</H1> <H1>Desert</H1>
@ -10,7 +10,6 @@
<LI><A Href=#DesertEnd>DesertEnd</a> <LI><A Href=#DesertEnd>DesertEnd</a>
</ul> </ul>
<A Name=Desert></a> <A Name=Desert></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Desert </H2> <H2> Desert </H2>
@ -28,7 +27,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DesertSus></a> <A Name=DesertSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DesertSus </H2> <H2> DesertSus </H2>
@ -47,7 +45,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DesertFill></a> <A Name=DesertFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DesertFill </H2> <H2> DesertFill </H2>
@ -66,7 +63,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DesertEnd></a> <A Name=DesertEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DesertEnd </H2> <H2> DesertEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:31 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:07 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Dixie</H1> <H1>Dixie</H1>
@ -12,7 +12,6 @@
<LI><A Href=#DixieEnd>DixieEnd</a> <LI><A Href=#DixieEnd>DixieEnd</a>
</ul> </ul>
<A Name=Dixie></a> <A Name=Dixie></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Dixie </H2> <H2> Dixie </H2>
@ -31,7 +30,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Dixie1></a> <A Name=Dixie1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Dixie1 </H2> <H2> Dixie1 </H2>
@ -50,7 +48,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Dixie2></a> <A Name=Dixie2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Dixie2 </H2> <H2> Dixie2 </H2>
@ -70,7 +67,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Dixie3></a> <A Name=Dixie3></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Dixie3 </H2> <H2> Dixie3 </H2>
@ -90,7 +86,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DixieStrum></a> <A Name=DixieStrum></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DixieStrum </H2> <H2> DixieStrum </H2>
@ -109,7 +104,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DixieEnd></a> <A Name=DixieEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DixieEnd </H2> <H2> DixieEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:41 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:07 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Dixiemarch</H1> <H1>Dixiemarch</H1>
@ -12,7 +12,6 @@
<LI><A Href=#DixieMarchEnd>DixieMarchEnd</a> <LI><A Href=#DixieMarchEnd>DixieMarchEnd</a>
</ul> </ul>
<A Name=DixieMarch></a> <A Name=DixieMarch></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DixieMarch </H2> <H2> DixieMarch </H2>
@ -29,7 +28,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DixieMarchPlus></a> <A Name=DixieMarchPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DixieMarchPlus </H2> <H2> DixieMarchPlus </H2>
@ -47,7 +45,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DixieMarchSus></a> <A Name=DixieMarchSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DixieMarchSus </H2> <H2> DixieMarchSus </H2>
@ -65,7 +62,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DixieMarchSusPlus></a> <A Name=DixieMarchSusPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DixieMarchSusPlus </H2> <H2> DixieMarchSusPlus </H2>
@ -84,7 +80,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DixieMarchIntro></a> <A Name=DixieMarchIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DixieMarchIntro </H2> <H2> DixieMarchIntro </H2>
@ -101,7 +96,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=DixieMarchEnd></a> <A Name=DixieMarchEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> DixieMarchEnd </H2> <H2> DixieMarchEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:34 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:07 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Easyswing</H1> <H1>Easyswing</H1>
@ -29,7 +29,6 @@
<LI><A Href=#EasySwingEnd>EasySwingEnd</a> <LI><A Href=#EasySwingEnd>EasySwingEnd</a>
</ul> </ul>
<A Name=EasySwing></a> <A Name=EasySwing></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing </H2> <H2> EasySwing </H2>
@ -46,7 +45,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingSus></a> <A Name=EasySwingSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingSus </H2> <H2> EasySwingSus </H2>
@ -64,7 +62,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingFill></a> <A Name=EasySwingFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingFill </H2> <H2> EasySwingFill </H2>
@ -82,7 +79,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingWalk></a> <A Name=EasySwingWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingWalk </H2> <H2> EasySwingWalk </H2>
@ -98,7 +94,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingWalkSus></a> <A Name=EasySwingWalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingWalkSus </H2> <H2> EasySwingWalkSus </H2>
@ -115,7 +110,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingWalkFill></a> <A Name=EasySwingWalkFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingWalkFill </H2> <H2> EasySwingWalkFill </H2>
@ -133,7 +127,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing1></a> <A Name=EasySwing1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing1 </H2> <H2> EasySwing1 </H2>
@ -150,7 +143,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing1Sus></a> <A Name=EasySwing1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing1Sus </H2> <H2> EasySwing1Sus </H2>
@ -168,7 +160,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing1Fill></a> <A Name=EasySwing1Fill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing1Fill </H2> <H2> EasySwing1Fill </H2>
@ -186,7 +177,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing2></a> <A Name=EasySwing2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing2 </H2> <H2> EasySwing2 </H2>
@ -203,7 +193,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing2Sus></a> <A Name=EasySwing2Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing2Sus </H2> <H2> EasySwing2Sus </H2>
@ -221,7 +210,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing2Fill></a> <A Name=EasySwing2Fill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing2Fill </H2> <H2> EasySwing2Fill </H2>
@ -239,7 +227,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing42></a> <A Name=EasySwing42></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing42 </H2> <H2> EasySwing42 </H2>
@ -256,7 +243,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing42Sus></a> <A Name=EasySwing42Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing42Sus </H2> <H2> EasySwing42Sus </H2>
@ -274,7 +260,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing42Fill></a> <A Name=EasySwing42Fill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing42Fill </H2> <H2> EasySwing42Fill </H2>
@ -292,7 +277,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing42Walk></a> <A Name=EasySwing42Walk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing42Walk </H2> <H2> EasySwing42Walk </H2>
@ -308,7 +292,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing42WalkSus></a> <A Name=EasySwing42WalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing42WalkSus </H2> <H2> EasySwing42WalkSus </H2>
@ -325,7 +308,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwing42WalkFill></a> <A Name=EasySwing42WalkFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwing42WalkFill </H2> <H2> EasySwing42WalkFill </H2>
@ -342,7 +324,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingIntro></a> <A Name=EasySwingIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingIntro </H2> <H2> EasySwingIntro </H2>
@ -358,7 +339,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingIntro1></a> <A Name=EasySwingIntro1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingIntro1 </H2> <H2> EasySwingIntro1 </H2>
@ -374,7 +354,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingIntro2></a> <A Name=EasySwingIntro2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingIntro2 </H2> <H2> EasySwingIntro2 </H2>
@ -390,7 +369,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingIntro3></a> <A Name=EasySwingIntro3></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingIntro3 </H2> <H2> EasySwingIntro3 </H2>
@ -407,7 +385,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=EasySwingEnd></a> <A Name=EasySwingEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> EasySwingEnd </H2> <H2> EasySwingEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:34 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:07 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Fastblues</H1> <H1>Fastblues</H1>
@ -13,7 +13,6 @@
<LI><A Href=#FastBluesEnd>FastBluesEnd</a> <LI><A Href=#FastBluesEnd>FastBluesEnd</a>
</ul> </ul>
<A Name=FastBlues></a> <A Name=FastBlues></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FastBlues </H2> <H2> FastBlues </H2>
@ -33,7 +32,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FastBluesSus></a> <A Name=FastBluesSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FastBluesSus </H2> <H2> FastBluesSus </H2>
@ -54,7 +52,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FastBluesWalk></a> <A Name=FastBluesWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FastBluesWalk </H2> <H2> FastBluesWalk </H2>
@ -74,7 +71,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FastBluesWalkSus></a> <A Name=FastBluesWalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FastBluesWalkSus </H2> <H2> FastBluesWalkSus </H2>
@ -95,7 +91,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FastBlues1></a> <A Name=FastBlues1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FastBlues1 </H2> <H2> FastBlues1 </H2>
@ -116,7 +111,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FastBlues1Sus></a> <A Name=FastBlues1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FastBlues1Sus </H2> <H2> FastBlues1Sus </H2>
@ -138,7 +132,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FastBluesEnd></a> <A Name=FastBluesEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FastBluesEnd </H2> <H2> FastBluesEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:28 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:08 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Folk</H1> <H1>Folk</H1>
@ -11,7 +11,6 @@
<LI><A Href=#FolkEnd>FolkEnd</a> <LI><A Href=#FolkEnd>FolkEnd</a>
</ul> </ul>
<A Name=Folk></a> <A Name=Folk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Folk </H2> <H2> Folk </H2>
@ -26,7 +25,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FolkWalk></a> <A Name=FolkWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FolkWalk </H2> <H2> FolkWalk </H2>
@ -41,7 +39,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FolkArticulated></a> <A Name=FolkArticulated></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FolkArticulated </H2> <H2> FolkArticulated </H2>
@ -58,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FolkIntro></a> <A Name=FolkIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FolkIntro </H2> <H2> FolkIntro </H2>
@ -73,7 +69,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FolkEnd></a> <A Name=FolkEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FolkEnd </H2> <H2> FolkEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:30 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:08 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Foxtrot</H1> <H1>Foxtrot</H1>
@ -16,7 +16,6 @@
<LI><A Href=#FoxTrot1End>FoxTrot1End</a> <LI><A Href=#FoxTrot1End>FoxTrot1End</a>
</ul> </ul>
<A Name=Foxtrot></a> <A Name=Foxtrot></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Foxtrot </H2> <H2> Foxtrot </H2>
@ -36,7 +35,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FoxtrotSus></a> <A Name=FoxtrotSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FoxtrotSus </H2> <H2> FoxtrotSus </H2>
@ -57,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FoxTrotPlus></a> <A Name=FoxTrotPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FoxTrotPlus </H2> <H2> FoxTrotPlus </H2>
@ -78,7 +75,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FoxTrotSusPlus></a> <A Name=FoxTrotSusPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FoxTrotSusPlus </H2> <H2> FoxTrotSusPlus </H2>
@ -100,7 +96,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Foxtrot1></a> <A Name=Foxtrot1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Foxtrot1 </H2> <H2> Foxtrot1 </H2>
@ -122,7 +117,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FoxTrot1Sus></a> <A Name=FoxTrot1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FoxTrot1Sus </H2> <H2> FoxTrot1Sus </H2>
@ -145,7 +139,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FoxTrotIntro></a> <A Name=FoxTrotIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FoxTrotIntro </H2> <H2> FoxTrotIntro </H2>
@ -165,7 +158,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FoxtrotFill></a> <A Name=FoxtrotFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FoxtrotFill </H2> <H2> FoxtrotFill </H2>
@ -185,7 +177,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FoxTrotEnd></a> <A Name=FoxTrotEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FoxTrotEnd </H2> <H2> FoxTrotEnd </H2>
@ -203,7 +194,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FoxTrot1End></a> <A Name=FoxTrot1End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FoxTrot1End </H2> <H2> FoxTrot1End </H2>

View File

@ -1,35 +1,70 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:36 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:08 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Frenchwaltz</H1> <H1>Frenchwaltz</H1>
<P>These try to do the "French Cafe" sound. <P>These try to do the "French Cafe" sound. The song "Pigalle" works quite well with this. Note the setting of the BassRegister variable which tries to emulate the "switches" on a real accordion. In this case we have an accordion with three reed banks labeled "L", "M" and "H"--this will make large changes to the accordion um-pa-pa stuff
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Variables </H2>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="100%">
<TR>
<TD Valign=Top> <B> BassRegister </B> </TD>
<TD Valign=Top> Sets the bass register, 1=L 2=LM 3=LH 4=LMH 5=M 6=MH 7=H (Default=4). </TD>
</TR>
<TR>
<TD Valign=Top> <B> CSeq </B> </TD>
<TD Valign=Top> Internal, Chord sequence list, </TD>
</TR>
<TR>
<TD Valign=Top> <B> BSeq </B> </TD>
<TD Valign=Top> Internal, Bass sequence list. </TD>
</TR>
</Table>
</TD></TR>
</Table>
<ul> <ul>
<LI><A Href=#FrenchWaltz>FrenchWaltz</a> <LI><A Href=#FrenchWaltz>FrenchWaltz</a>
<LI><A Href=#FrenchWaltzSus>FrenchWaltzSus</a> <LI><A Href=#FrenchWaltzSus>FrenchWaltzSus</a>
<LI><A Href=#FrenchWaltz1>FrenchWaltz1</a> <LI><A Href=#FrenchWaltz1>FrenchWaltz1</a>
<LI><A Href=#FrenchWaltz1Fill>FrenchWaltz1Fill</a>
<LI><A Href=#FrenchWaltz1Sus>FrenchWaltz1Sus</a> <LI><A Href=#FrenchWaltz1Sus>FrenchWaltz1Sus</a>
<LI><A Href=#FrenchWaltz1FillSus>FrenchWaltz1FillSus</a>
<LI><A Href=#FrenchWaltz2>FrenchWaltz2</a>
<LI><A Href=#FrenchWaltz2Fill>FrenchWaltz2Fill</a>
<LI><A Href=#FrenchWaltz2Sus>FrenchWaltz2Sus</a>
<LI><A Href=#FrenchWaltz2FillSus>FrenchWaltz2FillSus</a>
<LI><A Href=#FrenchWaltz3>FrenchWaltz3</a>
<LI><A Href=#FrenchWaltz3Fill>FrenchWaltz3Fill</a>
<LI><A Href=#FrenchWaltz2Sus>FrenchWaltz2Sus</a>
<LI><A Href=#FrenchWaltz3FillSus>FrenchWaltz3FillSus</a>
<LI><A Href=#FrenchWaltzIntro>FrenchWaltzIntro</a>
<LI><A Href=#FrenchWaltzEnd>FrenchWaltzEnd</a> <LI><A Href=#FrenchWaltzEnd>FrenchWaltzEnd</a>
<LI><A Href=#FrenchWaltz1End>FrenchWaltz1End</a> <LI><A Href=#FrenchWaltz1End>FrenchWaltz1End</a>
</ul> </ul>
<A Name=FrenchWaltz></a> <A Name=FrenchWaltz></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FrenchWaltz </H2> <H2> FrenchWaltz </H2>
Accordion umm-paa. Ya either love it or hate it! <B>(8)</B> Accordion umm-pa-pa. Ya either love it or hate it! <B>(8)</B>
</TD></TR> </TD></TR>
<TR><TD> <TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%"> <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR> <TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR> <TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR> <TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FrenchWaltzSus></a> <A Name=FrenchWaltzSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FrenchWaltzSus </H2> <H2> FrenchWaltzSus </H2>
@ -37,9 +72,13 @@
</TD></TR> </TD></TR>
<TR><TD> <TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%"> <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR> <TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR> <TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR> <TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR> <TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
@ -47,7 +86,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FrenchWaltz1></a> <A Name=FrenchWaltz1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FrenchWaltz1 </H2> <H2> FrenchWaltz1 </H2>
@ -56,15 +94,37 @@
<TR><TD> <TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%"> <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Accordion </TD></TR> <TR><TD> Arpeggio </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR> <TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR> <TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FrenchWaltz1Fill></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz1Fill </H2>
Adds an accending run. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Scale </TD> <TD> Accordion </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz1Sus></a> <A Name=FrenchWaltz1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FrenchWaltz1Sus </H2> <H2> FrenchWaltz1Sus </H2>
@ -73,16 +133,219 @@
<TR><TD> <TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%"> <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Accordion </TD></TR> <TR><TD> Arpeggio </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR> <TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR> <TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR> <TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FrenchWaltz1FillSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz1FillSus </H2>
Arpeggios, run and sustained strings. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Scale </TD> <TD> Accordion </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz2></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz2 </H2>
A simple, little counter melody on a piano. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Piano1 </TD></TR>
<TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz2Fill></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz2Fill </H2>
Add a piano run to the counter melody. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Piano1 </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Scale </TD> <TD> Piano1 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz2Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz2Sus </H2>
Piano counter melody and sustained strings. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Piano1 </TD></TR>
<TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz2FillSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz2FillSus </H2>
Piano counter melody and run with sustained strings. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Piano1 </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Scale </TD> <TD> Piano1 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz3></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz3 </H2>
A simple, little counter melody on a viola. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Viola </TD></TR>
<TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz3Fill></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz3Fill </H2>
Add a string run to the counter melody. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Viola </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Scale </TD> <TD> Viola </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz2Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz2Sus </H2>
Viola counter melody and sustained strings. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Viola </TD></TR>
<TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltz3FillSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltz3FillSus </H2>
Viola counter melody and run with sustained strings. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Viola </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Scale </TD> <TD> Viola </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltzIntro></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> FrenchWaltzIntro </H2>
A 4 bar intro. <B>(8)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=FrenchWaltzEnd></a> <A Name=FrenchWaltzEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FrenchWaltzEnd </H2> <H2> FrenchWaltzEnd </H2>
@ -90,8 +353,12 @@
</TD></TR> </TD></TR>
<TR><TD> <TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%"> <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR> <TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR> <TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Scale </TD> <TD> Strings </TD></TR> <TR><TD> Scale </TD> <TD> Strings </TD></TR>
@ -99,7 +366,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=FrenchWaltz1End></a> <A Name=FrenchWaltz1End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> FrenchWaltz1End </H2> <H2> FrenchWaltz1End </H2>
@ -107,8 +373,12 @@
</TD></TR> </TD></TR>
<TR><TD> <TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%"> <Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord </TD> <TD> Accordion </TD></TR> <TR><TD> Bass-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Bass-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-H </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-L </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-M </TD> <TD> Accordion </TD></TR>
<TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR> <TR><TD> Drum-Tam </TD> <TD> Tambourine </TD></TR>
<TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR> <TR><TD> Drum-Tri </TD> <TD> OpenTriangle </TD></TR>
<TR><TD> Scale </TD> <TD> Accordion </TD></TR> <TR><TD> Scale </TD> <TD> Accordion </TD></TR>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:43 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:08 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Guitarballad</H1> <H1>Guitarballad</H1>
@ -12,7 +12,6 @@
<LI><A Href=#GuitarBalladEnd>GuitarBalladEnd</a> <LI><A Href=#GuitarBalladEnd>GuitarBalladEnd</a>
</ul> </ul>
<A Name=GuitarBallad></a> <A Name=GuitarBallad></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> GuitarBallad </H2> <H2> GuitarBallad </H2>
@ -30,7 +29,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=GuitarBallad1></a> <A Name=GuitarBallad1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> GuitarBallad1 </H2> <H2> GuitarBallad1 </H2>
@ -49,7 +47,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=GuitarBalladSus></a> <A Name=GuitarBalladSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> GuitarBalladSus </H2> <H2> GuitarBalladSus </H2>
@ -68,7 +65,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=GuitarBallad1Sus></a> <A Name=GuitarBallad1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> GuitarBallad1Sus </H2> <H2> GuitarBallad1Sus </H2>
@ -88,7 +84,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=GuitarBalladIntro></a> <A Name=GuitarBalladIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> GuitarBalladIntro </H2> <H2> GuitarBalladIntro </H2>
@ -106,7 +101,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=GuitarBalladEnd></a> <A Name=GuitarBalladEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> GuitarBalladEnd </H2> <H2> GuitarBalladEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:41 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:08 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Hillcountry</H1> <H1>Hillcountry</H1>
@ -13,7 +13,6 @@
<LI><A Href=#HillCountryEnd>HillCountryEnd</a> <LI><A Href=#HillCountryEnd>HillCountryEnd</a>
</ul> </ul>
<A Name=HillCountry></a> <A Name=HillCountry></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> HillCountry </H2> <H2> HillCountry </H2>
@ -29,7 +28,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=HillCountryPlus></a> <A Name=HillCountryPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> HillCountryPlus </H2> <H2> HillCountryPlus </H2>
@ -46,7 +44,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=HillCountrySus></a> <A Name=HillCountrySus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> HillCountrySus </H2> <H2> HillCountrySus </H2>
@ -63,7 +60,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=HillCountrySusPlus></a> <A Name=HillCountrySusPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> HillCountrySusPlus </H2> <H2> HillCountrySusPlus </H2>
@ -81,7 +77,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=HillCountryFill></a> <A Name=HillCountryFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> HillCountryFill </H2> <H2> HillCountryFill </H2>
@ -97,7 +92,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=HillCountryIntro></a> <A Name=HillCountryIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> HillCountryIntro </H2> <H2> HillCountryIntro </H2>
@ -113,7 +107,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=HillCountryEnd></a> <A Name=HillCountryEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> HillCountryEnd </H2> <H2> HillCountryEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:30 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:09 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Jazz-54</H1> <H1>Jazz-54</H1>
@ -9,7 +9,6 @@
<LI><A Href=#Jazz54Intro>Jazz54Intro</a> <LI><A Href=#Jazz54Intro>Jazz54Intro</a>
</ul> </ul>
<A Name=Jazz54></a> <A Name=Jazz54></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jazz54 </H2> <H2> Jazz54 </H2>
@ -26,7 +25,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Jazz54Walk></a> <A Name=Jazz54Walk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jazz54Walk </H2> <H2> Jazz54Walk </H2>
@ -43,7 +41,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Jazz54Intro></a> <A Name=Jazz54Intro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jazz54Intro </H2> <H2> Jazz54Intro </H2>

View File

@ -0,0 +1,320 @@
<!-- Auto-Generated by MMA on: Wed Mar 7 11:50:09 2007 -->
<HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Jazzguitar</H1>
<P>For jazz ballads. This has ONLY a guitar (well, expect for the sustained versions). Mostly chords, but some bass and arpeggio is included. The song "Django" is a bit of a demo.
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Variables </H2>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="100%">
<TR>
<TD Valign=Top> <B> SustainVoice </B> </TD>
<TD Valign=Top> Voice for the sustained versions (default=TremoloStrings). </TD>
</TR>
</Table>
</TD></TR>
</Table>
<ul>
<LI><A Href=#JazzGuitar>JazzGuitar</a>
<LI><A Href=#JazzGuitarWalk>JazzGuitarWalk</a>
<LI><A Href=#JazzGuitar1>JazzGuitar1</a>
<LI><A Href=#JazzGuitar1Walk>JazzGuitar1Walk</a>
<LI><A Href=#JazzGuitar2>JazzGuitar2</a>
<LI><A Href=#JazzGuitar2Walk>JazzGuitar2Walk</a>
<LI><A Href=#JazzGuitar3>JazzGuitar3</a>
<LI><A Href=#JazzGuitar3Walk>JazzGuitar3Walk</a>
<LI><A Href=#JazzGuitarSus>JazzGuitarSus</a>
<LI><A Href=#JazzGuitar1Sus>JazzGuitar1Sus</a>
<LI><A Href=#JazzGuitar2Sus>JazzGuitar2Sus</a>
<LI><A Href=#JazzGuitar3Sus>JazzGuitar3Sus</a>
<LI><A Href=#JazzGuitarWalkSus>JazzGuitarWalkSus</a>
<LI><A Href=#JazzGuitar1WalkSus>JazzGuitar1WalkSus</a>
<LI><A Href=#JazzGuitar2WalkSus>JazzGuitar2WalkSus</a>
<LI><A Href=#JazzGuitar3WalkSus>JazzGuitar3WalkSus</a>
<LI><A Href=#JazzGuitarIntro>JazzGuitarIntro</a>
<LI><A Href=#JazzGuitar1Intro>JazzGuitar1Intro</a>
<LI><A Href=#JazzGuitarEnd>JazzGuitarEnd</a>
<LI><A Href=#JazzGuitarEnd1>JazzGuitarEnd1</a>
</ul>
<A Name=JazzGuitar></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar </H2>
A very basic 4 to the bar accompaniment. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitarWalk></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitarWalk </H2>
Changes the bass pattern to walking. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar1></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar1 </H2>
Our basic pattern with arpeggios every 4th bar. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar1Walk></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar1Walk </H2>
Walking bass with arpeggios every 4th bar. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar2></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar2 </H2>
Basic pattern with more strum and syncopation. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar2Walk></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar2Walk </H2>
The strum pattern with walking bass <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar3></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar3 </H2>
Add arpeggios every 4 bars to the syncopated strumming. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar3Walk></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar3Walk </H2>
Aprpeggios and walking bass. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitarSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitarSus </H2>
Sustained strings added to basic pattern. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar1Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar1Sus </H2>
Sustained strings added to JazzGuitar1. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar2Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar2Sus </H2>
Sustained strings added to JazzGuitar2. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar3Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar3Sus </H2>
Sustained strings added to JazzGuitar3 <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitarWalkSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitarWalkSus </H2>
Sustained strings added to JazzGuitarWalk. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar1WalkSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar1WalkSus </H2>
Sustained strings added to JazzGuitarWalk1. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar2WalkSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar2WalkSus </H2>
Sustained strings added to JazzGuitarWalk2. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar3WalkSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar3WalkSus </H2>
Sustained strings added to JazzGuitarWalk3. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitarIntro></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitarIntro </H2>
A 4 bar, arpeggiating introduction. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitar1Intro></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitar1Intro </H2>
A 4 bar intro with a bass run on bar 4. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitarEnd></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitarEnd </H2>
Soft, 2 bar ending. <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=JazzGuitarEnd1></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> JazzGuitarEnd1 </H2>
Soft, 1 bar ending. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
</Body></HTML>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:32 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:09 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Jazzwaltz</H1> <H1>Jazzwaltz</H1>
@ -15,7 +15,6 @@
<LI><A Href=#JazzWaltz1End>JazzWaltz1End</a> <LI><A Href=#JazzWaltz1End>JazzWaltz1End</a>
</ul> </ul>
<A Name=JazzWaltz></a> <A Name=JazzWaltz></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltz </H2> <H2> JazzWaltz </H2>
@ -34,7 +33,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JazzWaltzSus></a> <A Name=JazzWaltzSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltzSus </H2> <H2> JazzWaltzSus </H2>
@ -54,7 +52,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JazzWaltz1></a> <A Name=JazzWaltz1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltz1 </H2> <H2> JazzWaltz1 </H2>
@ -74,7 +71,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JazzWaltz1Sus></a> <A Name=JazzWaltz1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltz1Sus </H2> <H2> JazzWaltz1Sus </H2>
@ -95,7 +91,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JazzWaltzIntro></a> <A Name=JazzWaltzIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltzIntro </H2> <H2> JazzWaltzIntro </H2>
@ -114,7 +109,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JazzWaltzIntro8></a> <A Name=JazzWaltzIntro8></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltzIntro8 </H2> <H2> JazzWaltzIntro8 </H2>
@ -133,7 +127,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JazzWaltzFill></a> <A Name=JazzWaltzFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltzFill </H2> <H2> JazzWaltzFill </H2>
@ -151,7 +144,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JazzWaltzEnd></a> <A Name=JazzWaltzEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltzEnd </H2> <H2> JazzWaltzEnd </H2>
@ -169,7 +161,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JazzWaltz1End></a> <A Name=JazzWaltz1End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JazzWaltz1End </H2> <H2> JazzWaltz1End </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:38 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:09 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Jive</H1> <H1>Jive</H1>
@ -20,7 +20,6 @@
<LI><A Href=#JiveEnd>JiveEnd</a> <LI><A Href=#JiveEnd>JiveEnd</a>
</ul> </ul>
<A Name=Jive></a> <A Name=Jive></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jive </H2> <H2> Jive </H2>
@ -38,7 +37,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JiveClap></a> <A Name=JiveClap></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JiveClap </H2> <H2> JiveClap </H2>
@ -57,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JiveSus></a> <A Name=JiveSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JiveSus </H2> <H2> JiveSus </H2>
@ -76,7 +73,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JiveClapSus></a> <A Name=JiveClapSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JiveClapSus </H2> <H2> JiveClapSus </H2>
@ -96,7 +92,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JivePlus></a> <A Name=JivePlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JivePlus </H2> <H2> JivePlus </H2>
@ -115,7 +110,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JiveSusPlus></a> <A Name=JiveSusPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JiveSusPlus </H2> <H2> JiveSusPlus </H2>
@ -135,7 +129,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Jive1></a> <A Name=Jive1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jive1 </H2> <H2> Jive1 </H2>
@ -153,7 +146,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Jive1Clap></a> <A Name=Jive1Clap></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jive1Clap </H2> <H2> Jive1Clap </H2>
@ -172,7 +164,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Jive1Sus></a> <A Name=Jive1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jive1Sus </H2> <H2> Jive1Sus </H2>
@ -191,7 +182,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Jive1ClapSus></a> <A Name=Jive1ClapSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jive1ClapSus </H2> <H2> Jive1ClapSus </H2>
@ -211,7 +201,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Jive1Plus></a> <A Name=Jive1Plus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jive1Plus </H2> <H2> Jive1Plus </H2>
@ -230,7 +219,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Jive1SusPlus></a> <A Name=Jive1SusPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Jive1SusPlus </H2> <H2> Jive1SusPlus </H2>
@ -250,7 +238,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JiveIntro></a> <A Name=JiveIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JiveIntro </H2> <H2> JiveIntro </H2>
@ -269,7 +256,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=JiveEnd></a> <A Name=JiveEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> JiveEnd </H2> <H2> JiveEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:38 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:09 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Lfusion</H1> <H1>Lfusion</H1>
@ -12,7 +12,6 @@
<LI><A Href=#Lfusion1End>Lfusion1End</a> <LI><A Href=#Lfusion1End>Lfusion1End</a>
</ul> </ul>
<A Name=LFusion></a> <A Name=LFusion></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LFusion </H2> <H2> LFusion </H2>
@ -41,7 +40,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LFusionSus></a> <A Name=LFusionSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LFusionSus </H2> <H2> LFusionSus </H2>
@ -70,7 +68,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LFusion1></a> <A Name=LFusion1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LFusion1 </H2> <H2> LFusion1 </H2>
@ -98,7 +95,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LFusion1Sus></a> <A Name=LFusion1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LFusion1Sus </H2> <H2> LFusion1Sus </H2>
@ -127,7 +123,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LFusionEnd></a> <A Name=LFusionEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LFusionEnd </H2> <H2> LFusionEnd </H2>
@ -150,7 +145,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Lfusion1End></a> <A Name=Lfusion1End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Lfusion1End </H2> <H2> Lfusion1End </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:40 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:09 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Lighttango</H1> <H1>Lighttango</H1>
@ -8,11 +8,11 @@
<LI><A Href=#LightTangoSus>LightTangoSus</a> <LI><A Href=#LightTangoSus>LightTangoSus</a>
<LI><A Href=#LightTango1>LightTango1</a> <LI><A Href=#LightTango1>LightTango1</a>
<LI><A Href=#LightTango1Sus>LightTango1Sus</a> <LI><A Href=#LightTango1Sus>LightTango1Sus</a>
<LI><A Href=#LightTangoFill>LightTangoFill</a>
<LI><A Href=#LightTangoIntro>LightTangoIntro</a> <LI><A Href=#LightTangoIntro>LightTangoIntro</a>
<LI><A Href=#LightTangoEnd>LightTangoEnd</a> <LI><A Href=#LightTangoEnd>LightTangoEnd</a>
</ul> </ul>
<A Name=LightTango></a> <A Name=LightTango></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LightTango </H2> <H2> LightTango </H2>
@ -33,7 +33,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LightTangoSus></a> <A Name=LightTangoSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LightTangoSus </H2> <H2> LightTangoSus </H2>
@ -55,7 +54,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LightTango1></a> <A Name=LightTango1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LightTango1 </H2> <H2> LightTango1 </H2>
@ -76,7 +74,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LightTango1Sus></a> <A Name=LightTango1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LightTango1Sus </H2> <H2> LightTango1Sus </H2>
@ -97,8 +94,26 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LightTangoFill></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> LightTangoFill </H2>
A one bar fill pattern. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Bass-Piano </TD> <TD> Piano1 </TD></TR>
<TR><TD> Chord-Accordion </TD> <TD> Accordion </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> NylonGuitar </TD></TR>
<TR><TD> Drum-Clave </TD> <TD> Claves </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Phh </TD> <TD> PedalHiHat </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=LightTangoIntro></a> <A Name=LightTangoIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LightTangoIntro </H2> <H2> LightTangoIntro </H2>
@ -119,7 +134,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=LightTangoEnd></a> <A Name=LightTangoEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> LightTangoEnd </H2> <H2> LightTangoEnd </H2>

View File

@ -0,0 +1,125 @@
<!-- Auto-Generated by MMA on: Wed Mar 7 11:50:10 2007 -->
<HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Lullaby</H1>
<P>Gentle, soft lullaby in 4. Written for "Good Night".
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Variables </H2>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="100%">
<TR>
<TD Valign=Top> <B> ChordVoice </B> </TD>
<TD Valign=Top> Voice used in Chord tracks (defaults to JazzGuitar). </TD>
</TR>
<TR>
<TD Valign=Top> <B> ChordOctave </B> </TD>
<TD Valign=Top> Octave for Chord track (default 4) </TD>
</TR>
</Table>
</TD></TR>
</Table>
<ul>
<LI><A Href=#Lullaby>Lullaby</a>
<LI><A Href=#Lullaby1>Lullaby1</a>
<LI><A Href=#LullabyWalk>LullabyWalk</a>
<LI><A Href=#LullabySus>LullabySus</a>
<LI><A Href=#Lullaby1Sus>Lullaby1Sus</a>
<LI><A Href=#LullabyWalkSus>LullabyWalkSus</a>
<LI><A Href=#LullabyEnd>LullabyEnd</a>
</ul>
<A Name=Lullaby></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Lullaby </H2>
Just a solo guitar in 4. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=Lullaby1></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Lullaby1 </H2>
Adds in a bit of bass. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=LullabyWalk></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> LullabyWalk </H2>
Adds an 8th note walking bass line. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=LullabySus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> LullabySus </H2>
Add some sustained strings to our guitar. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> SlowStrings </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=Lullaby1Sus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Lullaby1Sus </H2>
A bit of bass with the strings. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> SlowStrings </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=LullabyWalkSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> LullabyWalkSus </H2>
Strings and walking bass. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> SlowStrings </TD></TR>
<TR><TD> Walk </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=LullabyEnd></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> LullabyEnd </H2>
Two half notes on the guitar. <B>(1)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
</Table>
</TD></TR>
</Table>
</Body></HTML>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:44 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:10 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Mambo</H1> <H1>Mambo</H1>
@ -16,7 +16,6 @@
<LI><A Href=#MamboEnd>MamboEnd</a> <LI><A Href=#MamboEnd>MamboEnd</a>
</ul> </ul>
<A Name=Mambo></a> <A Name=Mambo></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Mambo </H2> <H2> Mambo </H2>
@ -37,7 +36,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Mambo1></a> <A Name=Mambo1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Mambo1 </H2> <H2> Mambo1 </H2>
@ -58,7 +56,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Mambo2></a> <A Name=Mambo2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Mambo2 </H2> <H2> Mambo2 </H2>
@ -80,7 +77,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Mambo3></a> <A Name=Mambo3></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Mambo3 </H2> <H2> Mambo3 </H2>
@ -102,7 +98,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=MamboSus></a> <A Name=MamboSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MamboSus </H2> <H2> MamboSus </H2>
@ -124,7 +119,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Mambo1Sus></a> <A Name=Mambo1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Mambo1Sus </H2> <H2> Mambo1Sus </H2>
@ -146,7 +140,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Mambo2Sus></a> <A Name=Mambo2Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Mambo2Sus </H2> <H2> Mambo2Sus </H2>
@ -169,7 +162,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Mambo3Sus></a> <A Name=Mambo3Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Mambo3Sus </H2> <H2> Mambo3Sus </H2>
@ -192,7 +184,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=MamboIntro></a> <A Name=MamboIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MamboIntro </H2> <H2> MamboIntro </H2>
@ -213,7 +204,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=MamboEnd></a> <A Name=MamboEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MamboEnd </H2> <H2> MamboEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:31 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:10 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>March</H1> <H1>March</H1>
@ -15,7 +15,6 @@
<LI><A Href=#MarchEnd>MarchEnd</a> <LI><A Href=#MarchEnd>MarchEnd</a>
</ul> </ul>
<A Name=MilIntro4></a> <A Name=MilIntro4></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MilIntro4 </H2> <H2> MilIntro4 </H2>
@ -29,7 +28,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=MilIntro2></a> <A Name=MilIntro2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MilIntro2 </H2> <H2> MilIntro2 </H2>
@ -43,7 +41,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=March></a> <A Name=March></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> March </H2> <H2> March </H2>
@ -61,7 +58,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=March1></a> <A Name=March1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> March1 </H2> <H2> March1 </H2>
@ -80,7 +76,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=March1Slow></a> <A Name=March1Slow></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> March1Slow </H2> <H2> March1Slow </H2>
@ -98,7 +93,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=March2></a> <A Name=March2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> March2 </H2> <H2> March2 </H2>
@ -116,7 +110,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=March3></a> <A Name=March3></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> March3 </H2> <H2> March3 </H2>
@ -136,7 +129,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=March4></a> <A Name=March4></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> March4 </H2> <H2> March4 </H2>
@ -155,7 +147,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=MarchEnd></a> <A Name=MarchEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MarchEnd </H2> <H2> MarchEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:44 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:10 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Merengue</H1> <H1>Merengue</H1>
@ -14,7 +14,6 @@
<LI><A Href=#MerengueEnd>MerengueEnd</a> <LI><A Href=#MerengueEnd>MerengueEnd</a>
</ul> </ul>
<A Name=Merengue></a> <A Name=Merengue></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Merengue </H2> <H2> Merengue </H2>
@ -34,7 +33,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Merengue1></a> <A Name=Merengue1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Merengue1 </H2> <H2> Merengue1 </H2>
@ -54,7 +52,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Merengue2></a> <A Name=Merengue2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Merengue2 </H2> <H2> Merengue2 </H2>
@ -75,7 +72,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=MerengueSus></a> <A Name=MerengueSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MerengueSus </H2> <H2> MerengueSus </H2>
@ -96,7 +92,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Merengue1Sus></a> <A Name=Merengue1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Merengue1Sus </H2> <H2> Merengue1Sus </H2>
@ -117,7 +112,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Merengue2Sus></a> <A Name=Merengue2Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Merengue2Sus </H2> <H2> Merengue2Sus </H2>
@ -139,7 +133,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=MerengueIntro></a> <A Name=MerengueIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MerengueIntro </H2> <H2> MerengueIntro </H2>
@ -159,7 +152,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=MerengueEnd></a> <A Name=MerengueEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> MerengueEnd </H2> <H2> MerengueEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:34 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:10 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Metronome</H1> <H1>Metronome</H1>
@ -9,7 +9,6 @@
<LI><A Href=#Metronome2-4>Metronome2-4</a> <LI><A Href=#Metronome2-4>Metronome2-4</a>
</ul> </ul>
<A Name=Metronome2></a> <A Name=Metronome2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Metronome2 </H2> <H2> Metronome2 </H2>
@ -23,7 +22,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Metronome4></a> <A Name=Metronome4></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Metronome4 </H2> <H2> Metronome4 </H2>
@ -37,7 +35,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Metronome2-4></a> <A Name=Metronome2-4></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Metronome2-4 </H2> <H2> Metronome2-4 </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:37 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:11 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Metronome3</H1> <H1>Metronome3</H1>
@ -7,7 +7,6 @@
<LI><A Href=#Metronome3>Metronome3</a> <LI><A Href=#Metronome3>Metronome3</a>
</ul> </ul>
<A Name=Metronome3></a> <A Name=Metronome3></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Metronome3 </H2> <H2> Metronome3 </H2>

View File

@ -1,8 +1,22 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:38 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:11 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Modernjazz</H1> <H1>Modernjazz</H1>
<P>A jazz style which has a bit of raunch and swing. Works well with Peggy Lee's "Fever". <P>A jazz style which has a bit of raunch and swing. Works well with Peggy Lee's "Fever".
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Variables </H2>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="100%">
<TR>
<TD Valign=Top> <B> ApreggioVoice </B> </TD>
<TD Valign=Top> Voice for the alternating apreggios in ModernJazz1 (Default=MutedTrumpet). Also used in Introduction and Ending. </TD>
</TR>
</Table>
</TD></TR>
</Table>
<ul> <ul>
<LI><A Href=#ModernJazz>ModernJazz</a> <LI><A Href=#ModernJazz>ModernJazz</a>
<LI><A Href=#ModernJazz1>ModernJazz1</a> <LI><A Href=#ModernJazz1>ModernJazz1</a>
@ -12,7 +26,6 @@
<LI><A Href=#ModernJazzEnd>ModernJazzEnd</a> <LI><A Href=#ModernJazzEnd>ModernJazzEnd</a>
</ul> </ul>
<A Name=ModernJazz></a> <A Name=ModernJazz></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ModernJazz </H2> <H2> ModernJazz </H2>
@ -32,7 +45,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ModernJazz1></a> <A Name=ModernJazz1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ModernJazz1 </H2> <H2> ModernJazz1 </H2>
@ -54,7 +66,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ModernJazzSus></a> <A Name=ModernJazzSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ModernJazzSus </H2> <H2> ModernJazzSus </H2>
@ -75,7 +86,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ModernJazz1Sus></a> <A Name=ModernJazz1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ModernJazz1Sus </H2> <H2> ModernJazz1Sus </H2>
@ -98,7 +108,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ModernJazzIntro></a> <A Name=ModernJazzIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ModernJazzIntro </H2> <H2> ModernJazzIntro </H2>
@ -118,7 +127,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=ModernJazzEnd></a> <A Name=ModernJazzEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> ModernJazzEnd </H2> <H2> ModernJazzEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:43 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:11 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Pianoballad</H1> <H1>Pianoballad</H1>
@ -12,7 +12,6 @@
<LI><A Href=#PianoBalladEnd>PianoBalladEnd</a> <LI><A Href=#PianoBalladEnd>PianoBalladEnd</a>
</ul> </ul>
<A Name=PianoBallad></a> <A Name=PianoBallad></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PianoBallad </H2> <H2> PianoBallad </H2>
@ -30,7 +29,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PianoBallad1></a> <A Name=PianoBallad1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PianoBallad1 </H2> <H2> PianoBallad1 </H2>
@ -49,7 +47,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PianoBalladSus></a> <A Name=PianoBalladSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PianoBalladSus </H2> <H2> PianoBalladSus </H2>
@ -68,7 +65,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PianoBallad1Sus></a> <A Name=PianoBallad1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PianoBallad1Sus </H2> <H2> PianoBallad1Sus </H2>
@ -88,7 +84,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PianoBalladIntro></a> <A Name=PianoBalladIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PianoBalladIntro </H2> <H2> PianoBalladIntro </H2>
@ -106,7 +101,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PianoBalladEnd></a> <A Name=PianoBalladEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PianoBalladEnd </H2> <H2> PianoBalladEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:33 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:11 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Polka</H1> <H1>Polka</H1>
@ -16,7 +16,6 @@
<LI><A Href=#PolkaEnd>PolkaEnd</a> <LI><A Href=#PolkaEnd>PolkaEnd</a>
</ul> </ul>
<A Name=Polka></a> <A Name=Polka></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Polka </H2> <H2> Polka </H2>
@ -36,7 +35,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PolkaSus></a> <A Name=PolkaSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PolkaSus </H2> <H2> PolkaSus </H2>
@ -57,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PolkaArp></a> <A Name=PolkaArp></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PolkaArp </H2> <H2> PolkaArp </H2>
@ -78,7 +75,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PolkaSusArp></a> <A Name=PolkaSusArp></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PolkaSusArp </H2> <H2> PolkaSusArp </H2>
@ -100,7 +96,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Polka1></a> <A Name=Polka1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Polka1 </H2> <H2> Polka1 </H2>
@ -120,7 +115,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Polka1Sus></a> <A Name=Polka1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Polka1Sus </H2> <H2> Polka1Sus </H2>
@ -141,7 +135,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Polka1Arp></a> <A Name=Polka1Arp></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Polka1Arp </H2> <H2> Polka1Arp </H2>
@ -162,7 +155,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Polka1SusArp></a> <A Name=Polka1SusArp></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Polka1SusArp </H2> <H2> Polka1SusArp </H2>
@ -184,7 +176,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PolkaIntro></a> <A Name=PolkaIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PolkaIntro </H2> <H2> PolkaIntro </H2>
@ -203,7 +194,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PolkaEnd></a> <A Name=PolkaEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PolkaEnd </H2> <H2> PolkaEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:35 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:11 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Popballad</H1> <H1>Popballad</H1>
@ -7,10 +7,11 @@
<LI><A Href=#PopBallad>PopBallad</a> <LI><A Href=#PopBallad>PopBallad</a>
<LI><A Href=#PopBallad1>PopBallad1</a> <LI><A Href=#PopBallad1>PopBallad1</a>
<LI><A Href=#PopBallad2>PopBallad2</a> <LI><A Href=#PopBallad2>PopBallad2</a>
<LI><A Href=#PopBalladSus>PopBalladSus</a>
<LI><A Href=#PopBalladIntro>PopBalladIntro</a>
<LI><A Href=#PopBalladEnd>PopBalladEnd</a> <LI><A Href=#PopBalladEnd>PopBalladEnd</a>
</ul> </ul>
<A Name=PopBallad></a> <A Name=PopBallad></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PopBallad </H2> <H2> PopBallad </H2>
@ -31,7 +32,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PopBallad1></a> <A Name=PopBallad1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PopBallad1 </H2> <H2> PopBallad1 </H2>
@ -55,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PopBallad2></a> <A Name=PopBallad2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PopBallad2 </H2> <H2> PopBallad2 </H2>
@ -74,8 +73,48 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=PopBalladSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> PopBalladSus </H2>
A slightly lighter version, with strings. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Atmosphere </TD></TR>
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Chord </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> TremoloStrings </TD></TR>
<TR><TD> Drum-Cabasa </TD> <TD> Cabasa </TD></TR>
<TR><TD> Drum-Cym </TD> <TD> CrashCymbal1 </TD></TR>
<TR><TD> Drum-Hh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Shake </TD> <TD> Shaker </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=PopBalladIntro></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> PopBalladIntro </H2>
A simple introduction. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> Atmosphere </TD></TR>
<TR><TD> Bass </TD> <TD> AcousticBass </TD></TR>
<TR><TD> Chord </TD> <TD> Piano2 </TD></TR>
<TR><TD> Drum-Cabasa </TD> <TD> Cabasa </TD></TR>
<TR><TD> Drum-Cym </TD> <TD> CrashCymbal1 </TD></TR>
<TR><TD> Drum-Hh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Shake </TD> <TD> Shaker </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=PopBalladEnd></a> <A Name=PopBalladEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> PopBalladEnd </H2> <H2> PopBalladEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:42 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:11 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Quickstep</H1> <H1>Quickstep</H1>
@ -14,7 +14,6 @@
<LI><A Href=#QuickStepEnd>QuickStepEnd</a> <LI><A Href=#QuickStepEnd>QuickStepEnd</a>
</ul> </ul>
<A Name=QuickStep></a> <A Name=QuickStep></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> QuickStep </H2> <H2> QuickStep </H2>
@ -32,7 +31,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=QuickStepHit></a> <A Name=QuickStepHit></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> QuickStepHit </H2> <H2> QuickStepHit </H2>
@ -51,7 +49,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=QuickStepSus></a> <A Name=QuickStepSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> QuickStepSus </H2> <H2> QuickStepSus </H2>
@ -70,7 +67,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=QuickStepHitSus></a> <A Name=QuickStepHitSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> QuickStepHitSus </H2> <H2> QuickStepHitSus </H2>
@ -90,7 +86,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=QuickStepDuh></a> <A Name=QuickStepDuh></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> QuickStepDuh </H2> <H2> QuickStepDuh </H2>
@ -109,7 +104,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=QuickStepDuhSus></a> <A Name=QuickStepDuhSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> QuickStepDuhSus </H2> <H2> QuickStepDuhSus </H2>
@ -129,7 +123,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=QuickStepIntro></a> <A Name=QuickStepIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> QuickStepIntro </H2> <H2> QuickStepIntro </H2>
@ -147,7 +140,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=QuickStepEnd></a> <A Name=QuickStepEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> QuickStepEnd </H2> <H2> QuickStepEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:39 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:12 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Rb</H1> <H1>Rb</H1>
@ -10,7 +10,6 @@
<LI><A Href=#R&BEnd>R&BEnd</a> <LI><A Href=#R&BEnd>R&BEnd</a>
</ul> </ul>
<A Name=R&B></a> <A Name=R&B></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> R&B </H2> <H2> R&B </H2>
@ -32,7 +31,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=R&BSus></a> <A Name=R&BSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> R&BSus </H2> <H2> R&BSus </H2>
@ -54,7 +52,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=R&BIntro></a> <A Name=R&BIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> R&BIntro </H2> <H2> R&BIntro </H2>
@ -75,7 +72,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=R&BEnd></a> <A Name=R&BEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> R&BEnd </H2> <H2> R&BEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:29 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:12 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Rhumba</H1> <H1>Rhumba</H1>
@ -23,7 +23,6 @@
<LI><A Href=#RhumbaEnd1>RhumbaEnd1</a> <LI><A Href=#RhumbaEnd1>RhumbaEnd1</a>
</ul> </ul>
<A Name=Rhumba></a> <A Name=Rhumba></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rhumba </H2> <H2> Rhumba </H2>
@ -45,7 +44,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaSus></a> <A Name=RhumbaSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaSus </H2> <H2> RhumbaSus </H2>
@ -68,7 +66,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaTriple></a> <A Name=RhumbaTriple></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaTriple </H2> <H2> RhumbaTriple </H2>
@ -89,7 +86,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaTripleSus></a> <A Name=RhumbaTripleSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaTripleSus </H2> <H2> RhumbaTripleSus </H2>
@ -111,7 +107,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaTriple12></a> <A Name=RhumbaTriple12></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaTriple12 </H2> <H2> RhumbaTriple12 </H2>
@ -132,7 +127,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaTriple12Sus></a> <A Name=RhumbaTriple12Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaTriple12Sus </H2> <H2> RhumbaTriple12Sus </H2>
@ -154,7 +148,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaTriple34></a> <A Name=RhumbaTriple34></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaTriple34 </H2> <H2> RhumbaTriple34 </H2>
@ -176,7 +169,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaTriple34Sus></a> <A Name=RhumbaTriple34Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaTriple34Sus </H2> <H2> RhumbaTriple34Sus </H2>
@ -198,7 +190,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rhumba1></a> <A Name=Rhumba1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rhumba1 </H2> <H2> Rhumba1 </H2>
@ -221,7 +212,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rhumba1Sus></a> <A Name=Rhumba1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rhumba1Sus </H2> <H2> Rhumba1Sus </H2>
@ -245,7 +235,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rhumba2></a> <A Name=Rhumba2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rhumba2 </H2> <H2> Rhumba2 </H2>
@ -268,7 +257,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rhumba2Sus></a> <A Name=Rhumba2Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rhumba2Sus </H2> <H2> Rhumba2Sus </H2>
@ -292,7 +280,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rhumba3></a> <A Name=Rhumba3></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rhumba3 </H2> <H2> Rhumba3 </H2>
@ -315,7 +302,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rhumba3Sus></a> <A Name=Rhumba3Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rhumba3Sus </H2> <H2> Rhumba3Sus </H2>
@ -339,7 +325,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaIntro></a> <A Name=RhumbaIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaIntro </H2> <H2> RhumbaIntro </H2>
@ -360,7 +345,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaEnd></a> <A Name=RhumbaEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaEnd </H2> <H2> RhumbaEnd </H2>
@ -383,7 +367,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RhumbaEnd1></a> <A Name=RhumbaEnd1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RhumbaEnd1 </H2> <H2> RhumbaEnd1 </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:37 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:12 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Rock-128</H1> <H1>Rock-128</H1>
@ -10,7 +10,6 @@
<LI><A Href=#Rock128End>Rock128End</a> <LI><A Href=#Rock128End>Rock128End</a>
</ul> </ul>
<A Name=Rock128></a> <A Name=Rock128></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rock128 </H2> <H2> Rock128 </H2>
@ -27,7 +26,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rock128Sus></a> <A Name=Rock128Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rock128Sus </H2> <H2> Rock128Sus </H2>
@ -46,7 +44,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rock128Intro></a> <A Name=Rock128Intro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rock128Intro </H2> <H2> Rock128Intro </H2>
@ -63,7 +60,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Rock128End></a> <A Name=Rock128End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Rock128End </H2> <H2> Rock128End </H2>

View File

@ -1,17 +1,37 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:34 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:12 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Rockballad</H1> <H1>Rockballad</H1>
<P>Written for slowish/doo-wop things like "You Belong To Me". <P>Written for slowish/doo-wop things like "You Belong To Me".
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Variables </H2>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="100%">
<TR>
<TD Valign=Top> <B> SusVoice </B> </TD>
<TD Valign=Top> Voice used for sustained voicing in RockBalladVoice (default=ChoirAahs). </TD>
</TR>
<TR>
<TD Valign=Top> <B> SusVoiceOctave </B> </TD>
<TD Valign=Top> Octave for sustained voices (default=4). </TD>
</TR>
</Table>
</TD></TR>
</Table>
<ul> <ul>
<LI><A Href=#RockBallad>RockBallad</a> <LI><A Href=#RockBallad>RockBallad</a>
<LI><A Href=#RockBallad1>RockBallad1</a>
<LI><A Href=#RockBalladFill>RockBalladFill</a> <LI><A Href=#RockBalladFill>RockBalladFill</a>
<LI><A Href=#RockBallad1Fill>RockBallad1Fill</a>
<LI><A Href=#RockBalladVoice>RockBalladVoice</a> <LI><A Href=#RockBalladVoice>RockBalladVoice</a>
<LI><A Href=#RockBalladIntro>RockBalladIntro</a> <LI><A Href=#RockBalladIntro>RockBalladIntro</a>
<LI><A Href=#RockBalladEnd>RockBalladEnd</a> <LI><A Href=#RockBalladEnd>RockBalladEnd</a>
<LI><A Href=#RockBalladEnd1>RockBalladEnd1</a>
</ul> </ul>
<A Name=RockBallad></a> <A Name=RockBallad></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RockBallad </H2> <H2> RockBallad </H2>
@ -28,8 +48,24 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RockBallad1></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> RockBallad1 </H2>
Same as the basic pattern, but skips the chord triplet on bar 4. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> FretlessBass </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Drum </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
<TR><TD> Walk </TD> <TD> FretlessBass </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=RockBalladFill></a> <A Name=RockBalladFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RockBalladFill </H2> <H2> RockBalladFill </H2>
@ -47,8 +83,25 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RockBallad1Fill></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> RockBallad1Fill </H2>
Guitar apreggio fills without 4th bar triplets. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Bass </TD> <TD> FretlessBass </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Drum </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
<TR><TD> Walk </TD> <TD> FretlessBass </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=RockBalladVoice></a> <A Name=RockBalladVoice></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RockBalladVoice </H2> <H2> RockBalladVoice </H2>
@ -67,7 +120,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RockBalladIntro></a> <A Name=RockBalladIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RockBalladIntro </H2> <H2> RockBalladIntro </H2>
@ -85,7 +137,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RockBalladEnd></a> <A Name=RockBalladEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> RockBalladEnd </H2> <H2> RockBalladEnd </H2>
@ -102,5 +153,21 @@
</Table> </Table>
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=RockBalladEnd1></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> RockBalladEnd1 </H2>
Simple 2 bar ending. <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> FretlessBass </TD></TR>
<TR><TD> Chord </TD> <TD> JazzGuitar </TD></TR>
<TR><TD> Drum </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum1 </TD></TR>
</Table>
</TD></TR>
</Table>
</Body></HTML> </Body></HTML>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:42 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:12 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Samba</H1> <H1>Samba</H1>
@ -14,7 +14,6 @@
<LI><A Href=#SambaEnd>SambaEnd</a> <LI><A Href=#SambaEnd>SambaEnd</a>
</ul> </ul>
<A Name=Samba></a> <A Name=Samba></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Samba </H2> <H2> Samba </H2>
@ -35,7 +34,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SambaFill></a> <A Name=SambaFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SambaFill </H2> <H2> SambaFill </H2>
@ -57,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SambaPlus></a> <A Name=SambaPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SambaPlus </H2> <H2> SambaPlus </H2>
@ -78,7 +75,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SambaSus></a> <A Name=SambaSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SambaSus </H2> <H2> SambaSus </H2>
@ -100,7 +96,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SambaSusFill></a> <A Name=SambaSusFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SambaSusFill </H2> <H2> SambaSusFill </H2>
@ -123,7 +118,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SambaSusPlus></a> <A Name=SambaSusPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SambaSusPlus </H2> <H2> SambaSusPlus </H2>
@ -145,7 +139,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SambaIntro></a> <A Name=SambaIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SambaIntro </H2> <H2> SambaIntro </H2>
@ -166,7 +159,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SambaEnd></a> <A Name=SambaEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SambaEnd </H2> <H2> SambaEnd </H2>

View File

@ -0,0 +1,137 @@
<!-- Auto-Generated by MMA on: Wed Mar 7 11:50:13 2007 -->
<HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Shuffleboggie</H1>
<P>A blues-like shuffle beat. Written for Kansas City.
<ul>
<LI><A Href=#ShuffleBoggie>ShuffleBoggie</a>
<LI><A Href=#ShuffleBoggie1>ShuffleBoggie1</a>
<LI><A Href=#ShuffleBoggieSus>ShuffleBoggieSus</a>
<LI><A Href=#ShuffleBoggieIntro>ShuffleBoggieIntro</a>
<LI><A Href=#ShuffleBoggieIntro4>ShuffleBoggieIntro4</a>
<LI><A Href=#ShuffleBoggieEnd>ShuffleBoggieEnd</a>
</ul>
<A Name=ShuffleBoggie></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> ShuffleBoggie </H2>
Blues with a shuffle style. <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> SlapBass1 </TD></TR>
<TR><TD> Bass-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> MutedGuitar </TD></TR>
<TR><TD> Chord-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Sax </TD> <TD> TenorSax </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Clap </TD> <TD> HandClap </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Ohh </TD> <TD> OpenHiHat </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=ShuffleBoggie1></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> ShuffleBoggie1 </H2>
Adds an articulated guitar riff to the basic beat. <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Arpeggio </TD> <TD> CleanGuitar </TD></TR>
<TR><TD> Bass </TD> <TD> SlapBass1 </TD></TR>
<TR><TD> Bass-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> MutedGuitar </TD></TR>
<TR><TD> Chord-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Sax </TD> <TD> TenorSax </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Clap </TD> <TD> HandClap </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Ohh </TD> <TD> OpenHiHat </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=ShuffleBoggieSus></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> ShuffleBoggieSus </H2>
Blues with violins. Sort of odd, but we can call them fiddles! <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> SlapBass1 </TD></TR>
<TR><TD> Bass-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> MutedGuitar </TD></TR>
<TR><TD> Chord-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Sax </TD> <TD> TenorSax </TD></TR>
<TR><TD> Chord-Sus </TD> <TD> Strings </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Clap </TD> <TD> HandClap </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Ohh </TD> <TD> OpenHiHat </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=ShuffleBoggieIntro></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> ShuffleBoggieIntro </H2>
A two bar intro. Short, loud and sweet. <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> SlapBass1 </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> MutedGuitar </TD></TR>
<TR><TD> Chord-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Sax </TD> <TD> TenorSax </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Clap </TD> <TD> HandClap </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=ShuffleBoggieIntro4></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> ShuffleBoggieIntro4 </H2>
A four bar intro. <B>(4)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> SlapBass1 </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> MutedGuitar </TD></TR>
<TR><TD> Chord-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Sax </TD> <TD> TenorSax </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Clap </TD> <TD> HandClap </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
</Table>
</TD></TR>
</Table>
<A Name=ShuffleBoggieEnd></a>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> ShuffleBoggieEnd </H2>
Very simple ending, hits on 1, 2 and 3 of last bar. <B>(2)</B>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="10%">
<TR><TD> Bass </TD> <TD> SlapBass1 </TD></TR>
<TR><TD> Chord-Guitar </TD> <TD> MutedGuitar </TD></TR>
<TR><TD> Chord-Piano </TD> <TD> Piano2 </TD></TR>
<TR><TD> Chord-Sax </TD> <TD> TenorSax </TD></TR>
<TR><TD> Drum-Chh </TD> <TD> ClosedHiHat </TD></TR>
<TR><TD> Drum-Clap </TD> <TD> HandClap </TD></TR>
<TR><TD> Drum-Kick </TD> <TD> KickDrum1 </TD></TR>
<TR><TD> Drum-Snare </TD> <TD> SnareDrum2 </TD></TR>
</Table>
</TD></TR>
</Table>
</Body></HTML>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:35 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:13 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Ska</H1> <H1>Ska</H1>
@ -12,7 +12,6 @@
<LI><A Href=#SkaEnd>SkaEnd</a> <LI><A Href=#SkaEnd>SkaEnd</a>
</ul> </ul>
<A Name=Ska></a> <A Name=Ska></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Ska </H2> <H2> Ska </H2>
@ -34,7 +33,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Ska1></a> <A Name=Ska1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Ska1 </H2> <H2> Ska1 </H2>
@ -57,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SkaSus></a> <A Name=SkaSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SkaSus </H2> <H2> SkaSus </H2>
@ -80,7 +77,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Ska1Sus></a> <A Name=Ska1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Ska1Sus </H2> <H2> Ska1Sus </H2>
@ -104,7 +100,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SkaClap></a> <A Name=SkaClap></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SkaClap </H2> <H2> SkaClap </H2>
@ -127,7 +122,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SkaEnd></a> <A Name=SkaEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SkaEnd </H2> <H2> SkaEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:36 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:13 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Slowblues</H1> <H1>Slowblues</H1>
@ -18,7 +18,6 @@
<LI><A Href=#SlowBluesEnd>SlowBluesEnd</a> <LI><A Href=#SlowBluesEnd>SlowBluesEnd</a>
</ul> </ul>
<A Name=SlowBlues></a> <A Name=SlowBlues></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBlues </H2> <H2> SlowBlues </H2>
@ -36,7 +35,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesFill></a> <A Name=SlowBluesFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesFill </H2> <H2> SlowBluesFill </H2>
@ -54,7 +52,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesFill1></a> <A Name=SlowBluesFill1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesFill1 </H2> <H2> SlowBluesFill1 </H2>
@ -72,7 +69,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesFill2></a> <A Name=SlowBluesFill2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesFill2 </H2> <H2> SlowBluesFill2 </H2>
@ -90,7 +86,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesFill3></a> <A Name=SlowBluesFill3></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesFill3 </H2> <H2> SlowBluesFill3 </H2>
@ -108,7 +103,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesSus></a> <A Name=SlowBluesSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesSus </H2> <H2> SlowBluesSus </H2>
@ -127,7 +121,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesWalk4></a> <A Name=SlowBluesWalk4></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesWalk4 </H2> <H2> SlowBluesWalk4 </H2>
@ -144,7 +137,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesWalk4Sus></a> <A Name=SlowBluesWalk4Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesWalk4Sus </H2> <H2> SlowBluesWalk4Sus </H2>
@ -162,7 +154,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesWalk8></a> <A Name=SlowBluesWalk8></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesWalk8 </H2> <H2> SlowBluesWalk8 </H2>
@ -180,7 +171,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesWalk8Sus></a> <A Name=SlowBluesWalk8Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesWalk8Sus </H2> <H2> SlowBluesWalk8Sus </H2>
@ -199,7 +189,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesIntro></a> <A Name=SlowBluesIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesIntro </H2> <H2> SlowBluesIntro </H2>
@ -216,7 +205,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBluesEnd></a> <A Name=SlowBluesEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBluesEnd </H2> <H2> SlowBluesEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:44 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:13 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Slowbolero</H1> <H1>Slowbolero</H1>
@ -10,7 +10,6 @@
<LI><A Href=#SlowBoleroEnd>SlowBoleroEnd</a> <LI><A Href=#SlowBoleroEnd>SlowBoleroEnd</a>
</ul> </ul>
<A Name=SlowBolero></a> <A Name=SlowBolero></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBolero </H2> <H2> SlowBolero </H2>
@ -32,7 +31,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBoleroSus></a> <A Name=SlowBoleroSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBoleroSus </H2> <H2> SlowBoleroSus </H2>
@ -55,7 +53,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBoleroIntro></a> <A Name=SlowBoleroIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBoleroIntro </H2> <H2> SlowBoleroIntro </H2>
@ -77,7 +74,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowBoleroEnd></a> <A Name=SlowBoleroEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowBoleroEnd </H2> <H2> SlowBoleroEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:41 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:13 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Slowcountry</H1> <H1>Slowcountry</H1>
@ -14,7 +14,6 @@
<LI><A Href=#SlowCountryEnd>SlowCountryEnd</a> <LI><A Href=#SlowCountryEnd>SlowCountryEnd</a>
</ul> </ul>
<A Name=SlowCountry></a> <A Name=SlowCountry></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowCountry </H2> <H2> SlowCountry </H2>
@ -32,7 +31,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowCountrySus></a> <A Name=SlowCountrySus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowCountrySus </H2> <H2> SlowCountrySus </H2>
@ -51,7 +49,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowCountryFill></a> <A Name=SlowCountryFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowCountryFill </H2> <H2> SlowCountryFill </H2>
@ -70,7 +67,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowCountryWalk></a> <A Name=SlowCountryWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowCountryWalk </H2> <H2> SlowCountryWalk </H2>
@ -86,7 +82,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowCountryWalkSus></a> <A Name=SlowCountryWalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowCountryWalkSus </H2> <H2> SlowCountryWalkSus </H2>
@ -103,7 +98,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowCountryWalkFill></a> <A Name=SlowCountryWalkFill></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowCountryWalkFill </H2> <H2> SlowCountryWalkFill </H2>
@ -122,7 +116,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowCountryIntro></a> <A Name=SlowCountryIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowCountryIntro </H2> <H2> SlowCountryIntro </H2>
@ -139,7 +132,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowCountryEnd></a> <A Name=SlowCountryEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowCountryEnd </H2> <H2> SlowCountryEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:37 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:13 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Slowjazz</H1> <H1>Slowjazz</H1>
@ -21,7 +21,6 @@
<LI><A Href=#SlowJazz2End>SlowJazz2End</a> <LI><A Href=#SlowJazz2End>SlowJazz2End</a>
</ul> </ul>
<A Name=SlowJazz></a> <A Name=SlowJazz></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz </H2> <H2> SlowJazz </H2>
@ -39,7 +38,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazzSus></a> <A Name=SlowJazzSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazzSus </H2> <H2> SlowJazzSus </H2>
@ -58,7 +56,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazzWalk></a> <A Name=SlowJazzWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazzWalk </H2> <H2> SlowJazzWalk </H2>
@ -75,7 +72,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazzWalkSus></a> <A Name=SlowJazzWalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazzWalkSus </H2> <H2> SlowJazzWalkSus </H2>
@ -93,7 +89,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz1></a> <A Name=SlowJazz1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz1 </H2> <H2> SlowJazz1 </H2>
@ -111,7 +106,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz1Sus></a> <A Name=SlowJazz1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz1Sus </H2> <H2> SlowJazz1Sus </H2>
@ -130,7 +124,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz1Walk></a> <A Name=SlowJazz1Walk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz1Walk </H2> <H2> SlowJazz1Walk </H2>
@ -147,7 +140,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz1WalkSus></a> <A Name=SlowJazz1WalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz1WalkSus </H2> <H2> SlowJazz1WalkSus </H2>
@ -165,7 +157,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz2></a> <A Name=SlowJazz2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz2 </H2> <H2> SlowJazz2 </H2>
@ -183,7 +174,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz2Sus></a> <A Name=SlowJazz2Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz2Sus </H2> <H2> SlowJazz2Sus </H2>
@ -202,7 +192,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazzIntro></a> <A Name=SlowJazzIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazzIntro </H2> <H2> SlowJazzIntro </H2>
@ -220,7 +209,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz1Intro></a> <A Name=SlowJazz1Intro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz1Intro </H2> <H2> SlowJazz1Intro </H2>
@ -238,7 +226,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz2Intro></a> <A Name=SlowJazz2Intro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz2Intro </H2> <H2> SlowJazz2Intro </H2>
@ -255,7 +242,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazzEnd></a> <A Name=SlowJazzEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazzEnd </H2> <H2> SlowJazzEnd </H2>
@ -272,7 +258,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SlowJazz2End></a> <A Name=SlowJazz2End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SlowJazz2End </H2> <H2> SlowJazz2End </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:32 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:14 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Softrock</H1> <H1>Softrock</H1>
@ -13,7 +13,6 @@
<LI><A Href=#SoftRockEnd>SoftRockEnd</a> <LI><A Href=#SoftRockEnd>SoftRockEnd</a>
</ul> </ul>
<A Name=SoftRock></a> <A Name=SoftRock></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftRock </H2> <H2> SoftRock </H2>
@ -31,7 +30,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftRockSus></a> <A Name=SoftRockSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftRockSus </H2> <H2> SoftRockSus </H2>
@ -50,7 +48,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftRock1></a> <A Name=SoftRock1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftRock1 </H2> <H2> SoftRock1 </H2>
@ -69,7 +66,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftRock1Sus></a> <A Name=SoftRock1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftRock1Sus </H2> <H2> SoftRock1Sus </H2>
@ -89,7 +85,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftRockIntro></a> <A Name=SoftRockIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftRockIntro </H2> <H2> SoftRockIntro </H2>
@ -106,7 +101,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftRockSusIntro></a> <A Name=SoftRockSusIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftRockSusIntro </H2> <H2> SoftRockSusIntro </H2>
@ -124,7 +118,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftRockEnd></a> <A Name=SoftRockEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftRockEnd </H2> <H2> SoftRockEnd </H2>

View File

@ -1,8 +1,22 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:42 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:14 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Softshoe</H1> <H1>Softshoe</H1>
<P>Syncopated ditty for the old dancers. Written for "Me and My Shadow". <P>Syncopated ditty for the old dancers. Written for "Me and My Shadow".
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD>
<H2> Variables </H2>
</TD></TR>
<TR><TD>
<Table CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="100%">
<TR>
<TD Valign=Top> <B> ChordVoice </B> </TD>
<TD Valign=Top> Voice used in Chord tracks (defaults to Piano2). </TD>
</TR>
</Table>
</TD></TR>
</Table>
<ul> <ul>
<LI><A Href=#Softshoe>Softshoe</a> <LI><A Href=#Softshoe>Softshoe</a>
<LI><A Href=#SoftShoePlus>SoftShoePlus</a> <LI><A Href=#SoftShoePlus>SoftShoePlus</a>
@ -12,7 +26,6 @@
<LI><A Href=#SoftShoeEnd>SoftShoeEnd</a> <LI><A Href=#SoftShoeEnd>SoftShoeEnd</a>
</ul> </ul>
<A Name=Softshoe></a> <A Name=Softshoe></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Softshoe </H2> <H2> Softshoe </H2>
@ -30,7 +43,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftShoePlus></a> <A Name=SoftShoePlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftShoePlus </H2> <H2> SoftShoePlus </H2>
@ -49,7 +61,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftShoeSus></a> <A Name=SoftShoeSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftShoeSus </H2> <H2> SoftShoeSus </H2>
@ -68,7 +79,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftShoeSusPlus></a> <A Name=SoftShoeSusPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftShoeSusPlus </H2> <H2> SoftShoeSusPlus </H2>
@ -88,7 +98,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftShoeIntro></a> <A Name=SoftShoeIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftShoeIntro </H2> <H2> SoftShoeIntro </H2>
@ -105,7 +114,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SoftShoeEnd></a> <A Name=SoftShoeEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SoftShoeEnd </H2> <H2> SoftShoeEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:43 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:14 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Son</H1> <H1>Son</H1>
@ -10,7 +10,6 @@
<LI><A Href=#SonEnd>SonEnd</a> <LI><A Href=#SonEnd>SonEnd</a>
</ul> </ul>
<A Name=Son></a> <A Name=Son></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Son </H2> <H2> Son </H2>
@ -33,7 +32,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SonSus></a> <A Name=SonSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SonSus </H2> <H2> SonSus </H2>
@ -57,7 +55,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SonIntro></a> <A Name=SonIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SonIntro </H2> <H2> SonIntro </H2>
@ -80,7 +77,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SonEnd></a> <A Name=SonEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SonEnd </H2> <H2> SonEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:30 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:14 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Swing</H1> <H1>Swing</H1>
@ -34,7 +34,6 @@
<LI><A Href=#Swing2End>Swing2End</a> <LI><A Href=#Swing2End>Swing2End</a>
</ul> </ul>
<A Name=Swing></a> <A Name=Swing></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing </H2> <H2> Swing </H2>
@ -55,7 +54,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingWalk></a> <A Name=SwingWalk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingWalk </H2> <H2> SwingWalk </H2>
@ -76,7 +74,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingTriple></a> <A Name=SwingTriple></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingTriple </H2> <H2> SwingTriple </H2>
@ -97,7 +94,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingPlus></a> <A Name=SwingPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingPlus </H2> <H2> SwingPlus </H2>
@ -119,7 +115,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingWalkPlus></a> <A Name=SwingWalkPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingWalkPlus </H2> <H2> SwingWalkPlus </H2>
@ -141,7 +136,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingSus></a> <A Name=SwingSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingSus </H2> <H2> SwingSus </H2>
@ -163,7 +157,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingPlusSus></a> <A Name=SwingPlusSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingPlusSus </H2> <H2> SwingPlusSus </H2>
@ -186,7 +179,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingWalkSus></a> <A Name=SwingWalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingWalkSus </H2> <H2> SwingWalkSus </H2>
@ -208,7 +200,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingWalkPlusSus></a> <A Name=SwingWalkPlusSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingWalkPlusSus </H2> <H2> SwingWalkPlusSus </H2>
@ -231,7 +222,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1></a> <A Name=Swing1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1 </H2> <H2> Swing1 </H2>
@ -252,7 +242,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1Walk></a> <A Name=Swing1Walk></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1Walk </H2> <H2> Swing1Walk </H2>
@ -273,7 +262,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1Triple></a> <A Name=Swing1Triple></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1Triple </H2> <H2> Swing1Triple </H2>
@ -293,7 +281,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1Sus></a> <A Name=Swing1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1Sus </H2> <H2> Swing1Sus </H2>
@ -315,7 +302,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1WalkSus></a> <A Name=Swing1WalkSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1WalkSus </H2> <H2> Swing1WalkSus </H2>
@ -337,7 +323,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1Plus></a> <A Name=Swing1Plus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1Plus </H2> <H2> Swing1Plus </H2>
@ -359,7 +344,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1PlusSus></a> <A Name=Swing1PlusSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1PlusSus </H2> <H2> Swing1PlusSus </H2>
@ -382,7 +366,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1WalkPlus></a> <A Name=Swing1WalkPlus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1WalkPlus </H2> <H2> Swing1WalkPlus </H2>
@ -404,7 +387,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1WalkPlusSus></a> <A Name=Swing1WalkPlusSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1WalkPlusSus </H2> <H2> Swing1WalkPlusSus </H2>
@ -427,7 +409,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing2></a> <A Name=Swing2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing2 </H2> <H2> Swing2 </H2>
@ -449,7 +430,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing2Triple></a> <A Name=Swing2Triple></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing2Triple </H2> <H2> Swing2Triple </H2>
@ -469,7 +449,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing2Plus></a> <A Name=Swing2Plus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing2Plus </H2> <H2> Swing2Plus </H2>
@ -492,7 +471,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing2Sus></a> <A Name=Swing2Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing2Sus </H2> <H2> Swing2Sus </H2>
@ -515,7 +493,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing2PlusSus></a> <A Name=Swing2PlusSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing2PlusSus </H2> <H2> Swing2PlusSus </H2>
@ -539,7 +516,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingIntro></a> <A Name=SwingIntro></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingIntro </H2> <H2> SwingIntro </H2>
@ -560,7 +536,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingIntro2></a> <A Name=SwingIntro2></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingIntro2 </H2> <H2> SwingIntro2 </H2>
@ -581,7 +556,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=SwingEnd></a> <A Name=SwingEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> SwingEnd </H2> <H2> SwingEnd </H2>
@ -600,7 +574,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing1End></a> <A Name=Swing1End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing1End </H2> <H2> Swing1End </H2>
@ -621,7 +594,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Swing2End></a> <A Name=Swing2End></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Swing2End </H2> <H2> Swing2End </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:29 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:15 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Tango</H1> <H1>Tango</H1>
@ -9,7 +9,6 @@
<LI><A Href=#TangoEnd>TangoEnd</a> <LI><A Href=#TangoEnd>TangoEnd</a>
</ul> </ul>
<A Name=Tango></a> <A Name=Tango></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Tango </H2> <H2> Tango </H2>
@ -30,7 +29,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=Tango1></a> <A Name=Tango1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> Tango1 </H2> <H2> Tango1 </H2>
@ -51,7 +49,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=TangoEnd></a> <A Name=TangoEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> TangoEnd </H2> <H2> TangoEnd </H2>

View File

@ -1,4 +1,4 @@
<!-- Auto-Generated by MMA on: Sun Oct 15 11:20:36 2006 --> <!-- Auto-Generated by MMA on: Wed Mar 7 11:50:15 2007 -->
<HTML> <HTML>
<BODY BGCOLOR="#B7DFFF" Text=Black> <BODY BGCOLOR="#B7DFFF" Text=Black>
<H1>Vienesewaltz</H1> <H1>Vienesewaltz</H1>
@ -11,7 +11,6 @@
<LI><A Href=#VieneseWaltzEnd>VieneseWaltzEnd</a> <LI><A Href=#VieneseWaltzEnd>VieneseWaltzEnd</a>
</ul> </ul>
<A Name=VieneseWaltz></a> <A Name=VieneseWaltz></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> VieneseWaltz </H2> <H2> VieneseWaltz </H2>
@ -28,7 +27,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=VieneseWaltzSus></a> <A Name=VieneseWaltzSus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> VieneseWaltzSus </H2> <H2> VieneseWaltzSus </H2>
@ -46,7 +44,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=VieneseWaltz1></a> <A Name=VieneseWaltz1></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> VieneseWaltz1 </H2> <H2> VieneseWaltz1 </H2>
@ -64,7 +61,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=VieneseWaltz1Sus></a> <A Name=VieneseWaltz1Sus></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> VieneseWaltz1Sus </H2> <H2> VieneseWaltz1Sus </H2>
@ -83,7 +79,6 @@
</TD></TR> </TD></TR>
</Table> </Table>
<A Name=VieneseWaltzEnd></a> <A Name=VieneseWaltzEnd></a>
<P>
<Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%"> <Table Border=3 CELLSPACING=0 CELLPADDING=5 BGColor="#eeeeee" Width="60%">
<TR><TD> <TR><TD>
<H2> VieneseWaltzEnd </H2> <H2> VieneseWaltzEnd </H2>

Some files were not shown because too many files have changed in this diff Show More