
With eight different variables to modify and test, the BEEP command on the Sinclair QL can be a bit difficult to master. When I needed some special sounds for a game I was writing, it became obvious that typing in a long list of BEEP commands for testing was a long and tedious job. So, I stopped writing the program long enough to design a special program that would allow me to explore the full range of the QL sound capabilities.
Thus was QL SOUND EXPLORER born. Besides being an easy method of designing and testing various sounds, it also turned out to be fun.
The program uses two types of input keys, called only by pressing the proper key (the ENTER key need never be pressed). The command keys call various program commands, and the variable control keys control each of the eight QL BEEP variables.
Once the program is booted (it tells you by “sounding off”), use the variable control keys (1 to 8) to set the BEEP values you desire, and press “t” to test the result. The lower window will, in the test mode, display the correct SuperBASIC line for entry into your program. Pressing “P” will send this line to your printer.
Any of the included demos can be used as starting points for your own sounds if you wish. Or, if you wish to start fresh, simply press “c” to clear all the variables and refresh the memory.
If you don’t arrive at the perfect sound the first time, just press “b” to turn off the sound (if your QL is still “sounding off), and modify your variables.
As soon as you discover the proper formula for the sound you desire, print out or write down the SuperBASIC line for future reference. Trying to arrive at exactly the same sound later is not as easy as it may appear.
Remember that the ESC (escape) key is valid. Pressing it will exit the program, though you may not be able to see the cursor. If you unintentionally press ESC or break the program, simply enter “GO TO 10”.
If you don’t wish to type in this listing, the program is available from: RMG Enterprises, 1419 1/2 7th St., Oregon City, OR 97045.

