home *** CD-ROM | disk | FTP | other *** search
Text File | 1986-02-08 | 2.3 KB | 95 lines | [TEXT/MACA] |
- \ FourTone - Four Tone synthesizer driver
- \ written June 23 1985 by John Papiewski
- \ v 1.1 July 9 Fix Bugs !!! add no-wait (asynchonous) code
-
- \ must first load: Drvr & Struct1
-
- :Class FourTone <Super PBDrvr
-
- Int duration
- Var snd1rate
- Var snd1phase
- Var snd2rate
- Var snd2phase
- Var snd3rate
- Var snd3phase
- Var snd4rate
- Var snd4phase
- Var snd1wave
- Var snd2wave
- Var snd3wave
- Var snd4wave
-
- Int FTRMode
- Var SndPtr
-
- :M OpenSound: -4 Put: IORefnum Put: IOcomp 6 put: IOReq
- Abs: FTRMode Put: IOBuffer
- " .Sound" Name: Super open: Super
- ;M
-
- :M SetPitch: { Tone1 Tone2 Tone3 Tone4 -- }
- Tone1 Put: Snd1Rate
- Tone2 Put: Snd2Rate
- Tone3 Put: Snd3Rate
- Tone4 Put: Snd4Rate
- ;M
-
- :M SetDur: { Dur -- } \ Set duration in ticks (60/second)
- dur Put: duration 10 Put: snd1phase 10 Put: snd2phase
- 10 Put: snd3phase 10 Put: snd4phase
- ;M
-
- :M SetWave: { Wave1 Wave2 Wave3 Wave4 -- } \ Assign waveform arrays to each
- Wave1 Put: Snd1wave Wave2 Put: Snd2wave \ voice
- Wave3 Put: Snd3wave Wave4 Put: Snd3wave
- ;M
-
- :M StartSnd: \ regular driver
- Abs: Duration Put: SndPtr
- 1 Put: FtrMode \ -1 = Square wave, 1 = Four-Tone, 0 = Free-form
- Addr: FTRmode 6 Write: Self
- drop
- ;M
- :M NWStartSnd: { Proc -- } \ no-wait (asynchonous) driver
- Abs: Duration Put: SndPtr
- 1 Put: FtrMode \ -1 = Square wave, 1 = Four-Tone, 0 = Free-form
- Proc Addr: FTRmode 6 WriteNW: Self
- drop
- ;M
- ;Class
-
- :CLass WaveForm <Super Barray \ Describe the waveform structure here
- :M SawInit: 255 0 do i i To: Self loop ;M \ fill array with sawtooth
- :M Squinit: Clear: Self 127 0 Do 255 i To: self loop ;M \ Square Wave
- :M TriInit: 63 0 Do 127 i 2* + i TO: Self Loop \ Triangle
- 191 64 Do 383 i -2 * + i To: Self Loop
- 255 192 Do i 192 - 2* i To: Self Loop
- ;M
- :M FBWave: Abs: Self 4 + ;M
- ;Class
-
- \ Here's an example :
- 0 value FTDone
- :Proc FourDone 1 -> FTdone ;Proc \ Used to tell when no-wait write is done
-
- 256 WaveForm Sawtooth
- 256 WaveForm Triangle
- 256 WaveForm Square
- SawInit: Sawtooth
- SquInit: Square
- TriInit: Triangle
- FourTone Buzz
- OpenSound: Buzz
- FbWave: Triangle FBWave: Square Fbwave: Sawtooth dup SetWave: Buzz
- cr cr
- ." Four-Tone Sound Demo"
- : Buzzarre
- 250000 50000 DO
- 5 SetDur: Buzz
- i 3000 i + 1000 i + 0 SetPitch: Buzz
- StartSnd: Buzz
- 1000 +Loop
- ;
- Buzzarre
-