SOUND GS - Part 6 Sound and Music - All About The IIGS' 5503 Ensoniq DOC Originally compiled and edited 2-95 Updated and converted to standard txt - October 18, 1995 Status: FreeWare - compiled Information Copyright (c) 1995 by Charles T. Turley, Ph.D. One of the most facinating, remarkable and unique features of the Apple IIgs, is its ability to create incredibly realistic sound effects and music. The IIgs does this because, its sound system is controlled by the powerful Ensoniq Digital Oscillator Chip (DOC), the same chip used in the professional-quality Mirage Digital Sampling Keyboard and the Ensoniq Piano. Oscillators The 5503 Ensoniq Digital Oscillator Chip (DOC) has 32 sound oscillators. Each of them are capable of making an independent sound. Two oscillators paired up are a generator. The paired generator arrangement is favored by most IIgs sound/music programs, because that arrangement offers greater flexibility with better sound quality. The DOC produces 8-bit waveforms, with a center line at $80 (128 decimal). Reserved for 'stop' is $00 or (0 decimal). If the sample value of 0 is encountered by a DOC oscillator, it will halt immediately and will not produce any more sound. The DOC also has an 8-bit volume register for every oscillator using a linear slope. The dynamic range of the DOC (the 'space' between the softest and loudest sounds which are produced) being approximately 42 dB. Each oscillator has a 16 bit frequency register, ranging from 0 to 65535. In the normal DOC configuration, each step of this frequency register increases the play rate by 51 Hz. Oscillator Modes When oscillators are paired as generators, four possible modes can be used. These four modes as termed, are listed below. (1) Free (Free-run) (Loop) : The oscillator simply plays the waveform and stops. No interaction with it's 'pair' occurs. (2) Swap (Loop) : Only one oscillator of the pair is active at a time. When one stops, its pair starts immediately. (3) Shot : The oscillator plays the waveform and if it reaches the waveforms end without encountering a zero, it starts over (loops) at the beginning. (4) Sync (AM): One oscillator of the pair modulates the volume of the other paired oscillator with the waveform it's playing. Unique and very effective. But, not commonly used. Note: To listen and view these four modes (all together), load and play the NTGS (type2) music module EXAMPLE 'SHt2.4M', included with this text file. You can load and play it via the NTGSt2 Player v2.0.1, accessing the control panel during the modules play, (pressing the keys; Apple-Control-Esc), select the CDA 'Ensoniq Peeker v1.0' also included with this text file. This EXAMPLE composition (which is a radically enhanced 'NTGSt2' modification of the original 'FTA Space Harrier DEMO' SoundSmith composition), certainly is not (at all) presented, for its audio composition beauty (as it presents every conceivable audio quirk, taxing the Ensoniq to its limits). But, rather to show you with audio and visual review, the entire ranges of the IIgs and the Ensoniq DOC abilities, limits, functions, modes and quirks. You'll note when viewing it, as it plays via the NTGSt2 Player v2.0.1 and using the Ensoniq Peeker v1.0 CDA, that it actually commands the Ensoniq DOC to use 31 of its 32 total ocillators, leaving only one of its 32 oscillators 'Free', for timing. Current DRAM Restrictions with the IIgs Oscillators play waves stored in up to 128k of DRAM. The Ensoniq has a refresh system design, built-in for it's own use. Even though the Ensoniq 5503 DOC is designed to have and address 128k of DRAM, Apple only supplied 64k of DRAM for the DOC, in the IIgs (this is known as the DOC RAM). Note: It's possible to upgrade or replace the 64k DRAM with 128k of DRAM. However, newly designed software would have to be developed, to address and efficently use such. The output of an oscillator can be directed to any one of 16 possible channels. The Apple IIgs only makes 8 channels avalible (via the 3 bits on the sound expansion molex connector). All of the IIgs' currently available stereo cards limit this to 1 bit, or two channels. With the properly designed software, the Ensoniq DOC can generate up to 32 definable sounds simultaneously. It can also support up to 32 special (audio/sound) effects. The frequency of these sounds can be varied over a wide range and their volumes can be set to any of 256 discrete levels. As a result, itÕs possible to mimic in detail, the acoustical behavior of any musical instrument. The DOC is also capable of sampling incoming audio signals, including voice samples, and converting them to digital form. Note: Maintaining compatibility with other Apple II models, the GS also lets you create simple sounds by toggling the GS speaker with a soft switch at $E0C030. You can use the SysBeep function in the Miscellaneous Tool Set to beep the speaker using this technique. SysBeep requires no parameters. Programming and minipulation of the Ensonic 5503 - DOC Based largely on the content of ÔThe ProDOS 16 Operating System - Chapter 11Õ, this part 6 of ÔThe GS Sound ContinuumÕ takes a close look at the Ensoniq DOC and examines ways of manipulating its internal registers to create sound and music. It discusses using the Sound Manager to communicate with the DOC and to play back digitized sound patterns. It also relates the Note SynthesizerÕs ability to play musical scores using different simulated instruments. IIgs - SOUND HARDWARE All sound-control commands are sent by a program running in the 65816 Central Processing Unit (CPU) address space to the Sound General Logic Unit (GLU). The GLU passes the sound-control commands on to the sound circuitry controlled by the Ensoniq DOC. Because the Ensoniq is isolated from the 65816 by the GLU in this way, it can generate sound independently of the current application running in memory. Thus, The IIgs has the ability to have background sounds or music playing, as you type within a word processing application program, for instants. That is, the application can perform other tasks while sound is playing in the background. Sound GLU The SOUND GLU contains four registers for communicating with the DOC as follow by Register Name and Address; Sound Control ($C03C), Data ($C03D), Address Low ($C03E) and Address High ($C03F). The Sound Control register is the more complex. The lower four bits control the output volume level of the audio amplifier. The GS sound tools put the volume level (as set by the Control Panel) into these bits before they access the DOC. Bit 7 is a status bit that indicates if the DOC is ready to respond to read and write operations. ItÕs ready if this bit is zero (0 = DOC is free) and (1 = DOC is busy). Bit 6 controls whether the value in the Sound GLU 16-bit address register refers to an address in the DOCÕs special 64K RAM waveform buffer (bit = 1) or to DOC register number (bit = 0). Bit 5 controls if the GLU address register is to increment automatically after a data register access (bit = 1) or if it is to stay the same (bit = 0). Setting the auto-increment bit makes it easier to access a range of registers or RAM addresses. Note: The balance of technical/programming information, concerning the Ensoniq 5503 DOC, continuing with the (Bit 4 controls on down, and all materials of the contents from 'The ProDOS 16 Operating System' - Chapter 11), will be included in the next series of SOUND GS - Part 7. Ensoniq 5503 DOC Swap Mode Anomaly The IIgs' Ensoniq Digital Oscillator Chip (DOC) will ocassionally perform an anomaly and insert a spurious zero-crossing byte into the output sample stream. The properly designed samples waveform might mask the anomaly. If it does not, you might hear intermittent clicks or a more pervasive "static." This discusses such situations when the DOC produces this spurious zero crossing, with methods to avoid or mask this undesirable anomaly. Background The Ensoniq DOC in the Apple IIgs as a microprocessor is dedicated to specifically to producing sound. As such, the DOC constantly scans its sound oscillators, proceeding from lower numbered to higher numbered ones. The DOC updates its signal output level for each active one matching such, as indicated by the oscillator's current sample byte. An oscillator can operate in any one of several functional modes, as covered above. However, this concerns only the swap mode, where two consecutive oscillators are considered as a single generator. The low numbered oscillator in the pair is always even. For example, the pairs of oscillators 0 & 1, 2 & 3, ... , 12 & 13, and 14 & 15 are thus constituted generators. The IIgs Sound Tool Set (FFStartSound) call in particular, configures the oscillators used to operate in swap mode. In swap mode, the even numbered oscillator plays its waveform first, halts its own playback, then starts its partner which also plays its waveform, halts its own playback upon exhausting its waveform, and restarts the even-numbered oscillator. Any time between the start of any particular FFStartSound call and the time that oscillator finishes playing a wave, the Sound Tool Set interrupt handler might be busy, transferring waveform information from the IIgs main RAM to the dormant oscillator's buffer in DOC RAM. Since one oscillator is producing sound, as the Sound Tool Set interrupt handler is transferring waveform information to the other oscillator, you may use a generator pair to produce continuous sound of arbitrary length, and you are limited only by the amount of memory you can devotto the waveform in the main RAM. Each oscillator draws its output samples from a dedicated buffer in DOC RAM, the size and location are specified by parameters to the FFStartSound call. The maximum size for an oscillator buffer is 32K. But, because buffers may neither coincide nor overlap, the practical maximum might be lower, when more than one generator is active. As an example, if four generators (eight paired oscillators) are active simultaneously, the maximum buffer size is 8K, since eight non-overlapping buffers of 8K each would occupy the entire 64K available in the DOC RAM. The Problem Whenever a swap occurs from a higher-numbered oscillator to a lower-numbered one, the output signal from the corresponding generator temporarily falls to zero-crossing level (silence). This anomaly does not occur during swaps from lower-numbered oscillators to higher-numbered ones. The spurious level change lasts no longer than a single sample period, then the interrupted waveform resumes. Even this tiny glitch in the output, can be audible as a pop or click. The further away the waveform is from zero crossing when the swap interrupts it, the louder your ear can perceive the pop or click. When high to low swaps occur with great frequency, the pops and clicks happen so often that they are perceived as gentle, but pervasive, static. Solutions There is no ideal solution to the problem of signal interruption in swap mode. This problem is an anomaly of the DOC design. No DOC updates are coming from Apple, for the IIgs. We just have to find methods to work around thisvDOC design problem. So, three logical solutions follow, for mitigating the audible damage to the output waveform caused by this Ensoniq 5503 DOC design problem. Minimize Oscillator Swaps per Unit Time The more often swaps from high numbered oscillators to low numbered ones occur, the more obtrusive the brief signal interruptions will seem. To minimize these signal interruptions, make the oscillators play for longer periods of time before swapping to their partners. That way, they will play at slower output sample rates, use larger buffers in DOC RAM, or use the two in tandem. Commensurate with the number of active generators you wish to use and the level of output signal fidelity that you desire. Always specify the largest DOC buffer size and the lowest output sample rate that you possibly can. A large number of active generators implies a very small maximum buffer size for any particular oscillator. So you should always try to minimize the number of generators that are active at any one time. The clicks of signal interruption begin to blend into highly audible static when you specify buffers smaller than 8K for use at the maximum-fidelity output sample rate of about 26 kHz. Note: The DOC supports greater sample rates, but these rates are limited by the output filtering on the IIgs. This currently, permits no greater signal fidelity than 26 kHz rate. Thus, output fidelity must suffer, or signal noise must increase, when more than four generators (eight oscillators in swap mode) are operating together. Avoid Silent or Quiet Passages The signal content of properly designed waveforms, can hide the additional noise caused by the "swap-mode anomaly." The more complex and louder a waveform, the less your ear will perceive the brief interruption that occurs as a higher numbered oscillator swaps to a lower numbered one. Like it or not, pop and rock music is far less susceptible to this problem than classical, folk, or jazz pieces. Because of their composition and standard music style/design, the classical, folk, or jazz pieces, include many quiet passages. Using signals, that naturally contains a large amount of "pink noise," as examples; rainstorms, waterfalls or the surf at the beach, can mask the anomalous noise altogether. Arrange Swaps to Occur at or Near Zero Crossings If the high-to-low swap occurs at times when normal output signal levels sits at or near the zero crossing, a swap will cause little or no audible damage to the waveform. When reproducing arbitrary sampled sound, it's almost impossible, to insure the output signal level is near the zero crossing. When constructing long waveforms for playback, you may sidestep the chip's anomalous behavior. Ensure waveform values lie at or near $80 at the end of every waveform segment, where a waveform segment spans twice the length of one oscillator buffer. For example, if you specify a buffer size of 4K, make sure that your constructed waveform crosses the baseline after every 8,192 samples, and for 16K buffers, make sure that the waveform makes a zero crossing after every 32K. The length of the waveform segment should be twice the buffer length, only if you're going to reproduce the waveform exactly once per FFStartSound call. It may be advisible shortening the length of the waveform segment. Do it to exactly the specified DOC buffer length if you use the nextwave_start parameter in the FFStartSound parameter block. This invokes automatic looping of the waveform. So, you may need to arrange for twice as many zero crossings in your constructed waveform in the looping case, as under normal circumstances. Since, subsequent repetitions of the waveform during the single FFStartSound call may begin with either the even or odd oscillator. This, is dependant on which member of the pair was active, when the previous such repetition ended. If the playback of a waveform starts with the odd oscillator, then the odd to even swaps will occur at different points in the waveform than they would, when the playback starts with the even oscillator. Final Note: The use of larger buffers causes a progressively longer disabling of interrupts while the Sound Tool Set moves the waveform into the DOC RAM. A music player (such as the NTGSt2 Player v2.0.1), which enables 31 of the total 32 DOC (available) oscillators, using buffers of 2k or 4k and has absolutely no interrupts, is the best modeled and designed player, to take advantage of, mask or correct all the DOC design anomalies and problems. Even such a unique designed player, can still allow some of these anomalies and problems to be noticable. Because, the Ensoniq 5503 DOC, as designed and used within the IIgs, never presents and plays music and/or sound exactly the same, every time! Further Reference; Apple IIgs Toolbox Reference, Volume 2 Apple IIgs Hardware Reference The ProDOS 16 Operating System, Chapter 11 For Additional Technical and/or Development Support call Apple's following numbers; 1-800-257-1439 or (408) 974-4897 All brand and product names are the trademarks and/or registered trademarks of their respective holders. -END OF FILE-