Gary Herman turns a BBC-B into a keyboard and throws in some echoes for free
Echo and reverberation are not just musical spice or a garnish on the work produced by synthesists and computer musicians. On the contrary, they are integral to tone quality. The most basic kinds of electronic instruments often sound soulless and mechanical without reverb — tones jar and do not blend well with other instruments, transitions from note to note are jerky.
This programme essentially demonstrates the quality of reverb by adding it to simple monophonic sounds produced by the BBC computer. With varying degrees of reverb, the user can simulate audible echo, phasing, staccato and pizzicato. A moderate amount of reverb simply adds depth and body to the tones produced.
The programme is entirely self-contained — music being produced from the BBC's internal loudspeaker — unfortunately, the BBC has no audio output socket. The programme converts the computer into a real-time synthesizer — the keyboard being formed from the top two rows of character keys with 'TAB' as B below middle C, 'Q' as middle C, '2' as C sharp and so on up to '_' (A). The top row of keys (excluding '1', '4', '8' and '-') are black notes.
The red function keys allow you to change reverb parameters while playing: f1 and f1 increasing and decreasing 'delay'; f2 and f3 increasing and decreasing 'number of cycles'; f4 and f5 increasing and decreasing 'note duration'; and f6 to f9 increasing and decreasing 'decay constant'. These parameters are changed by playing a note while pressing the relevant function key. The figures are displayed on the screen.
The keyboard scale can be changed by altering the value of the variable BASE in line 20 — a feature which can be used to 'tune' the computer. The basic envelope of the notes is set by entering figures for peak amplitude (MAXVOL), sustain amplitude level (SUSVOL), attack-decay constant (AD) and sustain-release constant (SR). I have had to compromise with these parameters, which do not fully exploit the complexity of the BBC's envelope generating facility. The compromise seems to work and a little practice should reveal its quirks. The programme also asks whether you want to turn off the BBC's keyboard repeat feature or not (although this may not seem to make a big difference it does have an effect) and asks you if you want to use simple or complex envelopes — which brings us to an essential point.
Echo and reverb are complex phenomena. It would be possible and relatively easy just to play a note and repeat it after a given time interval. In fact, computers using programmable sound generators (PSGs) are ideally suited to such simple repetition. However, the effect would be unconvincing. 'Real' reverb involves variable delays, variable rates of decay for each echo and variable numbers of repetitions. It also involves subtle changes in tone quality between the original sound and its echoes. Once again, I've compromised by introducing the option of using 'complex' envelopes — which actually means using three slightly different envelopes (see lines 550 to 590). You might be able to achieve better results by altering the envelope parameters in lines 570 and 580. Then there is DELAY (see lines 330 and 350) which controls the interval between the three primary occurrences of the played note. The number of cycles (variable REPT) controls the number of times these three are repeated (see the FOR...NEXT loop in lines 300 and 380) — this is rather like setting the number of heads on tape delay system while DELAY sets their distance apart. The decay constant (variable K) effectively sets the rate at which the sound decays between cycles (see line 370) and note stretch (variable DUR) is the same as the BBC's envelope duration parameter (it specifies the length of each step in the envelope in hundredths of a second). Once again, a little experimentation in the handling of these variables might be worthwhile — as it stands, the programme is the result of only so much trial and error. Some trial inputs to this programme are given in the table below:
Trial Input examples
DELAY:
16
2
64
4
1
8
1
NUMBER OF CYCLES: 2
2
1
4
2
4
2
1
NOTE STRETCH: 6
10
4
2
3
6
12
1
DECAY CONSTANT: 2
.5
1
1.1
4
1.1
1.2
1
MAXVOL: 126
126
126
126
126
100
100
100
SUSVOL: 0
0
0
126
0
100
126
126
AD: 64
110
119
0
124
100
126
126
SR: 64
0
0
0
0
100
0
4
(All the above used complex envelopes and no key repeat.)
Reverb Program Listing
10 REM REVERB KEYBOARD BBC COPYRIGHTG. HERMAN 1983
20 MODE4:DIMA(23):BASE = 45:L = 1: M = 2:N = 3(*FX11,50)
30 FORX=1 TO 23:READ P:A(X)= P:NEXT
40 INPUT "DELAY: "DELAY
50 INPUT "NUMBER OF CYCLES:"REPT
60 INPUT "NOTE STRETCH: "DUR
70 INPUT "DECAY CONSTANT: "K
80 PRINT
90 INPUT "MAXVOL: "V
100 INPUT "SUSVOL: "S
110 INPUT"AD:"AD
120 INPUT "SR:"SR
130 PRINT
140 INPUT "SIMPLE(S) OR COMPLEX(C) ENVELOPES: "$
150 IF A$ = "C" THEN 170
160 M = 1 :N = 1
170 INPUT "REPEAT KEYS (YOR N): ",B$
180 IF B$ = "N" THEN *FX11,0
190 PRINT TAB (8,0); DELAY; "
200 PRINTTAB(18,1); REPT; "
210 PRINTTAB(14, 2); DUR; "
220 PRINT TAB (16, 3); K; "
230 PLAY = 240
240 FREQ = - 1
250 FOR X = 1 TO 23
260 IF INKEY (-A(X)) THEN FREQ = BASE + 4*X
270 NEXT
280 IF FREQ = -1 THEN 250
290 MAXVOL = V:SUSVOL = S
300 FOR CYC = 1 TO REPT
310 PROCENV (MAXVOL, SUSVOL)
320 SOUND &11,L,FREQ,10
330 FOR X = 1 TO DELAY:NEXT
340 SOUND &12,M,FREQ,16
350 FOR X= 1 TO 0.5*DELAY: NEXT
360 SOUND &13.N, FREQ,10
370 MAXVOL = MAXVOL/K: SUSVOL = SUSVOL/K
380 NEXT
390 IF INKEY (0)< > - 1 THEN PROCKEY
400 GOTO PLAY
410 DEFPROCKEY
420 IF INKEY (-33) THEN DELAY = 2* DELAY
430 IF INKEY (-114)THEN DELAY = 0.5* DELAY
440 IF INKEY (-115) THEN REPT = REPT + 1
450 IF INKEY (- 116) THEN REPT = REPT-1
460 IF INKEY (-21) THEN DUR = DUR + 1
470 IF INKEY (-117) THEN DUR = DUR - 1
480 IF INKEY (- 118) THEN K = K + 0.1
490 IF INKEY ( - 23) THEN K = K — 0.1
500 IF INKEY (-119) THEN K = K + 1
510 IF INKEY (- 120)THEN K = K- 1
520 IF K < 0.1 THEN K = 0.1
530 PLAY = 190
540 ENDPROC
550 DEF PROCENV (MAXVOL, SUSVOL)
560 ENVELOPE 1,DUR,0,0,0,0,0,0,AD, AD - 127, - SR, SR = 0, MAXVOL, SUSVOL
570 ENVELOPE 2, DUR,0,0,0,0,0,0,AD - 2, AD - 125, - SR, SR = 0, MAXVOL - 8, SUSVOL - 8
580 ENVELOPE 3, DUR,0,0,0,0,0,0,AD - 8, AD - 119, - SR, SR = 0, MAXVOL-16, SUSVOL-16
590 ENDPROC
600 DATA 97, 17, 50, 34, 18, 35, 52, 20, 36, 53, 69, 37, 54, 38, 39, 55, 40, 56, 72, 25, 57, 121, 41
mu:zines is the result of thousands of hours of effort, and will require many thousands more going forward to reach our goals of getting all this content online.