OCTOPUS (8pus) 8-voice Amiga MIDI instrument Sept 13 88 By J Henry H Lowengard This is a demo program which shows you a couple of aspects of sound: First, you can draw or use preset waveforms, and do some rudimentary editing and processing on them. Second, you can compare a 12-tone equal temperament scale to a just scale. It also is a partially featured MIDI synthesizer, capable of 8-voice synthesis. The most important line of any doc file: To exit the program, you can use the Close gadget, the Escape key, or the Stop gadget. The MIDI implementation: 8pus acts on note_on,note_off and pedal signals. When you try to play 9 notes, the 9th will not be played. The pedal holds the notes in a chord. Velocity is not yet used. An 'All-notes-off' can be done by using the 'Shutup' gadget or pressing the space bar. Tunings: The 12-Equal tuning is the default. The '12ET' gadget also sets the tuning to 12ET, as does the number '1' on the keypad. The just tuning consists of these ratios C C# D Eb E F F# G Ab A Bb B 1/1 ( c#) 9/8 6/5 5/4 4/3 (f#) 3/2 8/5 5/3 7/4 15/8 The Just tuning is set by the 'Just' gadget and the number '2' on the keypad. A change of tuning takes effect immediately. You can play the Amiga keyboard in a way similar to that of Sonix, Soundscape, Synthia, SoundLab etc. etc. The Z key represents c-below-middle-c (note #48). it continues in the usual B&W pattern. Middle C (note # 60) is on Q. Because of the "key ghosting problem", certain combinations of keys cause mysterious notes to turn on. Hit the spacebar to "Kill" any stuck notes which may result from this. You can use the shift keys as "sustain pedals" to build large chords without this problem. Using Caps lock and the spacebar is one way to build the chords up. You don't need to grow an extra finger either. The waveforms: Gadgets provide the following preset waveforms, also found on F-keys: F1 ... Sine F2 ... Square F3 ... Triangle F4 ... Upgoing sawtooth (double frequency) The waveforms can be changed by hand with the mouse while 8pus is playing. Also, there are these functions: F6 ... F*2: doubles the frequency of the sound by moving the even samples to the front and the odd samples to the back. Nine 'doubles' brings you back to the original waveform. (since 2^9 = 512, the length of the wave) F7 ... Shrink: ramps the amplitude down on the waveform - good for making "chips" F8 ... Filter: filters the waveform with the equation: S(i) = (s(i-1)+2*s(i)+s(i+1) ) /4 There will be a slight buzz while the screen fixes itself after these operations (if the sound is on). Audio Characteristics: The high-pitched whine, at 5000 Hz, is in fact my output sample frequency. If you want to discover something about aliasing, play some high notes. I realize the thing is noisy .. the rate is so low because of the enormous throughput needed. If you play eight notes and move the mouse, you can hear the program hiccup. The length of the wave which I'm playing is 512 bytes. You can hear the frequency getting less accurate in the low notes while the aliasing starts early in the high notes. Although you can turn the just intonation on, and hear a difference, the accuracy in not the hottest in the world. The length of the CHIP-buffers are 128 bytes each. At 5000 Hz, a new buffer comes out every 39th of a second. This is perceptively slow in reacting to lots of MIDI messages. So what's the point? Well, This is just one byproduct of my researches into double buffered audio and MIDI parsing. Played with cleaner sounding MIDI instruments, it adds colorful distortion and texture. Re-drawing the waveform while you play it is lots of fun. It sounds like playing with a graphic equalizer. And the fact that 8 go on at once is the real story here. I'm going to use the tools developed for Octopus to make more interesting (monophonic) synthesizers. Tips and fun stuff: Start with a square wave and carve pieces out of it. Then filter it, double it and filter it some more. Doodle something on the screen, double it until it's a meaningless mush, then filter it and draw over it some more. Take the UpSaw wave and double it and filter it. Sounds just like a Juno-6 or a dying Casio PT-20, eh? Now shrink it .. note the vocal quality? Like someone snoring over AM radio 1000 miles away? Toggle between tunings while playing a C7/9 chord (C-E-G-Bb-C-D) Ditto for a Bb7 (Bb-D-F-Bb-C). Sounds lousy when the tuning is Just, eh? That's why people don't use just tunings on fixed pitch instruments too often. (Maybe I'll put up an "adjusting just" scheme in a future version) Rules and reulations: This program may be freely distributed...or it may not. Copy this program and give it to your friends, especially educational institutions. Send no money, but if you are developing a product on similar lines, you can consult me . The low quality of the output should be enough to convince you of the foolishness of trying to do this on a standard Amiga. The program is written in assembler, using some very nasty optimization inthe inner sound computation loop. I use the HiSoft "GenAm" assembler, which takes about 15 seconds to go from source to executable. I also use Metascope a whole lot. The program may be slightly improved, but other, related programs will be more interesting. For instance, I may add an ARexx interface, to allow it to be retuned from ARexx, started, stopped, maybe play some notes (I suppose it multitasks). Or, I may put in some savable waveforms, or operate in a more sophisticated way, with envelopes, velocity, stereo panning, etc, etc. Reading and using Iff 8svx files might be nice. CAUTION: Don't try running this with other Music programs on the same machine - it won't work. I amd doing low, low level things to the serial port and audio interrupts. Don't try multitasking it with itself either. You can leave it running if you are aren't using the serial port or the audio chips, but my intese work might make you miss other, high I/O type work. It does crash on exit with a memory list bug (GURU #81000009) from time to time, but I can't reproduce it. J Henry H Lowengard, 43 W 16th Street, Apt. 2D, NYC 10011-6320 CIS: 76625,2425 NYTEL: 212-675-6046 Previously released version dates: Sept 4 1988 (CIS) Sept 5 1988 (Eniac,Gateway) : fixed drawing bugs, added shrink Sept 13 1988 : Added keys, widened display, etc.