|
|
| |
MADPLAY(1) |
MPEG Audio Decoder |
MADPLAY(1) |
madplay - decode and play MPEG audio stream(s)
madplay [options] file ...
madplay [options] -o [type:]path
file ...
madplay is a command-line MPEG audio decoder and player based on the MAD
library (libmad).
MAD is a high-quality MPEG audio decoder. It currently supports
MPEG-1 and the MPEG-2 extension to Lower Sampling Frequencies, as well as
the so-called MPEG 2.5 format. All three audio layers
(Layer I, Layer II, and Layer III a.k.a. MP3) are fully
implemented.
Among the special features of MAD are 24-bit PCM resolution and
100% fixed-point (integer) computation. Since MAD is implemented entirely
without the use of floating point arithmetic, it performs especially well on
architectures without an FPU.
MAD does not yet support MPEG-2 multichannel audio (although it
should be backward compatible with such streams) nor does it currently
support AAC.
By default madplay reads and decodes one or more input
files containing MPEG audio data and plays them on the native audio
device. If the input file is a single dash (-), data is read from standard
input.
Decoded output may optionally be redirected to a file instead of
being played on the audio device by using the -o (--output)
option.
For each file, madplay will also attempt to read and
display ID3 tag information. The supported tag versions are ID3v1, ID3v1.1,
ID3v2.2, ID3v2.3, and ID3v2.4. If a tag contains relative volume adjustment
information (RVA2), madplay will use the information to adjust the
master volume for output. This behavior can be changed with the -A
(--adjust-volume) and -G (--replay-gain) options.
If the -T (--show-tags-only) option is used,
decoding is not performed but tag information is still displayed. When used
in conjunction with -v (--verbose), encoder as well as ID3
tags are shown.
- -v or --verbose
- Generally show more information than the default. During decoding, show
information about the stream including playing time, audio layer, bit
rate, sampling frequency, and stereo mode.
- -q or --quiet
- Generally show less information than the default. Do not show any
information during decoding except warnings.
- -Q or --very-quiet
- Generally show no information except severe errors. Do not show any
information or warnings during decoding.
- --display-time=mode
- Set the default verbose time display mode to mode, which must be
one of remaining, current, or overall. This is only
relevant with -v (--verbose). See --tty-control below
for details on changing the time display mode during playback.
- --downsample
- Reduce the decoded sampling frequency 2:1. This also reduces the
computational overhead of the decoder.
- -i or --ignore-crc
- Ignore CRC information in the audio stream. This causes frames with CRC
errors to be decoded and played anyway. This option is not recommended,
but since some encoders have been known to generate bad CRC information,
this option is a work-around to play streams from such encoders.
- --ancillary-output=path
- Write ancillary data from the MPEG audio stream to path. If
path is a single dash (-), the data will be written to standard
output. Bits from the ancillary data stream are packed into octets; if any
bits remain, the final octet will be padded with zero bits. See the
NOTES section below for further information about this option.
- -o or --output=[type:]path
- Direct output to path, rather than playing audio on the native
audio device. The format of the output is specified by type which
can be any of the supported output formats (see Output Formats
below.) If a format is not specified, one will be inferred from
path. If path is a single dash (-), the output will be
written to standard output.
- -b or --bit-depth=depth
- Request an output precision of depth bits per sample. Higher bit
depths yield higher quality sound. Typical bit depths are 8, 16, 24, and
32, however other depths may also be possible. Whether the request can be
honored depends on the capabilities of the audio device or output format.
See the NOTES section below for further details about this
option.
- -R or --sample-rate=hertz
- Request an output sampling frequency of hertz samples per second
(Hz). The sample rate must be in the range 1000 to 65535 Hz.
Whether the request can be honored depends on the capabilities of the
audio device or output format. If the effective rate is not the same as
the rate of the decoded audio, output may be resampled, possibly resulting
in lower quality sound.
- -d or --no-dither
- Do not dither output PCM samples. This may result in lower quality sound
but is useful for analyzing output from the decoder.
- --fade-in[=duration]
- Gradually fade-in the audio from each file over duration. If not
specified, the default duration is 0:05 (five seconds.)
- -a or --attenuate=decibels or
--amplify=decibels
- Attenuate or amplify the signal by decibels (dB). The signal is
attenuated if the decibel value is negative; it is amplified if the value
is positive. The value must be in the range -175 to +18 dB. The
value may be fractional, e.g. -1.5 dB. A value of 0 dB will
leave the signal unchanged. Each step of 6 dB will approximately
halve (in the negative direction) or double (in the positive direction)
the strength of the signal.
- -A or --adjust-volume=decibels
- Adjust the relative volume for all files. This option overrides any
per-file volume adjustment settings. For example, -A0 may be used
to ignore relative volume adjustments given by ID3 tags. Relative volume
adjustments specified by this option or by ID3 tags are used as the base
volume against which the signal is further attenuated or amplified using
the -a (--attenuate, --amplify) option or keyboard
controls. This option cannot be used together with -G
(--replay-gain).
- -G or --replay-gain[=profile]
- Enable Replay Gain volume adjustments. Replay Gain information contained
in the decoded files (if any) is used to make volume adjustments for
output. The profile may be one of radio (the default) or
audiophile. See the NOTES section below for further details.
When Replay Gain is enabled, a default pre-amp gain of +6 dB is
also applied; this can be changed with the -a (--attenuate,
--amplify) option.
For dual channel streams, an output channel should be selected. If one is not
selected, the first (left) channel will be used.
For stereo streams, making a channel selection other than stereo
will cause the output to become monaural.
- -1 or --left
- Output the first (left) channel only.
- -2 or --right
- Output the second (right) channel only.
- -m or --mono
- Mix the left and right channels together.
- -S or --stereo
- Force stereo output, even if the stream is single or dual channel.
- -s or --start=time
- Begin playing at time, given as an offset from the beginning of the
first file (0:00:00), seeking as necessary.
- -t or --time=duration
- Stop playback after the playing time of the output audio equals
duration.
- -z or --shuffle
- Randomize the list of files given on the command line for playback.
- -r or --repeat[=max]
- Play the input files max times, or indefinitely. Playback can be
stopped prematurely by giving a time limit with the -t
(--time) option. If -z (--shuffle) is also used, the
files will be continuously shuffled and repeated in such a way that the
same file is not played again until at least half of the other files have
played in the interim.
- --tty-control
- Enable keyboard controls during playback. This is the default unless
standard input is not a terminal, output is redirected with -o
(--output), or either of -q (--quiet) or -Q
(--very-quiet) is given. The keyboard controls are:
- P
- Pause; press any key to resume.
- S
- Stop; press any key to replay the current file from the beginning.
- F
- Forward; advance to the next file.
- B
- Back; replay the current file, unless it has been playing for less than 4
seconds, in which case replay the previous file.
- T
- Time display; change the time display mode. This only works with -v
(--verbose). The display mode alternates among overall playing
time, current time remaining, and current playing time.
- +
- Increase gain; increase the audio output gain by 0.5 dB.
- -
- Decrease gain; decrease the audio output gain by 0.5 dB.
- Q
- Quit; stop decoding and exit.
- --no-tty-control
- Disable keyboard controls during playback. This is the default when
standard input is not a terminal, output is redirected with -o
(--output), or either of -q (--quiet) or -Q
(--very-quiet) is given.
- -T or --show-tags-only
- Show ID3 and/or encoder tags from the input files but do not
otherwise decode or play any audio. By default only ID3 tags are shown (if
any). With -v (--verbose), all tags are shown. Encoder tags
recognized by madplay include the Xing VBR header tag and the
header tag format written by lame(1).
- -V or --version
- Display the effective version and build options for madplay and
exit.
- --license
- Display copyright, license, and warranty information and exit.
- -h or --help
- Display usage information and exit.
Other than playing on the native audio device, the following output formats are
supported:
- cdda
- CD audio, 16-bit big-endian 44100 Hz stereo PCM, padded to
2352-byte block boundary (*.cdr, *.cda)
- aiff
- Audio IFF, [16-bit] PCM (*.aif, *.aiff)
- wave
- Microsoft RIFF/WAVE, [16-bit] PCM (*.wav)
- snd
- Sun/NeXT audio, 8-bit ISDN μ-law (*.au, *.snd)
- raw
- binary [16-bit] host-endian linear PCM, stereo interleaved
- hex
- ASCII hexadecimal [24-bit] linear PCM, stereo interleaved, one sample per
output line
- esd
- Enlightened Sound Daemon (EsounD) [16-bit] (give speaker host as
path)
- null
- no output (usually for testing or timing the decoder)
Default bit depths shown in square brackets can be changed with
the -b (--bit-depth) option.
Note that EsounD support requires the libesd library.
For options which accept a time or duration argument, the following time
specifications are recognized:
- hh:mm:ss.ddd
- Hours, minutes, seconds, and decimal fractions of a second. This
specification is flexible; hh:mm:ss,
mmm:ss, :ss,
sss.ddd , .ddd, and ssss are all
acceptable. The component values are not constrained to any particular
range or number of digits.
- frac/unit
- A length of time specified as a rational number, in seconds. This can be
used for sample-granularity, for example 32/44100 for 32 samples,
assuming a 44100 Hz sample frequency.
- time1+time2
- A composite time made by adding two time values together. This permits
mixing the above specification forms.
The resolution of any time value cannot exceed 1/352800000
seconds.
- error: frame #: lost synchronization
- If encountered at the beginning of a file, this means the file contains
something other than an ID3v2 tag before the MPEG audio data. If
encountered in the middle of a file, it may mean the file is corrupt. This
message is most commonly encountered, however, at the end of a file if the
file contains an ID3v1 tag that is not aligned to an MPEG audio frame
boundary. In this case, the message is harmless and may be ignored.
- error: frame #: bad main_data_begin pointer
- This message can occur while decoding a Layer III stream that has
been cut or spliced without preserving its bit reservoir. The affected
frame cannot be properly decoded, but will be used to help restore the bit
reservoir for following frames.
Most other messages indicate a deficiency in the input stream.
When a frame cannot be properly decoded, a concealment strategy is
used as follows:
- •
- If the previous frame was properly decoded, it is repeated in place of the
current frame.
- •
- If the previous frame was not properly decoded, the current frame
is muted.
Because MAD produces samples with a precision greater than 24 bits, by default
madplay will dither the samples to the precision of the output format.
This produces high quality audio that generally sounds superior to the output
of a simple rounding algorithm. However, dithering may unfavorably affect an
analytic examination of the output, and therefore it may be disabled by using
the -d (--no-dither) option.
The actual precision of output samples can be requested with the
-b (--bit-depth) option. Whether the request can be honored
depends on the capabilities of the audio device or output format. If this
option is not specified, a typical default depth will be used (often 16) or
in the case of output to an audio device, the highest bit depth determined
to work reliably with the device will be used.
Note that bit depths greater than 24 are effectively the same as
24-bit precision samples padded to the requested depth.
MPEG audio streams contain an ancillary data stream in addition to audio data.
Most often this does not contain any useful information and may simply consist
of padding bits. The MPEG-2 extension to multichannel audio uses part of this
ancillary stream to convey multichannel information; presently MAD does not
interpret such data.
For applications which have uses for the stream, ancillary data
can be extracted with the --ancillary-output option.
madplay optionally supports the Replay Gain proposed standard with the
-G (--replay-gain) option to make compensating volume
adjustments when playing decoded audio from different sources. There are two
Replay Gain profiles: radio strives to make gain adjustments that give
all tracks equal loudness, while audiophile attempts to give ideal
listening loudness. These adjustments are relative to a reference of
83 dB SPL.
A pre-amp gain is also used in conjunction with Replay Gain to
achieve the overall desired loudness. When Replay Gain is enabled, this
pre-amp gain defaults to +6 dB, however it can be changed with the
-a (--attenuate, --amplify) option or keyboard
controls.
Note that when enabled, Replay Gain overrides any relative volume
adjustments specified by ID3 tags (RVA2). Replay Gain is also incompatible
with the -A (--adjust-volume) option; any attempt to use it
will be ignored.
Replay Gain information is read either from an ID3 tag (RGAD) or
from an encoder tag written by lame(1). If both are present, the
information in the ID3 tag takes precedence. In accordance with the proposed
standard, if the requested Replay Gain profile is not available but the
alternate is, the alternate is used instead.
Due to an unfortunate heresy, versions of lame(1) since
3.95.1 write Replay Gain information using a reference of 89 dB SPL
instead of the 83 dB specified in the Replay Gain proposed standard.
To compensate, madplay automatically subtracts 6 dB from the
Replay Gain values read from such tags.
Note that madplay does not yet support hard limiting as
suggested by the Replay Gain proposed standard; nor does it automatically
reduce the pre-amp gain to avoid clipping.
MAD conforms to Part 3 of the ISO/IEC 11172 (MPEG-1) international
standard for decoding MPEG audio. In addition, MAD supports the extension to
Lower Sampling Frequencies (LSF) as defined in Part 3 of
ISO/IEC 13818 (MPEG-2).
The output from MAD has been tested and found to satisfy the
ISO/IEC 11172-4 computational accuracy requirements for compliance.
In most configurations, MAD is a Full Layer III
ISO/IEC 11172-3 audio decoder as defined by the standard.
The ID3 tag parsing library used by madplay conforms to the
ID3v2.4.0 informal standard.
With the exception of the clipping prevention provisions, Replay
Gain support provided by madplay is in accordance with the Replay
Gain proposed standard published on July 10, 2001 by David
Robinson.
The resampling algorithm used by madplay is one of a linear
interpolation, and does not produce optimum quality sound.
The granularity of start and stop times (--start and
--time) is not yet as fine as this document suggests.
Robert Leslie <rob@mars.org>
lame(1), normalize(1), sox(1), wget(1)
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |