/* * @(#) MPEG Audio Player maplay 1.2, last edit of this file: 6/23/94 13:02:49 * @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de) * @(#) Berlin University of Technology * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ This is the README file of the MPEG Audio Player maplay, Version 1.2. Besides this file, you should now own a copy of the following files: ANNOUNCEMENT the announcement for this release INSTALL infos about compiling and installing the program COPYING the GNU General Public License Makefile a makefile configuration.sh a shell script used by the makefile and the source files all.h maplay.cc subband_layer_1.h crc.cc obuffer.cc subband_layer_2.cc crc.h obuffer.h subband_layer_2.h header.cc scalefactors.cc synthesis_filter.cc header.h scalefactors.h synthesis_filter.h ibitstream.cc subband.h ulaw.cc ibitstream.h subband_layer_1.cc ulaw.h ------------------------------------------------------------------------------- 0) Introduction MPEG is a standard created by the ISO (International Organization for Standardization) and the IEC (International Electrotechnical Commission). The full name of this standard is "ISO/IEC DIS 11172: Information Technology - Coding of moving pictures and associated audio for digital storage media ut to about 1.5 Mbit/s". As the name already states, it deals with digital video and audio. The video part of this standard has inspired many people to write decoders and a few encoders for it. Best known should be the Berkeley player. Players for the audio part on the other hand are very rare. The ones I know are the XING player for Windoze and a sample implementation of the ISO, which also includes an encoder. The audio part of the MPEG standard specifies three layers, whereat each layer specifies its own file format. All three layers are using similar audio coding techniques, but they vary in efficiency and complexity. Layer I needs the fewest calculation time for en-/decoding a stream, layer III the most. But a layer I MPEG audio stream is bigger than a layer III stream at the same quality. This program is able to decode and play only layer I and II streams, layer III is not supported (yet?!?). Like the MPEG video standard, the audio part also uses a lossy compression algorithm, which means that you can't get back 100% the original from a MPEG audio stream. Layer II MPEG audio streams are compressed by ratios from 1:3 up to 1:24 compared to raw PCM data, like on an audio CD. But the quality is still very (very) near to the original at ratios between 1:5 and 1:12. You'll love it... :-) ------------------------------------------------------------------------------- 1) What does maplay? maplay version 1.2 is the second release of my MPEG audio player/decoder. It decodes layer I and layer II MPEG audio streams and plays them using a CD-quality audio device. Currently supported devices are the dbri device of SPARC 10 computers and the audio ports of Silicon Graphics Indigo machines. Thanks to Louis P. Kruger (lpkruger@phoenix. Princeton.EDU), maplay 1.2 can also use the /dev/dsp device under Linux. Louis has tested it with the Pro Audio Spectrum 16 soundcard. Sound Blaster 16 and Gravis Ultrasound cards should also work, but a bug in the dsp driver prevents stereo playback on Gravis Ultrasound cards. An amd device of a SPARC 2/IPX/... machine can be used, too, but this device is only capable of producing audio output at 8 kHz in u-law format, which sounds like transmitted through a telephone. Other audio device are not supported directly, but can be used with the "decode to stdout" option and an audio format converter. Besides it shouldn't be a problem to adapt the program to other audio devices. The player supports all modes, which are single channel, stereo, joint stereo and dual channel, and all bitrates except free mode. The missing free mode support should not be a problem for now, because I haven't seen such a stream yet. maplay needs approximately 46% CPU time on SPARC 10/40 machines and 50% on Indigos for realtime stereo playback of a 44.1 kHz 128 kbit/s stream. Single channel playback needs about the half CPU time. On a SPARCstation IPX, maplay needs about 43% CPU time for realtime mono playback. Stereo playback is not possible via an amd device. Besides realtime playing of audio streams, maplay can decode streams to stdout for further conversions. The output consists of 16 bit signed PCM values. For stereo streams, the values are interleaved, which means that a value for the left channel is followed by a value for the right channel and so on. If maplay has been compiled for u-law output, the output consists of 8 bit u-law samples at a rate of 8 kHz, no matter what frequency the stream uses. ------------------------------------------------------------------------------- 2) How to create a maplay binary? Please read the install file for this topic. ------------------------------------------------------------------------------- 3) How to start the program? For a quick mono test enter "./maplay -v -l filename", where filename is the name of an audio stream, like "things.mp2". This stream has been posted along with the sources and is the beginning of Roxette's song "Things Will Never Be The Same". It is coded in joint stereo mode with 128 kbit/s, which is a compression ratio of 1:11. If the output is ok, you can test stereo playback by leaving out the -l option. If the stereo output stutters, the problem is not enough free CPU time in most cases. Stereo output is not possible when using an amd u-law device. If maplay shows error messages like "ioctl AUDIO_GETDEV on /dev/audio: ..." and maplay was compiled for u-law output, please try out the -amd option. This option forces maplay to treat /dev/audio as an amd device and may be required on SPARC clones. To convert a MPEG audio stream into other audio formats, you can use "maplay -v -s filename | your_converter". Unfortunately, I can't be of much help for you to find such a converter. The only good converter I know is the "soundfiler" on Indigos. But if you would have an Indigo, you wouldn't need a converter... ------------------------------------------------------------------------------- 4) Command line options maplay [-v] [-s] [-l] [-r] [-us] [-uh] [-ul] [-amd] [-c] [-f ushort] filename with these options: filename filename of a MPEG audio stream or - for stdin -h short help -v verbose mode You will get information about the stream, like mode, bitrate, copyright etc., if you use this option. -s stdout mode This option tells the program to decode the stream to stdout. The created output contains 16 bit signed PCM samples. If the binary has been compiled for 8 kHz u-law format usage, the output consists of 8 bit u-law samples at a 8 kHz rate. If the stream is in stereo mode, the samples of both channels are interleaved, the sample for the left channel first. -l maplay decodes (and plays) the left channel of stereo streams only. This option halves the required CPU time. -r Same as above, but decodes the right channel only -us, -uh These options are available on SPARCstations only. They specify where the audio signal should be send to: "-us" means speaker and "-uh" headphone jack. -ul This option is available on machines with the dbri device and sends the audio output to the line out jack. -amd This option forces maplay to treat /dev/audio as an amd device. Use it if your SPARC clone has an amd device, but maplay doesn't recognize it. You may also use this option on a machine with a dbri device, because the dbri device can also produce u-law output. But I suggest to recompile the program without the ULAW define in this case to get the CD-quality output. -c This option instructs the program to report filter range violations to stderr. Sometimes PCM values calculated by the synthesis filter exceede the 16 bit boundary and must be mapped to these boundaries. If you can hear this, you may use the next option. -f ushort maplay uses this scalefactor instead of the default value 32768 for the synthesis filter. You can reduce or eliminate range violations with this option, but lower scalefactor values reduce the signal-to-noise ratio, too. I can't remember when I used this option the last time myself. Ok, that's all for now and this release, I hope you like it, Tobias Bading (bading@cs.tu-berlin.de)