MINSTREL

by J.W. Casson

from ZX Computing Oct/Nov.1984



Budding Beethovens begin here with Lancastrian

J W Casson's 16K computer composer program.





Although limited, this program will provide plenty of scope

for creative musicians to write and. play melodies of the

kind usually played on flute, tin whistle etc.



The two biggest limitations are:



1. You can only play one note at a time; and

2. You cannot play slurred notes (due to the first limitation).



Perhaps readers with sound boxes and 48K machines can adapt

the program to overcome these problems. However, the main

purpose of the program is to allow musical input into any

Spectrum using standard musical notation.





Operation



* KEY - To tell the computer which note to play - sharp or

flat. The computer will first ask "Sharps?" and expect to

enter, one by one, the letters of the notes to be played

sharp or, if none, just press ENTER.



Next the computer will ask "Flats?" and expect the letters

of the notes which it must play flat, again press ENTER if

there are none.



* TIME SIGNATURE - To tell the computer how many beats there

are in a bar.



When playing the tune the first note in each bar is played

slightly longer than it's written value to emphasise the

note. After the key inputs have been completed the computer

will prompt "Time as a fraction". Enter the required time,

3/4 for a waltz, 3/8 for a jig, 4/4 for com- mon time etc.

The screen should now look like fig. 1.



* CHARACTER SELECT - The musical characters of the tune can

now be entered, the options are:



REST        - a period of silence

FLAT NOTE   - a note 1 semitone below key note

NOTE        - a note played as written in the key

SHARP NOTE  - a note 1 semitone above key note



Normally the NOTE flag will flash.



All the options can only be selected from the NOTE mode, to

select REST hold R until the indicator flashes, to get back

to NOTE mode from REST hold key N.



To select SHARP or FLAT hold down S or F as required, to

cancel these hold down the opposite key to the option in

force; ie. if in Sharp mode hold key F to cancel.



* DURATION is selected by moving the duration cursor by

using the 6 and 7 keys to move it up and down the menu. When

the correct duration has been chosen press enter. If the

character is a REST then it will be drawn and the computer

returns to character select mode.



* PITCH selection - a cursor will now appear by the side of

the stave and this can be moved up and down again by using

the 6 and 7 keys until you reach the position you require.

When you press ENTER the correct note will be drawn in

position on the stave and the computer will return to

character select mode.



While in the character select mode you also have the

following options:



"P" Play tune from start to finish.



"K + number" List from note of the number given to finish



CAPS + "0" Delete the last note entered.



When in PITCH select you can press "D" to return to

character select mode.





Entering the program



The machine code to scroll the stave left must be entered

first, this is held in a line 1 REM and the REM must be

followed by 32 characters. [The printed listing expects only

31 bytes for the machine code (9900 FOR n=0 TO 30) - and

there are only 27 bytes in the DATA statement! JimG.] Enter

the short scroll left program and RUN it. To check that it

works type: PRINT AT 9,10;"ABC": FOR i=1 TO 9: RANDOMIZE USR

sc: NEXT I and press ENTER; the letters ABC should appear

and move to the left. If all is OK then delete one by one

lines 2, 9900, 9910, and 9920 - DO NOT REMOVE LINE 1! If it

doesn't work check the program - especially the DATA - and

re-run and check.



Now enter the main listing and let loose your musical

talent.





Program notes



1          USR machine code routine to scroll the centre

           of the screen (lines 8-15) left

2-160      Initialise variables, set Caps Lock on

300-370    Character input loop

400-490    Pitch select input loop

500-550    Draw note, scroll screen left

1000-1230  Input sharps, flat and time sig.

1500-1509  Draw start of stave & treble clef

1510-1541  Draw lines of stave

2010-2500  Compile tune into beeps and pauses

2500-2530  Play tune

3000-3099  Coordinates for drawing rests, notes, bar lines, etc.

4000-4060  Draw Rest, scroll left

8500-9000  Coordinates listing of tune

9000-9560  Draw note/rest subroutines





Variables



Tim      - No. of whole notes in a bar

BA       - No. of whole notes currently in the bar

T(4,100) - Contains tune data as follows:

T(1,100) - Note or rest type and

T(2,100) - Pitch of note - both as entered by the operator

T(3,100) - Actual note or rest length and

T(4,100) - Actual pitch of note - both as compiled

N(1,19)  - Data to convert number to beep statement

S$(100)  - Control characters - Sharps, flats and barlines

R        - Rest binary variable

S        - Sharp binary variable

F        - Flat binary' variable

L        - Points to current character

C        - Cursor variable

FN I     - Converts INKEY$ to var. C

FN B     - Converts note type to duration of beep

FN P     - Converts T(2,L) to screen coordinate





--

Another Fine Product transcribed by:

Jim Grimwood (jimg@globalnet.co.uk), Weardale, England

--

