Category : Files from Magazines
Archive   : IMB9007.ZIP
Filename : TONES.BAS
Output of file : TONES.BAS contained in archive : IMB9007.ZIP
DECLARE SUB Tone (CycleLen%, NbrCycles%)
DECLARE SUB Noise (D AS LONG)
DECLARE SUB Sound2 (F AS LONG)
DECLARE SUB Delay (Interval!)
DECLARE SUB Nosound ()
DEFINT A-Z
' TONES - a set of functions that provide some
' interesting sonic effects. Useful for games
' or alerts.
' ToneTest - test the sound routines
' Make some sounds
PRINT "Siren"
FOR I = 1 TO 5
CALL Chirp(200, 500, 3)
CALL Chirp(500, 200, 3)
NEXT I
PRINT "Chirp - Glide down"
CALL Chirp(220, 440, 10)
PRINT "Single Tone"
CALL Tone(330, 1000)
PRINT "Noise"
CALL Noise(1000000)
PRINT "Single Tone"
CALL Tone(110, 1000)
PRINT "Chirp - Glide up"
CALL Chirp(1000, 1, 3)
PRINT "Phasor"
FOR I = 1 TO 15
CALL Chirp(1, 150, 2)
NEXT I
PRINT "Chirp"
CALL Chirp(1, 300, 2)
'Make a 'concert A' for 1.5 seconds
PRINT "Sound2 @ 440 Hz"
CALL Sound2(440)
CALL Delay(1500)
' Make same sounds, with TIMER tone
' superimposed, for MULTISOUND effect
PRINT "Siren"
FOR I = 1 TO 5
CALL Chirp(200, 500, 3)
CALL Chirp(500, 200, 3)
NEXT I
PRINT "Chirp - Glide down with multisound"
CALL Chirp(220, 440, 10)
PRINT "Single Tone with multisound"
CALL Tone(330, 1000)
PRINT "Noise with multisound"
CALL Noise(1000000)
PRINT "Single Tone with multisound"
CALL Tone(110, 1000)
PRINT "Chirp - Glide up with multisound"
CALL Chirp(1000, 1, 3)
PRINT "Phasor with multisound"
FOR I = 1 TO 15
CALL Chirp(1, 150, 2)
NEXT I
PRINT "Chirp with multisound"
CALL Chirp(1, 300, 2)
CALL Nosound ' Turn off timer
SUB Chirp (F1, F2, Cycles)
' Chirp - create a 'bird chirp' type noise
' INP:F1 - # of counts for the starting freq.
' F2 - # of counts for the ending freq.
' Cycles - # of cycles of each frequency
L = INP(&H61)
Cycles = Cycles * 2
I = F1
WHILE I <> F2
FOR J = 1 TO Cycles
L = L XOR 2
OUT &H61, L
FOR K = 1 TO I: NEXT K
NEXT J
IF F1 > F2 THEN
I = I - 1
ELSE
I = I + 1
END IF
WEND
END SUB
SUB Delay (Interval!)
Begin! = TIMER
WHILE Begin! + (Interval! / 1000) < TIMER
WEND
END SUB
SUB Noise (D AS LONG)
' Noise - Make noise for a certain amount of
' counts.
' INP:
' D - The number of kilocounts of noise
T = INP(&H61)
Count& = 0
WHILE Count& < D
J = (INT((32768 + 1) * RND) MOD 128) * 8
FOR I = 1 TO J: NEXT I
T = T XOR 2
OUT &H61, T
Count& = Count& + J
WEND
END SUB
SUB Nosound
' NoSound2 - turn off the continuous tone
C = INP(&H61) 'Mask off speaker
OUT &H61, (C AND &HFC) 'output from timer
END SUB
SUB Sound2 (F AS LONG)
' Sound2 - Generate a continuous tone using the
' internal timer.
' INP: F - the desired frequeny
IF F < 19 THEN F = 19 'Prevent overflow
C& = 1193180 \ F
OUT &H43, &HB6 'Program new divisor
OUT &H42, (C& MOD 256) 'Rate into the timer
OUT &H42, (C& \ 256)
C& = INP(&H61) 'Enable speaker output
OUT &H61, (C& OR 3) 'from the timer
END SUB
SUB Tone (CycleLen, NbrCycles)
' Tone - output a tone
' INP: CycleLen - Length (counts) for 1/2 cycle
' NbrCycles - Number of cycles to make
NbrCycles = NbrCycles * 2 '# half cycles
T = INP(&H61) 'Port contents
FOR I = 1 TO NbrCycles
T = T XOR 2
OUT &H61, T
FOR J = 1 TO CycleLen: NEXT J
NEXT I
END SUB
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/