Amiga® Hardware Reference Manual: 5 Audio Hardware
This chapter shows you how to directly access the audio hardware to
produce sounds. The major topics in this chapter are:
* A brief overview of how a computer produces sound.
* How to produce simple steady and changing sounds and more
complex ones.
* How to use the audio channels for special effects, wiring them
for stereo sound if desired, or using one channel to modulate
another.
* How to produce quality sound within the system limitations.
A section at the end of the chapter gives you values to use for creating
musical notes on the equal-tempered musical scale.
This chapter is not a tutorial on computer sound synthesis; a thorough
description of creating sound on a computer would require a far longer
document. The purpose here is to point the way and show you how to use
the Amiga's features. Computer sound production is fun but complex, and it
usually requires a great deal of trial and error on the part of the
user -- you use the instructions to create some sound and play it back,
readjust the parameters and play it again, and so on.
The following works are recommended for more information on
creating music with computers:
* Wayne A. Bateman, Introduction to Computer Music
(New York: John Wiley and Sons, 1980).
* Hal Chamberlain, Musical Applications of Microprocessors
(Rochelle Park, New Jersey: Hayden, 1980).
Introducing Sound Generation Using Direct (Non-DMA) Audio Output
Forming and Playing a Sound The Equal-tempered Musical Scale
Producing Complex Sounds Decibel Values for Volume Ranges
Producing High-quality Sound The Audio State Machine
5 Audio Hardware / Introducing Sound Generation
Sound travels through air to your ear drums as a repeated cycle of air
pressure variations, or sound waves. Sounds can be represented as graphs
that model how the air pressure varies over time. The attributes of a
sound, as you hear it, are related to the shape of the graph. If the
waveform is regular and repetitive, it will sound like a tone with steady
pitch (highness or lowness), such as a single musical note. Each
repetition of a waveform is called a cycle of the sound. If the waveform
is irregular, the sound will have little or no pitch, like a loud clash or
rushing water. How often the waveform repeats (its frequency) has an
effect upon its pitch; sounds with higher frequencies are higher in pitch.
Humans can hear sounds that have a frequency of between 20 and 20,000
cycles per second. The amplitude of the waveform (highest point on the
graph), is related to the perceived loudness of the sound. Finally, the
general shape of the waveform determines its tone quality, or timbre.
Figure 5-1 shows a particular kind of waveform, called a sine wave, that
represents one cycle of a simple tone.
Figure 5-1: Sine Waveform
In electronic sound recording and output devices, the attributes of sounds
are represented by the parameters of amplitude and frequency. Frequency
is the number of cycles per second, and the most common unit of frequency
is the Hertz (Hz), which is 1 cycle per second. Large values, or high
frequencies, are measured in kilohertz (KHz) or megahertz (MHz).
Frequency is strongly related to the perceived pitch of a sound. When
frequency increases, pitch rises. This relationship is exponential. An
increase from 100 Hz to 200 Hz results in a large rise in pitch, but an
increase from 1,000 Hz to 1,100 Hz is hardly noticeable. Musical pitch is
represented in octaves. A tone that is one octave higher than another has
a frequency twice as high as that of the first tone, and its perceived
pitch is twice as high.
The second parameter that defines a waveform is its amplitude. In an
electronic circuit, amplitude relates to the voltage or current in the
circuit. When a signal is going to a speaker, the amplitude is expressed
in watts. Perceived sound intensity is measured in decibels (db). Human
hearing has a range of about 120 db; 1 db is the faintest audible sound.
Roughly every 10 db corresponds to a doubling of sound, and 1 db is the
smallest change in amplitude that is noticeable in a moderately loud
sound. Volume, which is the amplitude of the sound signal which is output,
corresponds logarithmically to decibel level.
The frequency and amplitude parameters of a sine wave are completely
independent. When sound is heard, however, there is interaction between
loudness and pitch. Lower-frequency sounds decrease in loudness much
faster than high-frequency sounds.
The third attribute of a sound, timbre, depends on the presence or absence
of overtones, or harmonics. Any complex waveform is actually a mixture of
sine waves of different amplitudes, frequencies, and phases (the starting
point of the waveform on the time axis). These component sine waves are
called harmonics. A square waveform, for example, has an infinite number
of harmonics.
In summary, all steady sounds can be described by their frequency, overall
amplitude, and relative harmonic amplitudes. The audible equivalents of
these parameters are pitch, loudness, and timbre, respectively. Changing
sound is a steady sound whose parameters change over time.
In electronic production of sound, an analog device, such as a tape
recorder, records sound waveforms and their cycle frequencies as a
continuously variable representation of air pressure. The tape recorder
then plays back the sound by sending the waveforms to an amplifier where
they are changed into analog voltage waveforms. The amplifier sends the
voltage waveforms to a loudspeaker, which translates them into air
pressure vibrations that the listener perceives as sound.
A computer cannot store analog waveform information. In computer
production of sound, a waveform has to be represented as a finite string
of numbers. This transformation is made by dividing the time axis of the
graph of a single waveform into equal segments, each of which represents a
short enough time so the waveform does not change a great deal. Each of
the resulting points is called a sample. These samples are stored in
memory, and you can play them back at a frequency that you determine. The
computer feeds the samples to a digital-to-analog converter (DAC), which
changes them into an analog voltage waveform. To produce the sound, the
analog waveforms are sent first to an amplifier, then to a loudspeaker.
Figure 5-2 shows an example of a sine wave, a square wave, and a triangle
wave, along with a table of samples for each.
Figure 5-2: Digitized Amplitude Values
TIME SINE SQUARE TRIANGLE
---- ---- ------ --------
0 0 100 0
1 39 100 20
2 75 100 40
3 103 100 60
4 121 100 80
5 127 100 100
6 121 100 80
7 103 100 60
8 75 100 40
9 39 100 20
10 0 -100 0
11 -39 -100 -20
12 -75 -100 -40
13 -103 -100 -60
14 -121 -100 -80
15 -127 -100 -100
16 -121 -100 -80
17 -103 -100 -60
18 -75 -100 -40
19 -39 -100 -20
Note:
-----
The illustrations are not to scale and there are fewer dots in the
wave forms than there are samples in the table. The amplitude axis
values 127 and -128 represent the high and low limits on relative
amplitude.
The Amiga Sound Hardware
5 / Introducing Sound Generation / The Amiga Sound Hardware
The Amiga has four hardware sound channels. You can independently program
each of the channels to produce complex sound effects. You can also attach
channels so that one channel modulates the sound of another or combine
two channels for stereo effects.
Each audio channel includes an eight-bit digital-to-analog converter
driven by a direct memory access (DMA) channel. The audio DMA can retrieve
two data samples during each horizontal video scan line. For simple,
steady tones, the DMA can automatically play a waveform repeatedly; you
can also program all kinds of complex sound effects.
There are two methods of basic sound production on the Amiga -- automatic
(DMA) sound generation and direct (non-DMA) sound generation. When you
use automatic sound generation, the system retrieves data automatically by
direct memory access.
5 Audio Hardware / Forming and Playing a Sound
This section shows you how to create a simple, steady sound and play it.
Many basic concepts that apply to all sound generation on the Amiga are
introduced in this section.
To produce a steady tone, follow these basic steps:
1. Decide which channel to use.
2. Define the waveform and create the sample table in memory.
3. Set registers telling the system where to find the data and the
length of the data.
4. Select the volume at which the tone is to be played.
5. Select the sampling period, or output rate of the data.
6. Select an audio channel and start up the DMA.
Deciding Which Channel to Use Playing the Waveform
Creating the Waveform Data Stopping the Audio Dma
Telling the System About the Data Audio Summary
Selecting the Volume Audio Example
Selecting the Data Output Rate
5 / Forming and Playing a Sound / Deciding Which Channel to Use
The Amiga has four audio channels. Channels 1 and 2 are connected to the
left-side stereo output jack. Channels 0 and 3 are connected to the
right-side output jack. Select a channel on the side from which the output
is to appear.
5 / Forming and Playing a Sound / Creating the Waveform Data
The waveform used as an example in this section is a simple sine wave,
which produces a pure tone. To conserve memory, you normally define only
one full cycle of a waveform in memory. For a steady, unchanging sound,
the values at the waveform's beginning and ending points and the trend or
slope of the data at the beginning and end should be closely related. This
ensures that a continuous repetition of the waveform sounds like a
continuous stream of sound.
Sound data is organized as a set of eight-bit data items; each item is a
sample from the waveform. Each data word retrieved for the audio channel
consists of two samples. Sample values can range from -128 to +127.
As an example, the data set shown below produces a close approximation to
a sine wave.
About the sample data.
----------------------
The data is stored in byte address order with the first digitized
amplitude value at the lowest byte address, the second at the next
byte address, and so on. Also, note that the first byte of data must
start at a word-address boundary. This is because the audio DMA
retrieves one word (16 bits) at a time and uses the sample it reads
as two bytes of data.
To use audio channel 0, write the address of "audiodata" into AUD0LC,
where the audio data is organized as shown below. For simplicity,
"AUDxLC" in the table below stands for the combination of the two actual
location registers ( AUDxLCH and AUDxLCL ). For the audio DMA channels
to be able to retrieve the data, the data address to which AUD0LC points
must be somewhere in chip RAM.
Table 5-1: Sample Audio Data Set for Channel 0
audiodata ---> AUD0LC * 100 98
AUD0LC + 2 ** 92 83
AUD0LC + 4 71 56
AUD0LC + 6 38 20
AUD0LC + 8 0 -20
AUD0LC + 10 -38 -56
AUD0LC + 12 -71 -83
AUD0LC + 14 -92 -83
AUD0LC + 16 -100 -98
AUD0LC + 18 -92 -83
AUD0LC + 20 -71 -56
AUD0LC + 22 -38 -20
AUD0LC + 24 0 20
AUD0LC + 26 38 56
AUD0LC + 28 71 83
AUD0LC + 30 92 98
Notes:
------
* Audio data is located on a word-address boundary.
** AUD0LC stands for AUD0LCL and AUD0LCH .
5 / Forming and Playing a Sound / Telling the System About the Data
In order to retrieve the sound data for the audio channel, the system needs
to know where the data is located and how long (in words) the data is.
The location registers AUDxLCH and AUDxLCL contain the high three bits
and the low fifteen bits, respectively, of the starting address of the
audio data. Since these two register addresses are contiguous, writing a
long word into AUDxLCH moves the audio data address into both locations.
The "x" in the register names stands for the number of the audio channel
where the output will occur. The channels are numbered 0, 1, 2, and 3.
These registers are location registers, as distinguished from pointer
registers. You need to specify the contents of these registers only once;
no resetting is necessary when you wish the audio channel to keep on
repeating the same waveform. Each time the system retrieves the last audio
word from the data area, it uses the contents of these location registers
to again find the start of the data. Assuming the first word of data
starts at location "audiodata" and you are using channel 0, here is how to
set the location registers:
WHERE0DATA:
LEA CUSTOM,a0 ; Base chip address...
LEA AUDIODATA,a1
MOVE.L a1,AUD0LCH(a0) ;Put address (32 bits)
; into location register.
The length of the data is the number of samples in your waveform divided
by 2, or the number of words in the data set. Using the sample data set
above, the length of the data is 16 words. You write this length into the
audio data length register for this channel. The length register is called
AUDxLEN, where "x" refers to the channel number. You set the length
register AUD0LEN to 16 as shown below.
SETAUD0LENGTH:
LEA CUSTOM,a0 ; Base chip address
MOVE.W #16,AUD0LEN(a0) ; Store the length...
5 / Forming and Playing a Sound / Selecting the Volume
The volume you set here is the overall volume of all the sound coming from
the audio channel. The relative loudness of sounds, which will concern you
when you combine notes, is determined by the amplitude of the wave form.
There is a six-bit volume register for each audio channel. To control the
volume of sound that will be output through the selected audio channel,
you write the desired value into the register AUDxVOL, where "x" is
replaced by the channel number. You can specify values from 64 to 0. These
volume values correspond to decibel levels. At the end of this chapter is
a table showing the decibel value for each of the 65 volume levels.
For a typical output at volume 64, with maximum data values of -128 to
127, the voltage output is between +.4 volts and -.4 volts. Some volume
levels and the corresponding decibel values are shown in Table 5-2.
Table 5-2: Volume Values
Volume Decibel Value
------ -------------
64 0 (maximum volume)
48 -2.5
32 -6.0
16 -12.0 (12 db down from the volume
at maximum level)
For any volume setting from 64 to 0, you write the value into bits 5-0 of
AUD0VOL. For example:
SETAUD0VOLUME:
LEA CUSTOM,a0
MOVE.W #48,AUD0VOL(a0)
The decibels are shown as negative values from a maximum of 0 because this
is the way a recording device, such as a tape recorder, shows the
recording level. Usually, the recorder has a dial showing 0 as the optimum
recording level. Anything less than the optimum value is shown as a minus
quantity.
5 / Forming and Playing a Sound / Selecting the Data Output Rate
The pitch of the sound produced by the waveform depends upon its
frequency. To tell the system what frequency to use, you need to specify
the sampling period. The sampling period specifies the number of system
clock ticks , or timing intervals, that should elapse between each sample
(byte of audio data) fed to the digital-to-analog converter in the audio
channel. There is a period register for each audio channel. The value of
the period register is used for count-down purposes; each time the
register counts down to 0, another sample is retrieved from the waveform
data set for output. In units, the period value represents clock ticks per
sample. The minimum period value you should use is 124 ticks per sample
NTSC (123 PAL) and the maximum is 65535. These limits apply to both PAL and
NTSC machines. For high-quality sound, there are other constraints on the
sampling period (see the section called Producing High-quality Sound ).
The period is inversely proportional to the frequency.
------------------------------------------------------
A low period value corresponds to a higher frequency sound and a
high period value corresponds to a lower frequency sound.
Limitations on Selection of Sampling Period
Specifying the Period Value
5 / / Data Output Rate / Limitations on Selection of Sampling Period
The sampling period is limited by the number of DMA cycles allocated to
an audio channel. Each audio channel is allocated one DMA slot per
horizontal scan line of the screen display. An audio channel can retrieve
two data samples during each horizontal scan line. The following
calculation gives the maximum sampling rate in samples per second.
2 samples/line * 262.5 lines/frame * 59.94 frames/second = 31,469
samples/second
The figure of 31,469 is a theoretical maximum. In order to save buffers,
the hardware is designed to handle 28,867 samples/second. The system
timing interval is 279.365 nanoseconds, or .279365 microseconds. The
maximum sampling rate of 28,867 samples per second is 34.642 microseconds
per sample (1/28,867 = .000034642). The formula for calculating the
sampling period is:
sample interval clock constant
Period value = --------------- = ------------------
clock interval samples per second
Thus, the minimum period value is derived by dividing 34.642 microseconds
per sample by the number of microseconds per interval:
34.642 microseconds/sample
Minumum period = ------------------------------ = 124 timing
0.279365 microseconds/interval intervals/sample
or:
3,579,545 ticks/second
Minumum period = ---------------------- = 124 ticks/sample
28,867 samples/second
Therefore, a value of at least 124 must be written into the
period register to assure that the audio system DMA will be able to
retrieve the next data sample. If the period value is below 124, by the
time the cycle count has reached 0, the audio DMA will not have had
enough time to retrieve the next data sample and the previous sample will
be reused.
28,867 samples/second is also the maximum sampling rate for PAL systems.
Thus, for PAL systems, a value of at least 123 ticks/sample must be
written into the period register .
Clock Values
------------
NTSC PAL units
---- --- -----
Clock Constant 3579545 3546895 ticks per second
Clock Interval 0.279365 0.281937 microseconds per interval
NOTE:
-----
The Clock Interval is derived from the clock constant, where:
1
clock interval = --------------
clock constant
then scale the result to microseconds. In all of these calculations
"ticks" and "timing intervals" refer to the same thing.
5 / / Selecting the Data Output Rate / Specifying the Period Value
After you have selected the desired interval between data samples, you can
calculate the value to place in the period register by using the period
formula:
desired interval clock constant
Period value = ---------------- = ------------------
clock interval samples per second
As an example, say you wanted to produce a 1 KHz sine wave, using a table
of eight data samples (four data words) (see Figure 5-3).
Figure 5-3: Example Sine Wave
Sampled Values: 0
90
127
90
0
-90
-127
-90
To output the series of eight samples at 1 KHz (1,000 cycles per second),
each full cycle is output in 1/1000th of a second. Therefore, each
individual value must be retrieved in 1/8th of that time. This translates
to 1,000 microseconds per waveform or 125 microseconds per sample. To
correctly produce this waveform, the period value should be:
125 microseconds/sample
Period value = ------------------------------ = 447 timing
0.279365 microseconds/interval intervals/sample
To set the period register, you must write the period value into the
register AUDxPER, where "x" is the number of the channel you are using.
For example, the following instruction shows how to write a period value
of 447 into the period register for channel 0.
SETAUD0PERIOD:
LEA CUSTOM,a0
MOVE.W #447,AUD0PER(a0)
To produce high-quality sound, avoiding aliasing distortion , you
should observe the limitations on period values that are discussed in
the section called "Producing Quality Sound."
For the relationship between period and musical pitch, see the section
at the end of the chapter, which contains a listing of the
equal-tempered musical scale .
5 / Forming and Playing a Sound / Playing the Waveform
After you have defined the audio data location , length , volume and
period , you can play the waveform by starting the DMA for that audio
channel. This starts the output of sound. Once started, the DMA continues
until you specifically stop it. Thus, the waveform is played over and over
again, producing the steady tone. The system uses the value in the
location registers each time it replays the waveform.
For any audio DMA to occur (or any other DMA, for that matter), the
DMAEN bit in DMACON must be set. When both DMAEN and AUDxEN are set, the
DMA will start for channel x. All these bits and their meanings are shown
in table 5-3.
Table 5-3: DMA and Audio Channel Enable Bits
DMACON Register
---------------
Bit Name Function
--- ---- --------
15 SET/CLR When this bit is written as a 1, it
sets any bit in DMACONW for which
the corresponding bit position is
also a 1, leaving all other bits alone.
9 DMAEN Only while this bit is a 1 can
any direct memory access occur.
3 AUD3EN Audio channel 3 enable.
2 AUD2EN Audio channel 2 enable.
1 AUD1EN Audio channel 1 enable.
0 AUD0EN Audio channel 0 enable.
For example, if you are using channel 0, then you write a 1 into bit 9 to
enable DMA and a 1 into bit 0 to enable the audio channel, as shown below.
BEGINCHAN0:
LEA CUSTOM,a0
MOVE.W #(DMAF_SETCLR!DMAF_AUD0!DMAF_MASTER),DMACON(a0)
5 / Forming and Playing a Sound / Stopping the Audio Dma
You can stop the channel by writing a 0 into the AUDxEN bit at any time.
However, you cannot resume the output at the same point in the waveform by
just writing a 1 in the bit again. Enabling an audio channel almost always
starts the data output again from the top of the list of data pointed to
by the location registers for that channel. If the channel is disabled
for a very short time (less than two sampling periods ) it may stay on
and thus continue from where it left off.
The following example shows how to stop audio DMA for one channel.
STOPAUDCHAN0:
LEA CUSTOM,a0
MOVE.W #(DMAF_AUD0),DMACON(a0)
5 / Forming and Playing a Sound / Audio Summary
These are the steps necessary to produce a steady tone:
1. Define the waveform.
2. Create the data set containing the pairs of data samples (data
words). Normally, a data set contains the definition of one
waveform.
3. Set the location registers:
AUDxLCH (high three bits)
AUDxLCL (low fifteen bits)
4. Set the length register, AUDxLEN , to the number of data words to
be retrieved before starting at the address currently in AUDxLC .
5. Set the volume register, AUDxVOL .
6. Set the period register, AUDxPER
7. Start the audio DMA by writing a 1 into bit 9, DMAEN , along with
a 1 in the SET/CLR bit and a 1 in the position of the AUDxEN bit
of the channel or channels you want to start.
5 Audio Hardware / Producing Complex Sounds
In addition to simple tones, you can create more complex sounds, such as
different musical notes joined into a one-voice melody, different notes
played at the same time, or modulated sounds.
Joining Tones
Playing Multiple Tones at the Same Time
Modulating Sound
5 / Producing Complex Sounds / Joining Tones
Tones are joined by writing the location and length registers ,
starting the audio output, and rewriting the registers in preparation for
the next audio waveform that you wish to connect to the first one. This is
made easy by the timing of the audio interrupts and the existence of
back-up registers. The location and length registers are read by the
DMA channel before audio output begins. The DMA channel then stores the
values in back-up registers.
Once the original registers have been read by the DMA channel, you can
change their values without disturbing the operation you started with the
original register contents. Thus, you can write the contents of these
registers, start an audio output, and then rewrite the registers in
preparation for the next waveform you want to connect to this one.
Interrupts occur immediately after the audio DMA channel has read the
location and length registers and stored their values in the back-up
registers. Once the interrupt has occurred, you can rewrite the
registers with the location and length for the next waveform segment. This
combination of back-up registers and interrupt timing lets you keep one
step ahead of the audio DMA channel, allowing your sound output to be
continuous and smooth.
If you do not rewrite the registers, the current waveform will be
repeated. Each time the length counter reaches zero, both the location
and length registers are reloaded with the same values to continue the
audio output.
Audio DMA Example
5 / / Joining Tones / Audio DMA Example
This example details the system audio DMA action in a step-by-step
fashion.
Suppose you wanted to join together a sine and a triangle waveform,
end-to-end, for a special audio effect, alternating between them. The
following sequence shows the action of your program as well as its
interaction with the audio DMA system. The example assumes that the
period , volume , and length of the data set remains the same for the
sine wave and the triangle wave.
Interrupt Program
-----------------
If (wave = triangle)
write AUD0LCL with address of sine wave data.
Else if (wave = sine)
write AUD0LCL with address of triangle wave data.
Main Program
------------
1. Set up volume , period , and length .
2. Write AUD0LCL with address of sine wave data.
3. Start DMA.
4. Continue with something else.
System Response
---------------
As soon as DMA starts,
a. Copy to "back-up" length register from AUD0LEN .
b. Copy to "back-up" location register from AUD0LCL (will be used
as a pointer showing current data word to fetch).
c. Create an interrupt for the 680x0 saying that it has completed
retrieving working copies of length and location registers .
d. Start retrieving audio data each allocated DMA time slot.
5 / Producing Complex Sounds / Playing Multiple Tones at the Same Time
You can play multiple tones either by using several channels independently
or by summing the samples in several data sets, playing the summed data
sets through a single channel.
Since all four audio channels are independently programmable, each channel
has its own data set; thus a different tone or musical note can be played
on each channel.
5 / Producing Complex Sounds / Modulating Sound
To provide more complex audio effects, you can use one audio channel to
modulate another. This increases the range and type of effects that can be
produced. You can modulate a channel's frequency or amplitude , or do
both types of modulation on a channel at the same time.
Amplitude modulation affects the volume of the waveform. It is often
used to produce vibrato or tremolo effects. Frequency modulation affects
the period of the waveform. Although the basic waveform itself remains
the same, the pitch is increased or decreased by frequency modulation.
The system uses one channel to modulate another when you attach two
channels. The attach bits in the ADKCON register control how the data from
an audio channel is interpreted (see the table below). Normally, each
channel produces sound when it is enabled. If the "attach" bit for an
audio channel is set, that channel ceases to produce sound and its data is
used to modulate the sound of the next higher-numbered channel. When a
channel is used as a modulator, the words in its data set are no longer
treated as two individual bytes. Instead, they are used as "modulator"
words. The data words from the modulator channel are written into the
corresponding registers of the modulated channel each time the
period register of the modulator channel times out.
To modulate only the amplitude of the audio output, you must attach a
channel as a volume modulator. Define the modulator channel's data set as
a series of words, each containing volume information in the following
format:
Bits Function
---- --------
15 - 7 Not used
6 - 0 Volume information, V6 - V0
To modulate only the frequency, you must attach a channel as a period
modulator. Define the modulator channel's data set as a series of words,
each containing period information in the following format:
Bits Function
---- --------
15 - 0 Period information, P15 - P0
If you want to modulate both period and volume on the same channel,
you need to attach the channel as both a period and volume modulator. For
instance, if channel 0 is used to modulate both the period and frequency
of channel 1, you set two attach bits -- bit 0 to modulate the volume
and bit 4 to modulate the period . When period and volume are both
modulated, words in the modulator channel's data set are defined
alternately as volume and period information.
The sample set of data in Table 5-4 shows the differences in
interpretation of data when a channel is used directly for audio, when it
is attached as volume modulator, when it is attached as a period
modulator, and when it is attached as a modulator of both volume and
period .
Table 5-4: Data Interpretation in Attach Mode
Independent Modulating
Data (not Both Modulating Modulating
Words Modulating) Period and Volume Period Only Volume Only
----- ----------- ----------------- ----------- -----------
Word 1 |data|data| |volume for other channel| |period| |volume|
Word 2 |data|data| |period for other channel| |period| |volume|
Word 3 |data|data| |volume for other channel| |period| |volume|
Word 4 |data|data| |period for other channel| |period| |volume|
The lengths of the data sets of the modulator and the modulated channels
are completely independent.
Channels are attached by the system in a predetermined order, as shown in
Table 5-5. To attach a channel as a modulator, you set its attach bit to
1. If you set either the volume or period attach bits for a channel,
that channel's audio output will be disabled; the channel will be attached
to the next higher channel, as shown in Table 5-5. Because an attached
channel always modulates the next higher numbered channel, you cannot
attach channel 3. Writing a 1 into channel 3's modulate bits only disables
its audio output.
Table 5-5: Channel Attachment for Modulation
ADKCON Register
---------------
Bit Name Function
--- ---- --------
7 ATPER3 Use audio channel 3 to modulate nothing
(disables audio output of channel 3)
6 ATPER2 Use audio channel 2 to modulate period
of channel 3
5 ATPER1 Use audio channel 1 to modulate period
of channel 2
4 ATPER0 Use audio channel 0 to modulate period
of channel 1
3 ATVOL3 Use audio channel 3 to modulate nothing
(disables audio output of channel 3)
2 ATVOL2 Use audio channel 2 to modulate volume
of channel 3
1 ATVOL1 Use audio channel 1 to modulate volume
of channel 2
0 ATVOL0 Use audio channel 0 to modulate volume
of channel 1
5 Audio Hardware / Producing High-quality Sound
When trying to create high-quality sound, you need to consider the
following factors:
* Waveform transitions.
* Sampling rate.
* Efficiency.
* Noise reduction.
* Avoidance of aliasing distortion.
* Limitations of the low pass filter.
Making Waveform Transitions Noise Reduction
Sampling Rate Aliasing Distortion
Efficiency Low-Pass Filter
5 / Producing High-quality Sound / Making Waveform Transitions
To avoid unpleasant sounds when you change from one waveform to another,
you need to make the transitions smooth. You can avoid "clicks" by making
sure the waveforms start and end at approximately the same value. You can
avoid "pops" by starting a waveform only at a zero-crossing point. You can
avoid "thumps" by arranging the average amplitude of each wave to be
about the same value. The average amplitude is the sum of the bytes in
the waveform divided by the number of bytes in the waveform.
5 / Producing High-quality Sound / Sampling Rate
If you need high precision in your frequency output, you may find that the
frequency you wish to produce is somewhere between two available sampling
rates, but not close enough to either rate for your requirements. In those
cases, you may have to adjust the length of the audio data table in
addition to altering the sampling rate.
For higher frequencies, you may also need to use audio data tables that
contain more than one full cycle of the audio waveform to reproduce the
desired frequency more accurately, as illustrated in Figure 5-4.
Figure 5-4: Waveform with Multiple Cycles
5 / Producing High-quality Sound / Efficiency
A certain amount of overhead is involved in the handling of audio DMA.
If you are trying to produce a smooth continuous audio synthesis, you
should try to avoid as much of the system control overhead as possible.
Basically, the larger the audio buffer you provide to the system, the less
often it will need to interrupt to reset the pointers to the top of the
next buffer and, coincidentally, the lower the amount of system
interaction that will be required. If there is only one waveform buffer,
the hardware automatically resets the pointers, so no software overhead is
used for resetting them.
The Joining Tones section illustrated how you could join "ends" of tones
together by responding to interrupts and changing the values of the
location registers to splice tones together. If your system is heavily
loaded, it is possible that the response to the interrupt might not
happen in time to assure a smooth audio transition. Therefore, it is
advisable to utilize the longest possible audio table where a smooth
output is required. This takes advantage of the audio DMA capability as
well as minimizing the number of interrupts to which the 680x0 must
respond.
5 / Producing High-quality Sound / Noise Reduction
To reduce noise levels and produce an accurate sound, try to use the full
range of -128 to 127 when you represent a waveform. This reduces how much
noise (quantization error) will be added to the signal by using more bits
of precision. Quantization noise is caused by the introduction of
round-off error. If you are trying to reproduce a signal, such as a sine
wave, you can represent the amplitude of each sample with only so many
digits of accuracy. The difference between the real number and your
approximation is round-off error, or noise.
By doubling the amplitude , you create half as much noise because the
size of the steps of the wave form stays the same and is therefore a
smaller fraction of the amplitude.
In other words, if you try to represent a waveform using, for example, a
range of only +3 to -3, the size of the error in the output would be
considerably larger than if you use a range of +127 to -128 to represent
the same signal. Proportionally, the digital value used to represent the
waveform amplitude will have a lower error. As you increase the number
of possible sample levels, you decrease the relative size of each step
and, therefore, decrease the size of the error.
To produce quiet sounds, continue to define the waveform using the full
range, but adjust the volume . This maintains the same level of accuracy
(signal-to-noise ratio) for quiet sounds as for loud sounds.
5 / Producing High-quality Sound / Aliasing Distortion
When you use sampling to produce a waveform, a side effect is caused when
the sampling rate "beats" or combines with the frequency you wish to
produce. This produces two additional frequencies, one at the sampling
rate plus the desired frequency and the other at the sampling rate minus
the desired frequency. This phenomenon is called aliasing distortion.
Aliasing distortion is eliminated when the sampling rate exceeds the
output frequency by at least 7 KHz. This puts the beat frequency outside
the range of the low-pass filter , cutting off the undesirable
frequencies. Figure 5-5 shows a frequency domain plot of the anti-aliasing
low-pass filter used in the system.
/|\
|
0db |________ filter
| \ response
| \
| \
| \ filter passes all frequences below about 5kHz.
| \
-30db |_____________\_____ ___________________________________________\
| | | | | | /
5kHz 10kHz 15kHz 20kHz 25kHz 30kHz
Figure 5-5: Frequency Domain Plot of Low-Pass Filter
Figure 5-6 shows that it is permissible to use a 12 KHz sampling rate to
produce a 4 KHz waveform. Both of the beat frequencies are outside the
range of the filter, as shown in these calculations:
12 + 4 = 16 KHz
12 - 4 = 8 KHz
/|\ filter 12kHz sampling frequencey
| response |
0db |________ |
| \ Diff. | Sum
| | \ | | |
| | \ | | |
| | \ | | |
| 4kHz| \ | | |
-30db |_______|_____\_|___ ___|_______|_______________________________\
| | | | | | | /
5kHz 10kHz 15kHz 20kHz 25kHz 30kHz
|
|
desired output frequency
Figure 5-6: Noise-free Output (No Aliasing Distortion)
You can see in Figure 5-7 that is unacceptable to use a 10 KHz sampling
rate to produce a 4 KHz waveform. One of the beat frequencies (10 - 4) is
within the range of the filter, allowing some of that undesirable
frequency to show up in the audio output.
/|\ filter 10kHz sampling frequencey
| response |
0db |________ |
| \ Diff. | Sum
| | \ | | |
| | \| | |
| | \ | |
| 4kHz| |\ | |
-30db |_______|___|_\_____|_______|___________________________________\
| | | | | | | /
5kHz 10kHz 15kHz 20kHz 25kHz 30kHz
|
|
desired output frequency
Figure 5-7: Some Aliasing Distortion
All of this gives rise to the following equation, showing that the
sampling frequency must exceed the output frequency by at least 7 KHz, so
that the beat frequency will be above the cutoff range of the
anti-aliasing filter :
Minimum sampling rate = highest frequency component + 7 KHz
The frequency component of the equation is stated as "highest frequency
component" because you may be producing a complex waveform with multiple
frequency elements, rather than a pure sine wave.
5 / Producing High-quality Sound / Low-Pass Filter
The system includes a low-pass filter that eliminates
aliasing distortion as described above. This filter becomes active
around 4 KHz and gradually begins to attenuate (cut off) the signal.
Generally, you cannot clearly hear frequencies higher than 7 KHz.
Therefore, you get the most complete frequency response in the frequency
range of 0 - 7 KHz. If you are making frequencies from 0 to 7 KHz, you
should select a sampling rate no less than 14 KHz, which corresponds to a
sampling period in the range 124 to 256.
At a sampling period around 320, you begin to lose the higher frequency
values between 0 KHz and 7 KHz, as shown in Table 5-6.
Table 5-6: Sampling Rate and Frequency Relationship
Sampling Sampling Maximum Output
Period Rate (KHz) Frequency (KHz)
-------- ---------- ---------------
Maximum sampling rate 124 29 7
Minimum sampling rate 256 14 7
for 7 KHz output
Sampling rate too low 320 11 4
for 7 KHz output
In A2000's with 2 layer motherboards and later A500 models there is a
control bit that allows the audio output to bypass the low pass filter.
This control bit is the same output bit of the 8520 CIA that controls
the brightness of the red "power" LED (CIA A $BFE001 - Bit 1: /LED).
Bypassing the filter allows for improved sound in some applications, but
an external filter with an appropriate cutoff frequency may be required.
5 Audio Hardware / Using Direct (Non-DMA) Audio Output
It is possible to create sound by writing audio data one word at a time to
the audio output addresses, instead of setting up a list of audio data in
memory. This method of controlling the output is more processor-intensive
and is therefore not recommended.
To use direct audio output, do not enable the DMA for the audio channel
you wish to use; this changes the timing of the interrupts . The normal
interrupt occurs after a data address has been read; in direct audio
output, the interrupt occurs after one data word has been output.
Unlike in the DMA-controlled automatic data output, in direct audio
output, if you do not write a new set of data to the output addresses
before two sampling intervals have elapsed, the audio output will cease
changing. The last value remains as an output of the
digital-to-analog converter .
The volume and period registers are set as usual.
5 Audio Hardware / The Equal-tempered Musical Scale
Table 5-7 gives a close approximation of the equal-tempered scale over one
octave when the sample size is 16 bytes. The " Period " column gives the
period count you enter into the period register . The length register
AUDxLEN should be set to 8 (16 bytes = 8 words). The sample should
represent one cycle of the waveform.
Table 5-7: Equal-tempered Octave for a 16 Byte Sample
NTSC PAL Ideal Actual NTSC Actual PAL
Period Period Note Frequency Frequency Frequency
------ ------ ---- --------- ----------- ----------
254 252 A 880.0 880.8 879.7
240 238 A# 932.3 932.2 931.4
226 224 B 987.8 989.9 989.6
214 212 C 1046.5 1045.4 1045.7
202 200 C# 1108.7 1107.5 1108.4
190 189 D 1174.7 1177.5 1172.9
180 178 D# 1244.5 1242.9 1245.4
170 168 E 1318.5 1316.0 1319.5
160 159 F 1396.9 1398.3 1394.2
151 150 F# 1480.0 1481.6 1477.9
143 141 G 1568.0 1564.5 1572.2
135 133 G# 1661.2 1657.2 1666.8
The table above shows the period values to use with a 16 byte sample to
make tones in the second octave above middle C. To generate the tones in
the lower octaves, there are two methods you can use, doubling the period
value or doubling the sample size.
When you double the period , the time between each sample is doubled so
the sample takes twice as long to play. This means the frequency of the
tone generated is cut in half which gives you the next lowest octave.
Thus, if you play a C with a period value of 214, then playing the same
sample with a period value of 428 will play a C in the next lower octave.
Likewise, when you double the sample size, it will take twice as long to
play back the whole sample and the frequency of the tone generated will be
in the next lowest octave. Thus, if you have an 8 byte sample and a 16
byte sample of the same waveform played at the same speed, the 16 byte
sample will be an octave lower.
A sample for an equal-tempered scale typically represents one full cycle
of a note. To avoid aliasing distortion with these samples you should
use period values in the range 124-256 only. Periods from 124-256
correspond to playback rates in the range 14-28K samples per second which
makes the most effective use of the Amiga's 7 KHz cut-off filter to
prevent noise. To stay within this range you will need a different sample
for each octave.
If you cannot use a different sample for each octave, then you will have
to adjust the period value over its full range 124-65536. This is
easier for the programmer but can produce undesirable high-frequency noise
in the resulting tone. Read the section called Aliasing Distortion for
more about this.
The values in Table 5-7 were generated using the formula shown below. To
calculate the tone generated with a given sample size and period use:
Clock Constant 3579545
Frequency = --------------------- = ----------- = 880.8 Hz
Sample Bytes * Period 16 * Period
The clock constant in an NTSC system is 3579545 ticks per second. In a
PAL system, the clock constant is 3546895 ticks per second. Sample bytes
is the number of bytes in one cycle of the waveform sample. (The clock
constant is derived from dividing the system clock value by 2. The value
will vary when using an external system clock, such as a genlock.)
Using the formula above you can generate the values needed for the
even-tempered scale for any arbitrary sample. Table 5-8 gives a close
approximation of a five octave even tempered-scale using five samples. The
values were derived using the formula above. Notice that in each octave
period values are the same but the sample size is halved. The samples
listed represent a simple triangular wave form.
Table 5-8: Five Octave Even-tempered Scale
NTSC PAL Ideal Actual NTSC Actual PAL
Period Period Note Frequency Frequency Frequency
------ ------ ---- --------- ----------- ----------
254 252 A 55.00 55.05 54.98
240 238 A# 58.27 58.26 58.21
226 224 B 61.73 61.87 61.85
214 212 C 65.40 65.34 65.35
202 200 C# 69.29 69.22 69.27
190 189 D 73.41 73.59 73.30
180 178 D# 77.78 77.68 77.83
170 168 E 82.40 82.25 82.47
160 159 F 87.30 87.39 87.13
151 150 F# 92.49 92.60 92.36
143 141 G 98.00 97.78 98.26
135 133 G# 103.82 103.57 104.17
Sample size = 256 bytes, AUDxLEN = 128
254 252 A 110.00 110.10 109.96
240 238 A# 116.54 116.52 116.43
226 224 B 123.47 123.74 123.70
214 212 C 130.81 130.68 130.71
202 200 C# 138.59 138.44 138.55
190 189 D 146.83 147.18 146.61
180 178 D# 155.56 155.36 155.67
170 168 E 164.81 164.50 164.94
160 159 F 174.61 174.78 174.27
151 150 F# 184.99 185.20 184.73
143 141 G 196.00 195.56 196.52
135 133 G# 207.65 207.15 208.35
Sample size = 128 bytes, AUDxLEN = 64
254 252 A 220.00 220.20 219.92
240 238 A# 233.08 233.04 232.86
226 224 B 246.94 247.48 247.41
214 212 C 261.63 261.36 261.42
202 200 C# 277.18 276.88 277.10
190 189 D 293.66 294.37 293.23
180 178 D# 311.13 310.72 311.35
170 168 E 329.63 329.00 329.88
160 159 F 349.23 349.56 348.55
151 150 F# 369.99 370.40 369.47
143 141 G 392.00 391.12 393.05
135 133 G# 415.30 414.30 416.70
Sample size = 64 bytes, AUDxLEN = 32
254 252 A 440.0 440.4 439.8
240 238 A# 466.16 466.09 465.72
226 224 B 493.88 494.96 494.82
214 212 C 523.25 522.71 522.83
202 200 C# 554.37 553.77 554.20
190 189 D 587.33 588.74 586.46
180 178 D# 622.25 621.45 622.70
170 168 E 659.26 658.00 659.76
160 159 F 698.46 699.13 697.11
151 150 F# 739.99 740.80 738.94
143 141 G 783.99 782.24 786.10
135 133 G# 830.61 828.60 833.39
Sample size = 32 bytes, AUDxLEN = 16
254 252 A 880.0 880.8 879.7
240 238 A# 932.3 932.2 931.4
226 224 B 987.8 989.9 989.6
214 212 C 1046.5 1045.4 1045.7
202 200 C# 1108.7 1107.5 1108.4
190 189 D 1174.7 1177.5 1172.9
180 178 D# 1244.5 1242.9 1245.4
170 168 E 1318.5 1316.0 1319.5
160 159 F 1396.9 1398.3 1394.2
151 150 F# 1480.0 1481.6 1477.9
143 141 G 1568.0 1564.5 1572.2
135 133 G# 1661.2 1657.2 1666.8
Sample size = 16 bytes, AUDxLEN = 8
256 Byte Sample
---------------
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62
64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126
128 126 124 122 120 118 116 114 112 110 108 106 104 102 100 98
96 94 92 90 88 86 84 82 80 78 76 74 72 70 68 66
64 62 60 58 56 54 52 50 48 46 44 42 40 38 36 34
32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2
0 -2 -4 -6 -8 -10 -12 -14 -16 -18 -20 -22 -24 -26 -28 -30
-32 -34 -36 -38 -40 -42 -44 -46 -48 -50 -52 -54 -56 -58 -60 -62
-64 -66 -68 -70 -72 -74 -76 -78 -80 -82 -84 -86 -88 -90 -92 -94
-96 -98-100-102-104-106-108-110-112-114-116-118-120-122-124-126
-127-126-124-122-120-118-116-114-112-110-108-106-104-102-100 -98
-96 -94 -92 -90 -88 -86 -84 -82 -80 -78 -76 -74 -72 -70 -68 -66
-64 -62 -60 -58 -56 -54 -52 -50 -48 -46 -44 -42 -40 -38 -36 -34
-32 -30 -28 -26 -24 -22 -20 -18 -16 -14 -12 -10 -8 -6 -4 -2
128 Byte Sample
---------------
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124
128 124 120 116 112 108 104 100 96 92 88 84 80 76 72 68
64 60 56 52 48 44 40 36 32 28 24 20 16 12 8 4
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124
-127-124-120-116-112-108-104-100 -96 -92 -88 -84 -80 -76 -72 -68
-64 -60 -56 -52 -48 -44 -40 -36 -32 -28 -24 -20 -16 -12 -8 -4
64 Byte Sample
--------------
0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120
128 120 112 104 96 88 80 72 64 56 48 40 32 24 16 8
0 -8 -16 -24 -32 -40 -48 -56 -64 -72 -80 -88 -96-104-112-120
-127-120-112-104 -96 -88 -80 -72 -64 -56 -48 -40 -32 -24 -16 -8
32 Byte Sample
--------------
0 16 32 48 64 80 96 112 128 112 96 80 64 48 32 16
0 -16 -32 -48 -64 -80 -96-112-127-112 -96 -80 -64 -48 -32 -16
16 Byte Sample
--------------
0 32 64 96 128 96 64 32 0 -32 -64 -96-127 -96 -64 -32
5 Audio Hardware / Decibel Values for Volume Ranges
Table 5-9 provides the corresponding decibel values for the volume
ranges of the Amiga system.
Table 5-9: Decibel Values and Volume Ranges
Volume Decibel Value Volume Decibel Value
------ ------------- ------ -------------
64 0.0 32 -6.0
63 -0.1 31 -6.3
62 -0.3 30 -6.6
61 -0.4 29 -6.9
60 -0.6 28 -7.2
59 -0.7 27 -7.5
58 -0.9 26 -7.8
57 -1.0 25 -8.2
56 -1.2 24 -8.5
55 -1.3 23 -8.9
54 -1.5 22 -9.3
53 -1.6 21 -9.7
52 -1.8 20 -10.1
51 -2.0 19 -10.5
50 -2.1 18 -11.0
49 -2.3 17 -11.5
48 -2.5 16 -12.0
47 -2.7 15 -12.6
46 -2.9 14 -13.2
45 -3.1 13 -13.8
44 -3.3 12 -14.5
43 -3.5 11 -15.3
42 -3.7 10 -16.1
41 -3.9 9 -17.0
40 -4.1 8 -18.1
39 -4.3 7 -19.2
38 -4.5 6 -20.6
37 -4.8 5 -22.1
36 -5.0 4 -24.1
35 -5.2 3 -26.6
34 -5.5 2 -30.1
33 -5.8 1 -36.1
0 Minus infinity
5 Audio Hardware / The Audio State Machine
For an explanation of the various states, refer to Figure 5-8. There is
one audio state machine for each channel. The machine has eight states and
is clocked at the clock constant rate (3.58 MHz NTSC). Three of the states
are basically unused and just transfer back to the idle (000) state. One
of the paths out of the idle state is designed for interrupt-driven
operation (processor provides the data), and the other path is designed
for DMA-driven operation (the "Agnus" special chip provides the data).
In interrupt-driven operation, transfer to the main loop (states 010 and
011) occurs immediately after data is written by the processor. In the 010
state the upper byte is output, and in the 011 state the lower byte is
output. Transitions such as 010->011->010 occur whenever the period
counter counts down to one. The period counter is reloaded at these
transitions. As long as the interrupt is cleared by the processor in
time, the machine remains in the main loop. Otherwise, it enters the idle
state. Interrupts are generated on every word transition (011->010).
In DMA-driven operation, transition to the 001 state occurs and DMA
requests are sent to Agnus as soon as DMA is turned on. Because of
pipelining in Agnus, the first data word must be thrown away. State 101 is
entered as soon as this word arrives; a request for the next data word has
already gone out. When the data arrives, state 010 is entered and the main
loop continues until the DMA is turned off. The length counter counts down
once with each word that comes in. When it finishes, a DMA restart request
goes to Agnus along with the regular DMA request. This tells Agnus to
reset the pointer to the beginning of the table of data. Also, the length
counter is reloaded and an interrupt request goes out soon after the
length counter finishes (counts to one). The request goes out just as the
last word of the waveform starts its output.
DMA requests and restart requests are transferred to Agnus once each
horizontal line, and the data comes back about 14 clock cycles later (the
duration of a clock cycle is 280 ns).
In attach mode, things run a little differently. In attach volume,
requests occur as they do in normal operation (on the 011->010
transition). In attach period, a set of requests occurs on the 010->011
transition. When both attach period and attach volume are high, requests
occur on both transitions.
If the sampling rate is set much higher than the normal maximum sampling
rate (approximately 29 KHz), the two samples in the buffer register will
be repeated. If the filter on the Amiga is bypassed and the volume is
set to the maximum ($40), this feature can be used to make modulated
carriers up to 1.79 MHz. The modulation is placed in the memory map, with
plus values in the even bytes and minus values in the odd bytes.
The symbols used in the state diagram are explained in the following list.
Upper-case names indicate external signals; lower-case names indicate
local signals.
AUDxON DMA on "x" indicates channel number (signal from DMACON ).
AUDxIP Audio interrupt pending (input to channel from interrupt
circuitry).
AUDxIR Audio interrupt request (output from channel to interrupt
circuitry)
intreq1 Interrupt request that combines with intreq2 to form
AUDxIR..
intreq2 Prepare for interrupt request. Request comes out after the
next 011->010 transition in normal operation.
AUDxDAT Audio data load signal. Loads 16 bits of data to audio
channel.
AUDxDR Audio DMA request to Agnus for one word of data.
AUDxDSR Audio DMA request to Agnus to reset pointer to start of
block.
dmasen Restart request enable.
percntrld Reload period counter from back-up latch typically written
by processor with AUDxPER (can also be written by attach
mode).
percount Count period counter down one latch.
perfin Period counter finished (value = 1).
lencntrld Reload length counter from back-up latch.
lencount Count length counter down one notch.
lenfin Length counter finished (value = 1).
volcntrld Reload volume counter from back-up latch.
pbufld1 Load output buffer from holding latch written to by AUDxDAT.
pbufld2 Like pbufld1, but only during 010->011 with attach period.
AUDxAV Attach volume. Send data to volume latch of next channel
instead of to D->A converter.
AUDxAP Attach period. Send data to period latch of next channel
instead of to the D->A converter.
penhi Enable the high 8 bits of data to go to the D->A converter.
napnav /AUDxAV * /AUDxAP + AUDxAV -- no attach stuff or else attach
volume. Condition for normal DMA and interrupt requests.
sq2,1,0 The name of the state flip-flops, MSB to LSB.
Figure 5-8: Audio State Diagram
ECS Audio.
----------
For information on the audio hardware in the Enhanced Chip Set,
see the ECS register map in Appendix C.
Converted on 22 Apr 2000 with RexxDoesAmigaGuide2HTML 2.1 by Michael Ranner.