












                           HARMONY Version 7
                           =================

                     Copyright (c) Neil Jennings 1996




          A unique program which generates chords to accompany a melody. It
          also  displays score, plays music, transposes, etc. and can print
          or display enlarged music for the visually impaired.

          Version 7 adds MIDI file creation  and  removes  tablature  to  a
          separate  program  (MELTAB).  It  also adds a drum voice for MIDI
          use, and drum pattern generation. Conditional  play  of  bars  is
          also now fully implemented.

          Requires EGA or VGA graphics. A 486 or better is recommended, but
          not essential.















          Written and distributed by:
          Neil Jennings BSc CEng MBCS FIAP
          Green Hedges Bungalow, Neath Road, Bryncoch,
          Neath SA10 7YH, West Glamorgan, Wales, UK


          Tel:        (+44)1639-633072
          Compuserve: 100040,471
          Email:      100040.471@compuserve.com




          This software package is copyrighted material. You may use it for
          non-commercial  work  only, for a trial period of 30 days. If you
          are  going  to  be  using  it  after  that  trial,  or  using  it
          commercially,  or  in  any  work that is to be distributed in any
          manner, you  must  register  by  purchasing  a  license  for  the
          package.


               HARMONY         UK users. . . . . .   20
               (PACKAGE)
                               Overseas users. . .   $37
                               (includes bank handling charges)

               This purchases a SINGLE licence for a SINGLE copy.
               Commercial and Site licences are available on request.


          To order see the ORDER.FRM file.






          LICENSE AGREEMENT - REGISTERED VERSIONS ONLY

          This  is  a  legal  agreement between you, the end user, and Neil
          Jennings. By using this software, you are agreeing to be bound by
          the terms of this agreement.

                                   SOFTWARE LICENCE

          1. GRANT OF LICENCE. Neil Jennings grants to you the right to use
          one copy of the SOFTWARE on a  single  terminal  connected  to  a
          single  computer  (i.e.,  with a single CPU). You may not network
          the SOFTWARE or otherwise use it on more  than  one  computer  or
          computer terminal at a time.

          2.  COPYRIGHT. The SOFTWARE is owned by Neil Jennings and is pro-
          tected by United Kingdom copyright laws and international  treaty
          provisions. Therefore, you must treat the SOFTWARE like any other
          copyrighted  material  (e.g., a book or musical recording) except
          that you may either (a) make one copy of the SOFTWARE solely  for
          backup  or  archival  purposes, or (b) transfer the SOFTWARE to a
          single hard disk provided you keep the original solely for backup
          or archival purposes. You may make a single copy of this document
          for your own use only.

          3. OTHER RESTRICTIONS. You may not rent or  lease  the  SOFTWARE,
          but  you may transfer the software and accompanying documentation
          on a permanent basis  provided  you  retain  no  copies  and  the
          recipient  agrees  to  the  terms  of this Agreement. You may not
          reverse engineer, decompile, or disassemble the software. If  the
          SOFTWARE  is an update, any transfer must include the most recent
          update and all previous versions.

          NO WARRANTIES. Neil Jennings  disclaims  all  warranties,  either
          expressed  or  implied,  including  but  not  limited  to implied
          warranties  of  merchantability  and  fitness  for  a  particular
          purpose, with respect to the SOFTWARE and the documentation.

          NO  LIABILITY  FOR  CONSEQUENTIAL DAMAGES. In no event shall Neil
          Jennings be liable for any damages whatsoever arising out of  use
          of or inability to use this SOFTWARE.


          This agreement is governed by the laws of England & Wales.











                       Contents
                       ========

           1           Introduction

           2           Quick Guide to using the program

           3           Menu Options

           4           Editing the tune and lyric

           5           Printing

           6           MIDI file

           7           Bugs

           8           Samples

           9           Restrictions

           10          Registration

           11          Future Plans

           12          Feedback

           13          Acknowledgements

                       Appendices
                       ==========

           A           Tune file definition

           B           Voice file definition

           C           Chord and Harmony files

           D           Technical details

           E           History

           F           About the Author

           G           Using Under WINDOWS 3.x





                              1. Introduction
                              ===============

          Purpose
          -------

          This  program is designed to add simple chords to a given melody.
          The melody must be supplied in the text format used by  the  ACCU
          Music system.  A summary of the syntax, including extensions used
          only by HARMONY, is given below as Appendix A

          HARMONY should work on any PC with EGA or VGA graphics, but a 486
          is recommended as a minimum for SOME of the options.

          Sound
          -----
          In order to check the  tune,  it  can  be  played  using  the  PC
          speaker,  or  on  a  suitable  (ADLIB or Soundblaster compatible)
          sound card.

          Score
          -----
          The  tune  can  be  displayed  as  a melody with or without words
          (lyrics) and chord symbols, as a 2-stave  score,  or  as  a  full
          score  with  a  separate  staff  for  each  voice. The display is
          scalable, facilitating use by the partially sighted.

          The chords can be saved and edited as a text file, if changes are
          desired.  The melody with chord  symbols  can  be  printed  if  a
          suitable printer is available (needs graphic capability).

          Harmony
          -------
          A  single  voice  file  can  be loaded, and the generated harmony
          stored as a full .SNG file with four voices.  This  can  also  be
          played on a sound card.

          Alternatively, an existing .SNG file can be loaded and used.

          MIDI Output
          ------------
          A MIDI file can be written to play the complete tune. You can, of
          course, enter all voices manually, and just use  the  program  to
          print or play the tune.





                       2. Quick Guide to using the program
                       ===================================

          Type  HARMONY  to run the program. A menu will be displayed.  The
          menu options are described in a following chapter.

          You can also include a song or voice file  name  on  the  command
          line, and that file will be loaded before the menu is displayed.

          You can specify either a SNG or a voice file. By default, the SNG
          file will be loaded.

          Example
          -------
                HARMONY JACK

          Generation of suggested chords
          ===============================

          Load Melody
          -----------
          A  melody  line  is  loaded  from a voice file.  The program will
          ALWAYS assume that voice 1 (file extension V1) is the melody.

          Chords
          ------
          Select Generate Harmony (or View Harmony) from the View menu.

          The program will generate chord symbols for each  bar,  using  an
          algorithm  which  I have devised. This version uses only the most
          basic chords, and is suitable for simple  melodies.   The  chords
          are  chosen  on a points system, and the View Harmony option will
          show the the three highest scoring chords for each bar or part of
          a bar.

          Note that there is usually more  than  one  way  to  harmonise  a
          melody,  depending  on  the  style  of  music  and  the  personal
          preferences of the arranger.

          You can edit the chord file to replace the automatic chord by one
          of your choice, but these changes will not be  reflected  in  the
          other   voices,  and  will  be  overwritten  if  the  harmony  is
          regenerated.







          Time signatures
          ---------------
          Although any time signature may be displayed,  the  program  only
          recognises common signatures when generating chords.

          The current version recognises

                  2/2, 2/4, 3/4, 4/4, 5/4, 6/4, 6/8, 9/8

          Bars and accents
          ----------------
          By default, one chord is generated for each accented note in  the
          bar.   Thus  2/4, 3/4, 5/4 will have one chord per bar, 2/2, 4/4,
          and 6/8 will have  two,  and  9/8  will  have  3.   This  can  be
          overridden by selecting Chord Options from the View menu.

          Other Voices
          ------------
          The program will then use these chord symbols to fill voices 2 to
          4  with  the notes of the selected chord. The notes are chosen to
          fit within the Bass clef where possible.

          In technical terms, the selected chord will normally be  a  chord
          in  either  the  root position or the first inversion. Only three
          notes can be generated, because there are only four voices.   For
          the  dominant  7th,  this  means that one note will be missing. I
          have chosen to omit the 'third' in this version.

          Playing the chords
          ------------------
          The music can be played, complete  with  chords,  on  a  suitable
          sound  card.   To  do this, you must load the Sound driver BEFORE
          running  HARMONY.   The  driver  may  be  called   SOUND.COM   or
          SB-SOUND.COM. Refer to your sound card manual for details.

          It can also be converted to a General Midi file and played by
          a MIDI file player.





                              3. Menu Options
                              ===============

          Menus and Pick lists
          --------------------

          The  menus  can be activated by standard key strokes, eg ALT/F, S
          to save. Within the drop down menus and pick lists, you  can  use
          either the highlighted letter or cursor select.

          Alternatively, you may use the arrow keys to highlight items, and
          ENTER to select. Mouse selection is not yet supported.

          Page  up  and  Page  down  action  on file selection lists can be
          selected by the PgUp and PgDn keys.

          Note that some menu options will be  'greyed'  and  will  not  be
          selectable until a song or voice file is loaded.





          3.1. File submenu
          -----------------
          New
                        Clears any tune file from memory

          Open Tune file
                        Opens  a  tune  file,  loading all voices which are
                        present

          Open Voice file
                        Opens a Voice file, ie with file extension V1.

          Save Tune file
                        Saves the current tune with all  voices  and  chord
                        file  (.CHD),  as  a  tune file with the same name,
                        replacing it if already present.

          Save Tune As
                        Saves the current tune or voice as a new tune file

          Save ACCU song
                        Saves  the  song  under  a  new   name   with   all
                        HARMONY-specific  commands removed.  It should then
                        be compatible with ACCU Musicsys

          Delete Tune from disk
                        Deletes a tune and all voices from the disk

          Select printer
                        Displays a menu of printers.

          Setup printer
                        Set printer options.
                        Currently only Dots Per Inch on laser printers This
                        will change the actual size of the printed score.

          Print
                        Prints the current tune on the selected printer

          Go to DOS
                        Shells out to a DOS session

          Change Directory
                        Select Drive
                        Select Directory



          3.2. Edit submenu
          -----------------
          Edit Voice
                        Allows you  to  select  a  voice,  then  to  change
                        individual notes, insert or delete notes.

          Edit Chords
                        Allows  you  to  edit  the  chord  symbols. See the
                        detailed description for further details

          Edit Tune Name
                        Allows you to change the tune name.  The  new  name
                        will be saved when you save the song.

          Create Tune
                        Creates  a  new tune, empty except for default Key,
                        Time and Tempo

          Create Random Tune
                        Creates  a  new  tune,  with  random  notes,  in  a
                        selected  style.   Strictly  for  fun!  Sometimes a
                        quite reasonable tune is  generated.   I  find  the
                        Waltz  style  to  be the most realistic but you may
                        well find usable  phrases  in  any  of  the  styles
                        provided.

          Drum Pattern
                        This  allows  you  to  specify a predetermined drum
                        pattern for the whole tune. Before  selecting  this
                        option, edit the first bar in voice 0 as follows:

                          Insert BEFORE the first bar  line  a  single  bar
                          containing  the  drum beats to  be used as a 
                          pattern.
                          
                          The format for a drum beat is 
                          ;BEAT nnxx
                          where nn is the MIDI drum number, eg 37 for bass
                          drum, and xx is the note length, eg Q for a 
                          quarter note (crotchet), and optionally a dot.

                        These  notes will then be propagated into every bar
                        of the voice. Note that as there is only one voice,
                        overlapping notes cannot be generated.

                        The pattern will be LOST when you regenerate the
                        harmony.

                        Affects voice 0 only.




          3.3. View submenu
          -----------------

          Note: You can type Q to quit the display before it is finished.

          View          Displays the current tune in the selected mode

          Melody mode      )   mode selection, with <- indicating the
          Score mode       )   currently selected mode
          Open Score mode  )

                        Melody  mode  displays  the melody line only. Score
                        mode uses the Treble and Bass  Clefs.   Open  score
                        uses one staff for each voice.

          Select Voice  Selects a voice for viewing in melody mode

          View Harmony
                        Displays  and  writes to a file the points score of
                        each generated chord,  with  two  alternatives  for
                        each.

          Generate Harmony
                        Generates the chords to accompany the melody

          Turn Lyric display (ON/OFF)
                        Select whether to display lyrics.
                        The display is faster when OFF

          Turn chord display (ON/OFF)
                        Select whether to display chord symbols
                        The display is faster when OFF

          Enlarge font) Change the size of the displayed music font
          Reduce font )



          3.4. Options submenu
          --------------------

          Save configuration
                        Saves the  configuration  file  to  the  current
                        work directory.
                        Items saved are:
                            Colour scheme
                            Font size
                            Work directory

          Load Configuration
                        Loads  the  configuration  file from the current
                        work directory.

          Display Configuration
                        Displays the configuration details

          Monchrome scheme  )  Alternative colour schemes
          Cyan/Blue scheme  )
          Blue/Cyan scheme  )
          Red/Grey scheme   )

          Change work directory
                Select Drive
                Select Directory




          3.5. Transpose submenu
          ----------------------

          Select steps
                        Select the tnumber of steps for transposition.

          Select key
                        Select  the  target  key  for transposition. You be
                        able to select the key from a pick list.

           Transpose Melody
                        Transpose the melody to a new key, specified by the
                        steps or key selected. The chords and other  voices
                        will automatically be regenerated.

           Transpose Tune
                        Transpose  the  song to a new key, specified by the
                        steps  or  key  selected.  All   voices   will   be
                        transposed.




          3.6. Play submenu
          -----------------

          Turn PC speaker On/Off

          Play melody
                        Plays voice 1 on the PC speaker.
                        Any repeats specified will be actioned.
                        Use Q to stop

          Play voice
                        Plays the selected voice on the PC speaker.
                        Any repeats specified will be actioned.
                        Use Q to stop

          Play with score
                        Plays the melody and displays the score at the same
                        time.  The display slows down the program, and this
                        option  is  only  recommended for a fast PC (486 or
                        greater).

          Play on Sound card
                        Plays  the  melody  on  a  sound  card. You will be
                        invited to select voices. Any  combination  of  the
                        four voices may be selected.

          Select bank file
                        Select  an  instrument  bank file to be used by the
                        sound card. Default is STANDARD.BNK,  which  should
                        be in the current directory.

          Select instrument
                        Select  an instrument from the bank file to be used
                        by one voice when playing on the  the  sound  card.
                        The stored voice will be updated and can be written
                        back to the tune file.

          Staccato      For sound card only, you may enter a value in the
                        range 0 (legato) to 4 (Very staccato)



          3.7. MIDI submenu
          -----------------
          Options

          Write MIDI File
                        Write a format 1 MIDI file using the current tune.

          Select Instrument
                        Select  a  MIDI instrument for one voice. Note that
                        this  is  restricted  to  Bank  zero,  giving   the
                        standard  128  instruments.  If  any  other bank is
                        needed, then the MIDI INSTRUMENT  command  must  be
                        inserted by hand (See below).

                        NOTES
                        =====
                        In  voices  1 to 4, this will add a MIDI INSTRUMENT
                        definition to the START of the voice. This may have
                        no effect if there is  a  later  definition  within
                        that  voice - delete it first! It will be zapped if
                        the harmony is regenerated.

                        For voice 0, this will add a MIDI DRUM  command  to
                        voice  1,  which  will  ONLY  take  effect when the
                        harmony or drum part is regenerated.

          Drum Pattern Fill

                        This propagates a drum pattern  into  all  bars  of
                        voice   0.   As   HARMONY   is  NOT  multi-timbral,
                        overlapping drum notes are not permitted.

          3.8. Restrictions submenu
          -------------------------

          Display Limits
                        This displays the inbuild program limits.

          Display Tune Stats
                        This displays details of the current tune.




                         4. Editing the tune and lyric
                         ==============================

          Editing a Voice
          ---------------
          A very simple edit facility is  included,  which  allows  you  to
          replace  individual  notes  or  chords,  and  to insert or delete
          notes. The chords MUST be kept in  step  with  voice  1,  or  the
          display   may   be   wrong,   so  inserting  into  voice  1  will
          automatically insert a filler into the chord list.

          You will first be asked to select  the  voice,  unless  only  one
          voice is present.  You will then be able to select the note to be
          edited from a menu, and press enter. You can replace the selected
          note  by  another.  The menu also allows you to page forwards and
          backwards through the stored tune.

          Short cuts:

            You do not need to enter the * in column 2, it will be inserted
            for you. Thus A*4E can be entered as A4E.

            Entering  J  or  K  will add the letter to the note to indicate
            joining by beams, or remove it if already present.

            You only need to enter M for a bar, the *** will be  generated.
            Similarly, M ;> will be expanded to M*** ;>

          You  can  insert  notes  immediately  after the selected note, by
          typing >, or delete the selected note by typing !. New notes will
          be validated as they are entered.

          The program will revalidate the bar structure after editing.  For
          more substantial changes, it may be better to use the DOS Editor.

          Inserting Notes
          ---------------
          You can insert notes or append notes to the end of  the  selected
          voice.   This  has been designed to speed input of tunes, and the
          following commands are allowed:

          a)  A valid note.

          If  you  just  enter the letter, all other details will be copied
          from the previous note (It will search back past a  bar  to  find
          the previous note)

          If  there  is  no  accidental,  you do not need to enter the * in
          position ie you can type D4E instead of D*4E

          b)  -n will generate a note n steps down from the previous note.

          c)  +n will generate a note n steps up from the previous note
          If you leave out the number, it will assume 1

          d)  Just press enter to copy the previous note (NOT rest)

          e)  Q will end the facility.





          Editing the Chords
          ------------------
          The chord file includes details of three possible chords for  the
          melody  note,  and  the  weighting generated for each.  The chord
          automatically selected will be the one with the highest weighting
          value.

          You can replace this by any other chord that you wish  to  print.
          Note  that  the  notes  displayed will NOT change unless you edit
          them too!

          When changing a chord, just type the chord that you wish  to  see
          displayed and ignore the rest of the information provided.

          Editing the Lyric
          -----------------
          Note :
             In  theory,  "The  Lyric"  means  the WHOLE of the words for a
             song. Thus "The Lyrics" would imply two  or  more  alternative
             sets of words for the same tune!

          The word or part of word for a note is  included  with  the  note
          definition in voice 1, following two semi-colons, as shown below

          D*4Q ;;Morn-
          F*4q ;;ing
          A*4q ;;has

          Editing the tune name.
          ----------------------
          You can change the tune name. The new name will be saved when you
          save the tune.







                                5. Printing
                                ===========

          The  program  now  has  a proper score print capability, which is
          unfortunately limited by the restrictions in the BASIC  compiler.
          It provides a pure screen image bit copy to the printer.

          This  means  that  a line of print is restricted to the number of
          pixels across the screen, which is 640 for VGA and EGA.   (Sorry,
          but  the  language  does not support SVGA). Selecting the printer
          resolution (100 or 150 dpi) therefore does NOT alter  the  number
          of dots, but changes the SIZE of the printed music. 100 dpi gives
          larger print, 150 smaller.

          Score  display when printing is in reversed colour, and is slower
          because a tilted ellipse routine is used to make the  notes  look
          more  traditional. This routine is written in BASIC and is slower
          than the inbuilt CIRCLE command of BASIC.

          You  can  either print to a LaserJet compatible on LPT1, or print
          to a file in LaserJet format. The file can then be  copied  to  a
          printer (eg LPT2) by DOS command
                        COPY xxx.PRN LPT2 /b
          where xxx is the tune file.

          I hope to provide a dot-matrix driver soon.

          You can also print to ANY printer, if running under Windows 3.x,
          by the following procedure:

                Run Harmony in a full screen DOS session until
                     the required page is displayed
                Switch the DOS session to a window by Alt+enter
                Click on the '-' (top left) and use the EDIT option to
                     mark and copy the screen
                Paste into a suitable Windows program
                     (Windows Write will work)
                In the DOS session, switch back to full screen mode
                Repeat for each full screen of the score

          You can then print from the Windows prorgam. This procedure  uses
          the  Windows  drivers  to  correct  the aspect ratio and actually
          gives a better looking print.






                               6. MIDI file
                               ============

          The  program  can  generate  a  MIDI file from the loaded tune.

          Some  MIDI  options,  eg  instrument names, are incompatible with
          existing options, and therefore new commands have been  added  to
          the voice file format.

          However, most MIDI commands are generated from the standard voice
          file  data,  including  time  and key signatures, tempo, and note
          definitions.

          The file MUST contain a bar line before any notes,  with suitable 
          rests,  if necessary,  before the  first note.  This is to ensure
          correct MIDI  timing.  A lead-in  bar  containing  an appropriate 
          number of  beats will  be inserted  at the start of the tune, and 
          therefore the  MIDI bar numbers  will be one greater than the bar
          numbers shown by Harmony.
          
          In accordance with common practice, the melody (HARMONY voice  1)
          is written to MIDI channel 4.

          The Generate Harmony option will also generate a voice file  (V0)
          containing  a  drum  voice.  This  can  be  edited like the other
          voices, but remember that the note is actually used to select  an
          instrument. Therefore Transpose does not touch voice 0.

          Default  drum  sound  is  placed in voice 1, and is only actioned
          when the harmony is regenerated. Other  instruments  are  defined
          within  the appropriate voice, and will have to be reentered when
          the harmony is generated.









                                  7. Bugs
                                  =======


          There are bound to be  SCORES  of  bugs  (sorry!)  in  a  complex
          program, containing over 10,000 lines of BASIC code. I would like
          to hear of any (via Email or post only,  please)  which  actually
          cause incorrect operation.

          My token Beta tester has not notified me of any, but that doesn't
          mean much, as I don't know whether he has actually tried it yet!


          Display
          -------
          I  KNOW  that  the  scoring facility is not perfect, and I do not
          require feedback about minor quirks in the display, such as notes
          overlapping.  I will continue working on the display.

          Chords
          ------
          I  also  know  that the generated harmony is not likely to be the
          best  possible,  but  I  would  like  to  hear  of  any  discords
          generated.  Please include the voice file in this case, so that I
          can  test  any  correction.   There  needs  to  be  more  work on
          fine-tuning the chord generation algorithm  by  running  a  large
          number of tunes through it.

          Transposing 
          -----------
          This can have strange effects on the score and the tune if you 
          use too big a step, or if notes go outside the defined range.

          Operating System
          ----------------
          The  program  is  designed  and  compiled  for  MS/DOS.  For some
          reason, it does NOT work with Norton DOS, as supplied with Norton
          Utilities. It WILL run in DOS session under WINDOWS 3.x.

          Hardware
          --------
          I cannot ensure that the program works on all hardware -  I  only
          have my own machine for development.



          Sharp/Flat  problem.
          ===================
          The program converts notes to an internal format, using a  number
          for  each  note, for all processing.  This can cause problems for
          Enharmonic equivalents, ie C#/Db, D#/Eb, Cb/B and so on,  because
          they generate the same number.  For a note within the scale being
          used,  this  is  no problem, but a note with an accidental may be
          wrongly reconverted for display or saving.

          The current version of the program will generate only flats  when
          the  key  signature  contains flats, and only sharps when the key
          signature contains sharps.

          Therefore you may enter, say C#, but have Db  displayed  instead.
          The  actual  note is the same, but it may mislead the experienced
          musician.  This is not  musically  correct,  but  mainly  affects
          Minor keys, which are not yet officially supported.

          The  program  needs  substantial changes to carry and reflect the
          ORIGINAL  accidental,  through   processing   and   also   during
          transposition. This will be done as soon as possible.







                                8. Samples
                                ==========

          All samples  provided  are  traditional  or  historical  tunes
          believed  to  be  in  the public domain. If we have mistakenly
          included any copyright tune, then we apologise in advance  and
          will withdraw it as soon as we are notified.


          JACK.SNG       Jack's Maggot - Old English dance tune

          SELL.SNG       Sellenger's Round - old English tune
                         (by William Byrd, I believe)

          BLARNEY.SNG    Blarney Pilgrim - an Irish Double Jig

          BJOKE.SNG      Black Joke - a Morris dance tune from Adderbury
                         Unusual bar structure: 6 bar 'A' music, 10 bar 'B'

          WHISKEY.SNG    Part of 'Whiskey in the jar' illustrating
                         the lyric facility.






                              9. Restrictions
                              ===============


          The number of notes  per  voice,  and  number  of  files  of  the
          selected  type  (ie  SNG  or  V1) per directory are restricted by
          available storage. The current  maximum  values  are  displayable
          from the menu. (500 notes per voice, 200 files) Only 100 bars are
          allowed.  These  values  are due to internal storage restrictions
          inherent in the DOS environment.

          Voices
          ------
          Only  5  voices are allowed at present, with voice 0 reserved for
          percussion.

          Keys
          -----
          The only explicitly supported keys  are  major  keys,  and  those
          based on a major key note row, such as Dorian and Aeolian modes.

          Support for minor keys may be added later if there is a demand.

          The  only  chords  which will be suggested are the main chords of
          the key ie I, II, IV, V, V7, VI, and the  less  often  used  III.
          Thus  for  the  key  of C, the chords generated would be selected
          from C, Dm, F, G, G7, Am, and Em.

          Only root positions and first inversions of chords are used.

          Tied notes are not yet implemented.

          Notes  in  the  screen are made up of horizontal ellipses, rather
          than slanted, because they are the  only  kind  provided  by  the
          language.  I wrote tilted ellipse subroutine in BASIC, but it was
          too slow. When we all have Pentiums, (is that the right  plural?)
          I may include it.

          Notation
          --------
          Only a subset of full musical notation is available.

          This is not intended to be a full scoring package (yet!) although
          it should handle many simple melodies.

          The  scoring and printing facilities are provided mainly in order
          to view the generated harmony, and may give unpredicable  results
          if used to view voice files which have been edited by hand.

          Some  notes  may  appear  on adjacent positions on the staff.  In
          standard notation, one of the notes will be reversed in order not
          to overlay the other.  These collisions are not yet  detected  or
          handled.

          If notes in voices 2 to 4 cross from the Bass clef to the  Treble
          clef,  perhaps  as  a  result  of transposing, the score may look
          incorrect.

          Notes in voice 0 will be shown as X's since they are percission.








                              10. Registration
                              ================


          This program is made available for a 30-day trial period.  If you
          wish to make use of it after that, you are requested to register.

          This is a moral AND  LEGAL  requirement,  although  it  would  be
          impracticable  to  enforce.   I  am  therefore  dependent on YOUR
          HONESTY. Creating this large and  complex  program  (about  8,000
          lines of code) took several months of effort, in return for which
          I ask only a nominal fee.

          "I  am  a struggling programmer/musician, with wife and family to
          support.  Please give generously...  I never reject a payment  of
          MORE than the requested fee."

          Registered  users  will  be provided with support and possibly an
          improved version. I have attempted  to  keep  to  the  spirit  of
          shareware, and do NOT issue crippled software.


          a) By COMPUSERVE (GO SWREG)

          This  is  the  preferred,  and for non-UK residents, the cheapest
          method.  The fee requested is $30. (approx UK pounds 20).  Please
          register the program under the name HARM03.ZIP.   This  saves  me
          having to update SWREG every time I release a new version!


          b) By post

          We  have to ask for an extra amount for non-UK residents, to help
          to cover the exorbitant bank handling charges.

          The fee requested is 20 pounds sterling if paying in UK currency,
          or $30 or equivalent in your local currency,  plus  $7  for  bank
          handling charges for all other currencies.






                               11. Feedback
                               ============

          I  would  like  to  hear  from  anyone  who  has  suggestions for
          improvement, whether registered or not.

          I would also be interested to hear  of  a  suitable  compiler  or
          library  which  will allow printing of graphics. I have looked at
          GrafWiz, but the version I found does not provide PAINT, nor  can
          you generate an arc of a circle or ellipse.

          I  am currently learning Visual Basic, and hope to have a Windows
          version available at a later date.









                             12. Future Plans
                             ================


          The  program  is  currently  adequate  for  my  own  needs,   but
          development will continue if enough registrations are received.

          Areas for potential enhancement include:

            Support for a wider range of chord types and for Minor keys

            Improved  score display and print, addition of demisemiquavers

            A  Windows  version.  I  would  like  to hear of any shareware
            TrueType music font.






          Subtunes
          --------
          Music often contains sub elements which are repeated at different
          places in the tune.  For example, in music for dancing, the tunes
          often have sections referred to as A music, B music, C music etc.

          A formula for playing a Morris dance may read

          1/2 A ( (AB2)2 (AC)2 )3

          which is interperted as
            Play half an A music  as  introduction ("Once to yourself")
            Play the following three times:
            Play  ( A music followed by (B  music  twice))  twice
            Play  ( A music followed by C music ) twice

          There are some which are much more complex than this!

          The  new phrase repeat facility allows you to implement this more
          concisely.







                           13. Acknowledgements
                           ====================

  Item                    Owner
  ====                    =====
  ACCU music system       Kevin Fischer, Member of ASP
  WINDOWS 3.x             MicroSoft
  QBASIC                  MicroSoft
  Visual Basic            MicroSoft
  HP Laserjet             Hewlett-Packard
  Pentium                 Intel
  General MIDI (GM)

  The print facility was made possible by hints found within
  David Schneider's 'Handbook of QuickBASIC' (ISBN 0-13-381880-2)
  (Second? edition, 1991)






                                Appendix A
                                ==========


          Song/Tune file definition
          -------------------------

          All song and tune files are plain ASCII text, and can  easily  be
          edited  using  the DOS EDIT command, or any text editor which can
          save ASCII files.

          A Tune file has a file extension of .SNG. It is used to hold  the
          tune name and a list of voice files present.

          Harmony  can  read tune files, but only uses them to get the tune
          name.  It does not need a .SNG file, but will generate  one  when
          saving a tune.

          Note that the ACCU MUSICSYS program requires a blank line as  the
          last line of the SNG file.

          ACCU Compatibility mode
          -----------------------

          A  save  command  is  available  which  removes from the file all
          elements which are not compatible with ACCU Musicsys.

          This will eliminate any triplets, beams joining quavers etc,  and
          the score spacing commands.


          Further incompatibilities with ACCU
          -----------------------------------

          ACCU Musicsys TEMPO command does not seem to work well with music
          in  6/8  and  9/8. In order for the music to be played at correct
          speed, the TEMPO must be doubled. HARMONY does  not  suffer  from
          this,   therefore  files  may  need  editing  before  using  with
          Musicsys.

          In fact, the TEMPO  does  not  seem  to  work  AT  ALL  with  the
          SB-SOUND.COM driver, but does with SOUND.COM






                                Appendix B
                                ==========

          Voice file definition
          ---------------------

          A  Musicsys  voice  file has a file extension of Vn where n is in
          the range 1 to 9. HARMONY only uses voices 1 to 4,  but  it  also
          allows  voice 0 for percussion. This is recognised and written to
          channel 10 when writing a MIDI file.

          V1 is always assumed by this program to contain the  melody,  and
          voices  V2  to V4 contain the generated accompaniment. Since they
          are saved as text files, they can be edited with any text editor.

          Each line (record) of the file contains either a note  definition
          or  a music command. DO NOT ADD EXTRA CHARACTERS, EVEN SPACES, TO
          A LINE, except after a ;

          Extensions not supported by ACCU Musicsys have,  where  possible,
          been implemented as ACCU comments, ie following a semicolon (;)

          Music Commands available are:

          CLEF=x        Music clef, x = T for treble, B for Bass.
                        N (Tenor), A (alto) S (soprano) are not supported.

          KEY=nx        Key, n = number, x = S for sharps, F for flats
                        Thus for the key of D, use KEY=2S. Default key is C
                        For C, use KEY=0S

          TIME=x/y      Time signature, eg 3/4 or 6/8
                        Default is 4/4

          TEMPO=nnn     Up  to 3 digits giving the tempo in beats/minute
                        as per metronome.  Default is 120
                        Harmony allows it in any voice, but ignores it except
                        in voice 1. (ACCU only allows int in voice 1)

          These will be displayed in the order in which  they  appear,  and
          the   order  show  above  is  recommmended  as  standard  musical
          practice. They can also be used at the start of  any  bar  within
          the tune.



          Bars, Lyrics and comments
          =========================

          INST=xxxxxx
                        Select  instrument.  If the named instrument is not
                        present in the selected bank  (.BNK)  file,  PIANO1
                        will  be  substituted. (Not ACCU compatible) It may
                        appear anywhere within the voice file, but will  be
                        actioned  only once, at the start of the tune.  You
                        cannot,  at  present,   change   to   a   different
                        instrument  later  within the tune.  Only the first
                        occurrence will be actioned.


          M***          New bar

          M*** ;>n
                        marks the start of a section of music to be  played
                        n times (2 to 9). If n is omitted, 2 is assumed.

          M*** ;<       marks  the  end  of a repeated section of music.

          M*** ;n       means play the bar only on the  'n'th  time
                        through. This will be reflected on the score.

                        Repeats can nested if required

          M*** ;=       generates a double bar line to mark the end
                        of a section without repeats

                        NOTE:
                        Bar/Measure numbers will NOT  be  incremented  when
                        the  following  command is ALSO a bar line, and the
                        current command is a ;< (end repeat)

          Q***          This ACCU command indicates the end of a  file.
                        It  is  currently  allowed  by  Harmony, but is not
                        essential.

          ;             indicates a comment. It can be used by itself on  a
                        line,  or  following a note definition, on the same
                        line.

          ;;            following a note definition in VOICE 1 ONLY,
                        indicates the word or part of word to be printed
                        (Lyrics) eg     D*4Q ;;New
                                        G*4E ;;York


          MIDI commands
          =============

          All MIDI-specific commands are prefixed by MIDI in cols  1-4  and
          affect  only  the  created .MID file. All may be abbreviated to 9
          characters before the '=' sign.

          The presence of any MIDI volume data in the file will inhibit the
          ACCU-style volume data (such as /F, /P)  present  on  any  notes,
          from that point on in the tune.

          MIDI INSTRUMENT=xxx/yyy
                        defines the current instrument for the voice
                        xxx is the MIDI program number
                        yyy is the bank number for bank select command
                            (optional)

                        It may appear more than once, at any point  in  the
                        tune,  and  will  be  actioned at that point in the
                        tune.

                        Default instrument is Piano (2).


          MIDI DRUM=xx
                        Drum  sounds  are  specified  in  MIDI  by the note
                        rather than a program. This command must be  placed
                        in  voice 1, and will be used to generate each note
                        in voice 0 when the harmony is regenerated. Range 0
                        to 84.

          MIDI MVOLUME=xxx   (Master volume)
                        specifies the volume for the rest  of  the  current
                        voice,   except   where   overidden  by  VOLUME  or
                        BARVOLUME. xxx is in range 0 to 127

          MIDI BARVOLUME=xxx
                        specifies the volume for the rest  of  the  current
                        bar,  except  where  overidden by VOLUME. xxx is in
                        range 0 to 127

          MIDI VOLUME=xxx
          MIDI VOLUME=xxx/yyy
                        specifies the volume for the next note only xxx and
                        yyy are in range 0 to 127

                        The volume of the note will start at xxx. If yyy is
                        specified  (and  nonzero),  then  the note's volume
                        will be adjusted in a linear fashion, up  or  down,
                        to end at yyy.

          MIDI CONTROL=xxx/yyy
                        xxx  is control number
                        yyy  is control data

          The following MIDI functions are not currently implemented:
             System Exclusive, Pitch Wheel, Tune request,
             Song select, Song position

          The following MIDI functions will not be implemented, as they
          are not compatible with the voice file system
             Key pressure, Poly Key pressure, Quarter frame, Sample dump







          Score appearance
          ================

          @             is a spacing command  (NOT  supported  by  ACCU)
                        which  allows  you  to  adjust  the  spacing of the
                        displayed score, particularly  when  it  is  to  be
                        printed.   It  inserts one horizontal spacing unit,
                        the size of which depends on the font size.  It can
                        also be followed by up  to  two  digits,  thus  @12
                        inserts 12 spacing units.

                        For  reference,  the  width  of  a  crotchet is two
                        spacing units.

          @P            is similar, but spaces by pixels, thus @P3 would
                        insert  a  3-pixel  space.   This is for fine
                        adjustments to the score. A negative number can
                        be used to close up the spacing when necessary.
                        (This is an ABSOLUTE adjustment, NOT scaleable)

          @S            defines an overall spacing adjustment in pixels, to
                        be used for the rest of the tune. A negative number
                        can be used to close up the spacing when necessary.
                        (This is an ABSOLUTE adjustment, NOT scaleable)

          @F            Forces a new line. This can be required when a  bar
                        containing  joined notes spreads over two lines. It
                        should ONLY be used at the start of a bar.

                        If @ commands are  placed  in  Voice  1,  then  the
                        harmony should be regenerated afterwards, otherwise
                        it  may not be displayed correctly. This is because
                        the Chord symbols are linked to voice 1.

                        They may be placed in other voices, but would  then
                        be  lost  if  the harmony were regenerated, because
                        voices 2 to 4 are then totally cleared first. Also,
                        if placed in Voices 2 to 4, they will not have  any
                        effect when displaying just the melody.



          Note Definitions
          ----------------

          A note definition must specify the  pitch  and  duration  of  the
          note.

          The  pitch is specified by the first 3 characters, which give the
          note name, any accidental  (sharp,  flat  or  natural),  and  the
          octave number

          The duration is specified by character 4, and sometimes 5.

          The note name can be A, B, C, D, E, F, G or R (rest). If the note
          belongs  to  the current key, then the second character is *. The
          second character can also be S (sharp) F (Flat) or N (Natural)

          The octave number is a digit in the range 1  to  7.  Octaves  run
          from C to B, thus note 1 of octave 1 is C, note 12 of octave 1 is
          B. The total range allowed by this system of notation, as well as
          by  the  normal  BASIC PLAY command, is seven octaves, notes 1 to
          84.

          The volume of the note can be specified by a / followed by suffix
          P, PP, PPP, MP, F, FF, FFF or MF. These  are  only  effective  in
          generated MIDI files, and are not yet printed on the score.

          The  ACCU  MUSIC SYSTEM also allows T, to indicate Tied.  This is
          allowed, but ignored, by Harmony.

          Beams
          =====

          Groups of quavers and semiquavers in the same phrase of music are
          usually shown joined together with 'beams'. This  is  purely  for
          display, and has no effect on the sound of the music.

          HARMONY  allows  commands  J  or  K  to  be  added to a quaver or
          semiquaver definition. J will cause a note to be  joined  to  the
          following  note,  K  indicates  the  LAST  note  of a group to be
          joined. (Quavers may be joined to semiquavers  and  vice  versa.)
          See tune BJOKE for examples.



          Triplets and similar constructs
          ===============================

          A  triplet  is  a  group  of  three  notes,  usually  quavers  or
          semiquavers, played in the time usually taken for two notes. This
          is often seen in hornpipes, and sometimes in reels.

          Similarly, you can have a group of 4 notes played in the time  of
          3, found occasionally in jigs.

          The  ACCU  Music  system  does  not  provide facilities for these
          groupings. HARMONY provides an extension of the method  used  for
          beams.   J3  and  K3 indicate that the group of joined notes is a
          triplet, and J4 and K4 indicate a quadruplet.

          Some music also specifies 2 quavers to be played in the time  for
          3  (particularly  in  the 'Slows' in Morris dancing). There is no
          need for a special notation, as two dotted quavers  can  be  used
          instead.

          Triplets  will  play  correctly  on  a sound card, but due to the
          limitations of the BASIC PLAY command, may not sound quite  right
          when played on the PC speaker.

          Files containing these definitions will NOT be acceptable to ACCU
          MUSICSYS.

          Note that end of a bar forces the end of a group of joined notes.






                                Appendix C
                                ==========


          Chord and Harmony files
          -----------------------
          HARMONY  generates  a separate file, with extension .CHD, for the
          generated chord  symbols.   It  also  writes  a  text  file  with
          extension  HAR,  containing  the three best chords as well as the
          weightings assigned to them.  You can  examine  this  and  decide
          whether to change the automatically generated chords.

          It also indicates the type of chord generated, using the standard
          Roman numerals, plus a letter (a,b,c) to indicate which inversion
          it is.

          Thus Ib is the first inversion of the Tonic chord, and V7a is the
          root position of the dominant 7th.  HARMONY does not get generate
          second inversions, as the use of these is more restricted.







                                Appendix D
                                ==========


          Technical details
          -----------------


          This program is written in BASIC, and was compiled  by  MicroSoft
          QuickBASIC V 4.5. It also includes some routines in 'C' to handle
          file and directory lists.

          All  notes  and  some  digits have had to be composed from lines,
          circles and arcs!  That explains the peculiar font used  for  the
          time  signature,  but at least it can be scaled. Most letters are
          taken from the system EGA and VGA fonts.

          If  anyone would like me to release the subroutines for the score
          display as a library, please let me know.






                                Appendix E
                                ==========


          History
          =======

          Changes in version 7a
          ---------------------
          MIDI file generation corrected. Previously, all notes were given
          double the proper length. Sounded ok if you speeded it up, though.
          
          Changes in version 7
          --------------------

          Melodeon tablature  removed  to  a  new  progam  MELTAB,  because
          program  was running out of string space. QB 4.5 only allows 64kb
          of strings per module.

          MIDI file creation facility added, with new voice file  commands.
          Note that MIDI files implement all conditional bars and repeats.

          New  program  READMID  to  read MIDI files, and write a text file
          containing a description of their contents

          (For registered users, further MIDI file utilities)

          Drum voice added (for MIDI only) with pattern fill facility.

          Conditional bars and repeats also added to sound card playback

          More tuning of the chord generation  weightings,  to  reduce  the
          frequency of the IIIm chord.

          The juggler slows the program down. You can zap it by pressing  J
          when  it is active. This will stay in effect until the program is
          reloaded.

          Improvements to the print appearance:
             DOS System fonts now used
             Tilted notes used when printing
             Overall spacing adjustment facility added

          A bit of tinkering with the Menu, to add further information

          Changes in version 6
          --------------------
          Print facility added - only HP laserjet so far.

          Lyric facility added - one line only, from voice 1

          One  Instrument  may be specified for each voice, and a pick list
          is provided from the BNK file.

          Bar options enhanced. Nested repeats, conditional bars  added  to
          score,  and  to  playback on PC speaker.  (Not yet implemented in
          PLAY on sound card, nor Play with Score)

          Better screen fonts - the VGA and EGA system fonts are used

          EGA displays now supported

          New option on Transpose menu, to transpose whole tune.  This  may
          cause  problems with the score, if voices 2,3 or 4 cross into the
          treble clef.

          Improved menu - does not always return to the top bar

          Better look-ahead reduces the chance of incorrect display

          Some diagnostic displays removed

          File selection no longer needs to write to disk,  as  it  is  now
          done by using DOS calls instead of reading a DIR list

          Many minor bugs eliminated.

          Changes in version 5 (never uploaded to Compuserve)
          --------------------
          Bug  fix in the Chord Generation algorithm, which would sometimes
          generate the wrong chord.

          Beams joining quavers to semiquavers corrected.

          New facilities in Version 4
          ---------------------------
          SOUND CARD SUPPORT ADDED

             Includes    selection of sound bank file
                         selection of voices.

             Note  that  playing  on  the  sound  card  does  NOT currently
             implement repeats as displayed.

          Generation of random tunes in selected style

             This is just for fun, and no claim is made that the  generated
             tunes will be usable!

          Transpose to specified key

          Display selected voice

          Chord options added. You can now choose how many chords to put to
          a bar, as well as an option to generate one for each melody note.

          Number of joined notes allowed in a group increased to 12.

          New  display  command @F forces a new line, sometimes needed when
          joined phrases cannot be fitted onto current line.

          Other minor improvements to score display, eg larger treble  clef
          sign.

          Stack  size  increased  to  prevent  stack overflow, which caused
          lock-up of the machine.

          Changes in version 3
          --------------------
          Quavers can now be joined to semiquavers with beams

          Generation of harmony improved. The  previous  version  sometimes
          generated a Dominant 7th in inappropriate places.

          Use of Pg Up & Pg Dn keys added to pick lists

          Selection letters added to pick lists

          Support for ACCU format comments, using command ;

          'Play  voice'  option now implements repeats, shown by double bar
          lines

          Tablature for melodeon, anglo concertina added

          Display spacing command @ added

          Editable chord display improved

          New compatibility mode allows you  to  save  an  ACCU  compatible
          file, by removing all HARMONY extensions from the data.

          SOUND option removed from menu - it was not implemented anyway

          Some characters refined, score spacing improved

          Key signatures for 5 and 6 flats in bass clef corrected







                       Appendix F - About the Author
                       =============================

          I have been an  amateur  folk  musician  since  1970.  I  play
          Melodeon  (D/G),  30  key Anglo Concertina, Harmonica, Guitar,
          Bodhran

          Musician for Dubai-Sharjah Morris Dancers (UAE) 1979-82

          Member of groups Ratcliffe Highway and Unadopted Woad in Dubai
          1979-82

          Founder,  Musician  and  Dancer  with  Luxembourg Morris 1983-4

          Dancer and musician with Men of Sweyn's Ey Morris
          (Swansea, Wales) 1994-5

          Musician with Dwy Droed Chwith (Welsh Clog dancers) 1994-5

          Member of "Five Bar Gait" Ceilidh Band 1994-5

          I intend to make as many Morris Dance tunes as possible available
          for  use with Harmony.  This is a slow process, because there are
          over  250 tunes and variants!  I have included just one with this
          package. For Morris enthusiasts, there are now several Web  pages
          on the tradition, including some with tunes to download, but in a
          different notation.

          Tunes will be uploaded separately from HARMONY, so that I can
          add to them more easily.







                       Appendix G - Using under WINDOWS
                       ================================


          The program has been developed and tested in DOS  sessions  under
          WINDOWS 3.1.

          If  it  runs  slowly, you may wish to try inserting the following
          line under [386Enh] in SYSTEM.INI (See Windows READ.ME file)

          TrapTimerPorts=Off

          This is not advised if you are running Comms programs, or you may
          lose data.
