Category : Files from Magazines
Archive   : IMB9007.ZIP
Filename : TONES.BAS

 
Output of file : TONES.BAS contained in archive : IMB9007.ZIP
DECLARE SUB Chirp (F1%, F2%, Cycles%)
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



  3 Responses to “Category : Files from Magazines
Archive   : IMB9007.ZIP
Filename : TONES.BAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. 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/