The Command Keys…
M - Displays the remaining memory C - Clears the Variables/Refreshes memory P - Prints the Basic Command line T - Tests the current BEEP values B - Turns off the current test A - Plays Demo "engine idle" S - Plays Demo "engine rev" D - Plays Demo "arcade sounds" F - Plays Demo "QL jig" G - Plays Demo "phasor fire" H - Plays Demo "stalking spook" J - Plays Demo "British police" K - Plays Demo "frightened heart" L - Plays Demo "unknown melody"
The Variable Control Keys…
1 - Controls DURATION : 1 = up by 10. CTRL/1 = up by 100. SHIFT/1 = down by 100.
CTRL/SHIFT/1 = down by 100.
2 - Controls PITCH 1 : 2 = up by 1. SHIFT/2 = down by 1
3 - Controls PITCH 2 : 3 = up by 1. SHIFT/3 = down by 1.
4 - Controls GRAD_X : 4 = up by 10. CTRL/4 = up by 100. SHIFT/4 = down by 10.
CTRL/SHIFT/4 = down by 100.
5 - Controls GRAD_Y : 5 = up by 1. SHIFT/5 = down by 1.
6 - Controls WRAP : 6 = up by 1. SHIFT/6 = down by 1.
7 - Controls FUZZY : 7 = up by 1. SHIFT/7 = down by 1.
8 - Controls RANDOM : 8 = up by 1. SHIFT/8 = down by 1.
10 LET p2=0:LET p3=1:LET p4=29:LET
p5=1000
15 LET p6=3:LET p7=0:LET p8=0:LET p
9=0
20 init
25 disp
30 key
35 GO TO 30
40 DEFine PROCedure key
45 LET k=CODE(INKEY$(-1))
50 read_key
55 GO TO 30
60 END DEFine
65 DEFine PROCedure init
70 LET a=6
75 WINDOW #1,512,204,0,0
80 PAPER #1,0:INK #1,7
85 BORDER #1,2,7,2:CLS #1
90 WINDOW #0,512,50,0,205
95 PAPER #0,5,7:INK #0,0
100 BORDER #0,3,0,5:CLS #0
105 PRINT #0,,,," ";
110 PAPER #0,5:PRINT #0;" > EXECUTI
VE SOUND EXPLORER < ":PAPER #0,5,7
115 PRINT #0,,,"COPYRIGHT 1987 - EX
ECUTIVE WORKSHOP - PORTLAND, OREGON
":PRINT ,,," ";
120 PAPER #1,5,7:INK #1,0:PRINT">>>
> CURRENT QL BEEP VALUES <<<<":PAPE
R #1,0:INK #1,7
125 PRINT ,"1-DURATION",,,,"2-PI
TCH"
130 PRINT ,"3-PITCH 2",,,,"4-GRAD
_X"
135 PRINT ,"5-GRAD_Y",,,,"6-WRAP"
140 PRINT,"7-FUZZY",,,,,"8-RANDOM
"
145 WINDOW #2,45,12,118,60
150 PAPER #2,0:INK #2,7
155 BORDER #2,1,5:CLS #2
160 OPEN #3,con
165 WINDOW #3,45,12,345,60
170 PAPER #3,0:INK #3,7
175 BORDER #3,1,5:CLS#3
180 OPEN #4,con
185 WINDOW #4,45,12,118,90
190 PAPER #4,0:INK #4,7
195 BORDER #4,1,5:CLS #4
200 OPEN #5,con
205 WINDOW #5,45,12,345,90
210 PAPER #5,0:INK #5,7
215 BORDER #5,1,5:CLS #5
220 OPEN #6,con
225 WINDOW #6,45,12,118,120
230 PAPER #6,0:INK #6,7
235 BORDER #6,1,5:CLS #6
240 OPEN #7,con
245 WINDOW #7,45,12,345,120
250 PAPER #7,0:INK #7,7
255 BORDER #7,1,5:CLS #7
260 OPEN #8,con
265 WINDOW #8,45,12,118,150
270 PAPER #8,0:INK #8,7
275 BORDER #8,1,5:CLS #8
280 OPEN #9,con
285 WINDOW #9,45,12,345,150
290 PAPER #9,0:INK #9,7
295 BORDER #9,1,5:CLS #9
300 PRINT " BASIC LINE TO READ:
BEEP "
305 OPEN #10,con
310 WINDOW #10,340,12,162,180
315 PAPER #10,0:INK #10,7
320 BORDER #10,1,2:CLS #10
325 BEEP p2,p3,p4,p5,p6,p7,p8,p9
330 PAUSE 150
335 BEEP
340 END DEFine
345 DEFine PROCedure t
350 disp
355 BEEP p2,p3,p4,p5,p6,p7,p8,p9
360 key
365 END DEFine
370 DEFine PROCedure b
375 BEEP
380 key
385 END DEFine
390 DEFine PROCedure read_key
395 SELect ON k
400 =116:t
405 =112:up_d:prt
410 =99:cler
415 =106:d7
420 =104:d6
425 =97:d1
430 =115:d2
435 =100:d3
440 =102:d4
445 =103:d5
450 =107:d8
455 =108:d9
460 =109:mem
465 =98:b
470 =49:CLS#2:IF p2<32757:LET p2=p2
+10:END IF :LET p2$=p2:AT #2,0,a-(L
EN(p2$)):PRINT #2;p2$:key
475 =33:CLS#2:IF p2>-32757:LET p2=p
2-10:END IF :LET p2$=p2:AT #2,0,a-(
LEN(p2$)):PRINT #2;p2$:key
480 =145:CLS#2:IF p2<32667:LET p2=p
2+100:END IF :LET p2$=p2:AT #2,0,a-
(LEN(p2$)):PRINT #2;p2$:key
485 =129:CLS#2:IF p2>-32667:LET p2=
p2-100:END IF :LET p2$=p2:AT #2,0,a
-(LEN(p2$)):PRINT #2;p2$:key
490 =50:CLS#3:IF p3<255:LET p3=p3+1
:END IF :LET p3$=p3:AT #3,0,a-(LEN(
p3$)):PRINT #3;p3$:key
495 =64:CLS#3:IF p3>0:LET p3=p3-1:E
ND IF :LET p3$=p3:AT #3,0,a-(LEN(p3
$)):PRINT #3;p3$:key
500 =51:CLS#4:IF p4<255:LET p4=p4+1
:END IF :LET p4$=p4:AT #4,0,a-(LEN(
p4$)):PRINT #4;p4$:key
505 =35:CLS#4:IF p4>0:LET p4=p4-1:E
ND IF :LET p4$=p4:AT #4,0,a-(LEN(p4
$)):PRINT #4;p4$:key
510 =52:CLS#5:IF p5<32757:LET p5=p5
+10:END IF :LET p5$=p5:AT #5,0,a-(L
EN(p5$)):PRINT #5;p5$:key
515 =36:CLS#5:IF p5>-32758:LET p5=p
5-10:END IF :LET p5$=p5:AT #5,0,a-(
LEN(p5$)):PRINT #5;p5$:key
520 =148:CLS#5:IF p5<32657:LET p5=p
5+100:END IF :LET p5$=p5:AT #5,0,a-
(LEN(p5$)):PRINT #5;p5$:key
525 =132:CLS #5:IF p5>-32657:LET p5
=p5-100:END IF :LET p5$=p5:AT #5,0,
a-(LEN(p5$)):PRINT #5;p5$:key
530 =53:CLS#6:IF p6<7:LET p6=p6+1:E
ND IF :LET p6$=p6:AT #6,0,a-(LEN(p6
$)):PRINT #6;p6$:key
535 =37:CLS#6:IF p6>-8:LET p6=p6-1:
END IF :LET p6$=p6:AT #6,0,a-(LEN(p
6$)):PRINT #6;p6$:key
540 =54:CLS#7:IF p7<15:LET p7=p7+1:
END IF :LET p7$=p7:AT #7,0,a-(LEN(p
7$)):PRINT #7;p7$:key
545 =94:CLS#7:IF p7>0:LET p7=p7-1:E
ND IF :LET p7$=p7:AT #7,0,a-(LEN(p7
$)):PRINT #7;p7$:key
550 =55:CLS#8:IF p8<15:LET p8=p8+1:
END IF :LET p8$=p8:AT #8,0,a-(LEN(p
8$)):PRINT #8;p8$:key
555 =38:CLS#8:IF p8>0:LET p8=p8-1:E
ND IF :LET p8$=p8:AT #8,0,a-(LEN(p8
$)):PRINT #8;p8$:key
560 =56:CLS#9:IF p9<15:LET p9=p9+1:
END IF :LET p9$=p9:AT #9,0,a-(LEN(p
9$)):PRINT #9;p9$:key
565 =42:CLS#9:IF p9>0:LET p9=p9-1:E
ND IF :LET p9$=p9:AT #9,0,a-(LEN(p9
$)):PRINT #9;p9$:key
570 =27:finish
575 =REMAINDER :key
580 END SELect
585 DEFine PROCedure finish
590 STOP
595 END DEFine
600 DEFine PROCedure mem
605 CLS#10:INK #10,5:PRINT #10;" -
- AVAILABLE MEMORY - ";PEEK_L(1638
56)-PEEK_L(163852);" --":INK #10,7
610 key
615 END DEFine
620 DEFine PROCedure disp
625 LET p2$=p2
630 CLS#2:AT #2,0,a-(LEN(p2$)):PRIN
T #2;p2$
635 LET p3$=p3
640 CLS#3:AT #3,0,a-(LEN(p3$)):PRIN
T #3;p3$
645 LET p4$=p4
650 CLS#4:AT #4,0,a-(LEN(p4$)):PRIN
T #4;p4$
655 LET p5$=p5
660 CLS#5:AT #5,0,a-(LEN (p5$)):PRI
NT #5;p5$
665 LET p6$=p6
670 CLS#6:AT #6,0,a-(LEN(p6$)):PRIN
T #6;p6$
675 LET p7$=p7
680 CLS#7:AT #7,0,a-(LEN(p7$)):PRIN
T #7;p7$
685 LET p8$=p8
690 CLS#8:AT #8,0,a-(LEN(p8$)):PRIN
T #8;p8$
695 LET p9$=p9
700 CLS#9:AT #9,0,a-(LEN(p9$)):PRIN
T #9;p9$
705 up_d
710 END DEFine
715 DEFine PROCedure d1
720 LET p2=0:letp3=0:LET p4=0:LET p
5=0
725 LET p6=3:LET p7=0:LET p8=15:LET
p9=0
730 up_d:t
735 key
740 END DEFine
745 DEFine PROCedure d2
750 LET p2=0:LET p3=255:LET p4=125:
LET p5=1300
755 LET p6=0:LET p7=0:LET p8=0:LET
p9=0
760 up_d:t
765 key
770 END DEFine
775 DEFine PROCedure d3
780 LET p2=0:LET p3=255:LET p4=10:L
ET p5=700
785 LET p6=2:LET p7=8:LET p8=0:LET
p9=0
790 up_d:t
795 key
800 END DEFine
805 DEFine PROCedure d4
810 LET p2=0:LET p3=255:LET p4=5:LE
T p5=3000
815 LET p6=2:LET p7=5:LET p8=0:LET
p9=0
820 up_d:t
825 key
830 END DEFine
835 DEFine PROCedure d5
840 LET p2=0:LET p3=0:LET p4=75:LET
p5=200
845 LET p6=1:LET p7=10:LET p8=0:LET
p9=0
850 up_d:t
855 key
860 END DEFine
865 DEFine PROCedure d6
870 LET p2=0:LET p3=175:LET p4=80:L
ET p5=10000
875 LET p6=3:LET p7=3:LET p8=0:LET
p9=0
880 up_d:t
885 key
890 END DEFine
895 DEFine PROCedure d7
900 LET p2=0:LET p3=3:LET p4=0:LET
p5=7500
905 LET p6=6:LET p7=0:LET p8=0:LET
p9=0
910 up_d:t
915 key
920 END DEFine
925 DEFine PROCedure d8
930 LET p2=0:LET p3=255:LET p4=250:
LET p5=0
935 LET p6=7:LET p7=1:LET p8=2:LET
p9=0
940 up_d:t
945 key
950 END DEFine
955 DEFine PROCedure d9
960 LET p2=0:LET p3=36:LET p4=53:LE
T p5=2500
965 LET p6=7:LET p7=4:LET p8=0:LET
p9=0
970 up_d:t
975 key
980 END DEFine
985 DEFine PROCedure cler
990 CLEAR
995 LET a=6
1000 LET p2=0:LET p3=0:LET p4=0:LET
p5=0
1005 LET p6=0:LET p7=0:LET p8=0:LET
p9=0
1010 LET p2$=p2:LET p3$=p3:LET p4$=
p4:LET p5$=p5
1015 LET p6$=p6:LET p7$=p7:LET p8$=
p8:LET p9$=p9
1020 INK #10,2:PRINT #10;" -- VAR
IABLES CLEARED --":INK #10,7
1025 BEEP 0,3,1,550,0,0,0,0
1030 PAUSE 45
1035 BEEP
1040 disp
1045 key
1050 END DEFine
1055 DEFine PROCedure up_d
1060 LET p2$=p2:LET p3$=p3:LET p4$=
p4:LET p5$=p5
1065 LET p6$=p6:LET p7$=p7:LET p8$=
p8:LET p9$=p9
1070 LET pf$=p2$&","&p3$&","&p4$&",
"&p5$&","&p6$&","&p7$&","&p8$&","&p
9$
1075 CLS#10:PRINT #10,pf$
1080 END DEFine
1085 DEFine PROCedure prt
1090 OPEN #11,ser
1095 PRINT #11,"SuperBASIC line to
read - BEEP ";pf$
1100 CLOSE #11
1105 key
1110 END DEFine
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.