[comp.sys.amiga.programmer] 14-bit audio possible with the Amiga

mykes@sega0.SF-Bay.ORG (Mike Schwartz) (03/24/91)

Since the Amiga audio hardware has an 8-bit DAC plus 6 bits of volume
for each audio voice, it should be trivial to play 14-bit samples.  Using
Audio interrupts, you can feed audio data and volume right to the DACs
(it would use a lot of CPU on a 68000).  Using another feature of the 
hardware, you can have the output of one channel modulate the volume of
another.  So it looks like you can use DMA to do 2 channels of 14-bit
sound.

Any feedback?

--
*******************************************************
* Assembler Language separates the men from the boys. *
*******************************************************

<DXB132@psuvm.psu.edu> (03/24/91)

In article <mykes.0120@sega0.SF-Bay.ORG>, mykes@sega0.SF-Bay.ORG (Mike Schwartz)
says:

>Since the Amiga audio hardware has an 8-bit DAC plus 6 bits of volume
>for each audio voice, it should be trivial to play 14-bit samples.  Using
>Audio interrupts, you can feed audio data and volume right to the DACs
>(it would use a lot of CPU on a 68000).  Using another feature of the
>hardware, you can have the output of one channel modulate the volume of
>another.  So it looks like you can use DMA to do 2 channels of 14-bit
>sound.

>Any feedback?

It's certainly possible. It might not be "true" 14 bit, but certainly much
better than 8 bit.

The other way to do it is to set one channel's volume to 1 and another to
64 and just let the soft channel be the least significant bits of the
14 bit audio data.

Do the same with the other two channels and you now have "15 bit" sound!
Then use a non-real-time synthesis program and get an infinite number of
simulatenous "voices" with 15 bit sound! (getting carried away now :-)

-- Dan Babcock

trantow@csd4.csd.uwm.edu (Jerry J Trantow) (03/25/91)

In article <mykes.0120@sega0.SF-Bay.ORG> mykes@sega0.SF-Bay.ORG (Mike Schwartz) writes:
>Since the Amiga audio hardware has an 8-bit DAC plus 6 bits of volume
>for each audio voice, it should be trivial to play 14-bit samples.  Using
>Audio interrupts, you can feed audio data and volume right to the DACs
>(it would use a lot of CPU on a 68000).  Using another feature of the 
>hardware, you can have the output of one channel modulate the volume of
>another.  So it looks like you can use DMA to do 2 channels of 14-bit
>sound.
>
>Any feedback?

I have done a little bit of work on this.(using the DMA volume modulation)
The first approach that I tried was believing that the product of the two
channels would be the output.  I divided each 14 bit sample into two factors
(volume <=64) * (-128<=waveform<=127) and got miserable results.  I don't
think the two DACs change at the same time and you get a glitch when the 
volume changes much. ( I have not verified this on a scope.)

My other attempt was to use an envelope which has the property of changing
the volume gradually.  This would reduce the volume change glitch, and 
would allow the volume to be sampled at a slower rate.

I am VERY interested in what others have found.  (BTW, audiotools has a 
demo of volume modulation.)

_____________________________________________________________________________
Jerry J. Trantow          | A basic premise is an absolute that permits no 
8967 N. Pelham Parkway    | co-operation with its antithesis and 
Milwaukee, Wi 53217-1954  | tolerates no tolerance.
(414) 228-4689            |                           Ayn Rand
_____________________________________________________________________________

karl@sugar.hackercorp.com (Karl Lehenbauer) (03/25/91)

In article <mykes.0120@sega0.SF-Bay.ORG> mykes@sega0.SF-Bay.ORG (Mike Schwartz) writes:
>Since the Amiga audio hardware has an 8-bit DAC plus 6 bits of volume
>for each audio voice, it should be trivial to play 14-bit samples.  Using
>Audio interrupts, you can feed audio data and volume right to the DACs
>(it would use a lot of CPU on a 68000).  Using another feature of the 
>hardware, you can have the output of one channel modulate the volume of
>another.  So it looks like you can use DMA to do 2 channels of 14-bit
>sound.

Yes, it is possible and Soundscape does it.  However, I wouldn't call it
14-bit because, unless you pretty much dedicate the CPU to the job, no
arbitrary sample could have an arbitrary 14-bit value.  I would call this 8-bit
companded, like the Emulator II has.  The way to do it, then, is to subdivide
the sample into parts, calculate the RMS level of each subpart, figure out a
6-bit volume level, then scale the samples to be full-scale 8-bit.  I looked
into doing this for my SMUS and MIDI players, but haven't done so yet and am
now not too likely to.  

You'll also need a 14-bit or greater sampling source.  I use a Casio FZ-1
16-bit sampling synth, download the samples at full 16-bit resolution over
MIDI to the Amiga, then downsample.  The piano and bass included in my
recently posted SMUS player were created in this manner, and I think you'll
agree if you listen to them (with the filter off) that they are pushing the
state of the art in Amiga sounds played only on the built-in hardware.

-- 
-- uunet!sugar!karl		Keeping 255 messages and deleting 158.
-- 

jlavi@ujocs.joensuu.fi (Jarkko Lavinen) (03/26/91)

DXB132@psuvm.psu.edu writes:

>It's certainly possible. It might not be "true" 14 bit, but certainly much
>better than 8 bit.

>The other way to do it is to set one channel's volume to 1 and another to
>64 and just let the soft channel be the least significant bits of the
>14 bit audio data.
	Mixing two channels sounds great. That way in theory we should 
get 14 bits linear output. However there are few things to remember...
14 bits means 84db dynamic range. I don't think Amigas audio hardware is
designed for near CD quality ? Thinking about the simple circuits there
are, 10 bits would sound more reasonable.

	Mixing may not be linear. The two channels may not have the same
zero-point. This can be overcame with software, adjusting the zero level
of the channel with lower volume. This also reduces the amount of bits
available. At least one bit has to be sacrfied for this. A simple test
might be to play in one channel square wave with amplitude 1, volume 64 and
on another channel with amplitude 64, volume 1. Now delaying the latter
channel by 180 degrees (so that when one channel outputs +64, another -64)
SHOULD result in zero output. I bet You get nothing but zero out!

	Thinking about DAC having unlinearity, say, +-0.5bits. In fact 
one should possibly calibrate all the combinations of the two channels.
The unlinearity may easily shift, resulting the performance changing
during the session...

	But even then, If the 14 bits isn't reality, some 10 or 11 bits
dynamic range would certainly be welcome!

	Jarkko Lavinen

DXB132@psuvm.psu.edu (03/27/91)

In article <1991Mar26.154013.3996@ujocs.joensuu.fi>, jlavi@ujocs.joensuu.fi
(Jarkko Lavinen) says:

>        But even then, If the 14 bits isn't reality, some 10 or 11 bits
>dynamic range would certainly be welcome!

My conclusion exactly...

-- Dan Babcock