This directory contains version 1.2 of a simple 16 bit PCM <-> 4 bit
ADPCM coder and decoder. See the source and the manpage for comments
on the algorithm.

If you have previously used version 1.0: there was a bug in it. This
version fixes the bug. (1.1 fixed that, but had another slight bug
that caused loss of quality on SGI machines).

The routines have been tested on an SGI Indigo running Irix 4 and
5 and on a Sun Sparc SLC running SunOS 4.1.1. There are no real
machine dependencies, though, so there should be no problems on other
architectures. 

There is a timing program to test how fast the stuff runs on your
machine. Here are some sample numbers:

R4000 Indigo:	compress: 1.1Msample/sec, decompress: 1.7Msample/sec
R3000 Indigo:	compress: 410Ksample/sec, decompress: 850Ksample/sec
Sun SLC:	compress: 250Ksample/sec, decompress: 420Ksample/sec
Mac-IIsi	compress   21Ksample/sec, decompress:  35Ksample/sec
486/DX2-33 SCO: compress  550Ksample/sec, decompress: 865Ksample/sec
486/33 linux:	compress  278Ksample/sec, decompress: 464Ksample/sec
386/33 gcc:	compress  117Ksample/sec, decompress: 168Ksample/sec
(the Borland and MS compilers are a little slower)

Also included are some simple test programs that convert audio files
to/from 4bit ADPCM samples. Rawcaudio/rawdaudio convert to/from raw
16bit PCM files; sgicaudio/sgidaudio convert to/from SGI AIFF files
and suncaudio/sundaudio convert to/from SUN/NeXT format audio files.
The Sun program was donated by Hughes Doug, hughes@sde.mdso.vf.ge.com
(it is actually only one program and looks at the program name to
decide whether to compress or decompress). Oh yeah, the sun and sgi
compressors will probably only compile on those machines. Also, for
the sgi compressor you need the Digital Media Developers Option.

Note: I have had to make a few changes to the sun audio converter, but
unfortunately I have no way of testing the result (since it needs
Solaris 1.somethingorother which I don't have). If the program does
not work and someone fixes it I would like to get a copy.

Finally, there is a uuencoded adpcm sound file of me saying "hello
world" (with a cold) that you can use to test that everything works
correctly.

If you use this package I would like to hear from you.
I am especially interested in people who can test interoperability
with proven Intel/DVI ADPCM coders. I have tried to get the algorithm
correct, but you never know....

Answers to often-asked questions:
- No, this is *not* a G.721 coder/decoder. The algorithm used by G.721
  is very complicated, requiring oodles of floating-point ops per
  sample (resulting in very poor performance). I have not done any
  tests myself but various people have assured my that 721 quality is
  actually lower than DVI quality.

- No, it probably isn't a RIFF ADPCM decoder either. Trying to decode
  RIFF ADPCM with these routines seems to result in something
  recognizable but very distorted.

- No, it is not a CDROM-XA coder either, as far as I know. I haven't
  come across a good description of XA yet.

- No, testc and testd are not full-blown audio-file converters, only
  simple test programs. If you write a file-converter (like caudio.c,
  which compresses Sun audio files) and you're willing to donate it
  I'd be very happy to include it in the distribution.

- No, I know of no standard audio file format that supports idvi
  adpcm. If you find one, please let me know.

- Also, I know next-to-nothing about who IMA are. Their address, though,
  from their May 1992 proceedings (where I got the algorithm from):
	IMA Compatability Project Headquarters
	9 Randall Court
	Annapolis MD 21401
	USA

	Phone: (410) 626-1380
	Fax:   (410) 263-0590

They might be able to send back issues of their proceedings, I don't
know.

	Jack Jansen
	Centre for Mathematics and Computer Science
	Kruislaan 413
	Amsterdam
	the Netherlands

	+31 20 592 4098
	Jack.Jansen@cwi.nl
