mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-10 16:43:33 +02:00
Remove some old erratta, and do a major tidy up of line endings and properties on source files
This commit is contained in:
@@ -1,151 +1,151 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>The libtwolame API</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>The libtwolame API</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<p>This is the interface for encoding PCM audio to MPEG Audio Layer 2.</p>
|
||||
<p>It is <em>very</em> similar to the libmp3lame API.</p>
|
||||
<p>See simplefrontend/simplefrontend.c for a very simple application
|
||||
using the API.</p>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Steps to encode PCM to MP2</h2>
|
||||
<div class="sectionbody">
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
Grab a set of default options by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame_options *encodeOptions;
|
||||
encodeOptions = twolame_init();</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Adjust those options to suit your requirements.
|
||||
See twolame.h for a full list of options. eg.
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame_set_out_samplerate(encodeOptions, 32000);
|
||||
twolame_set_bitrate(encodeOptions, 160);</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Initialise twolame library with these options by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame_init_params(encodeOptions);</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>NOTE: The return value should be checked to see if the options were valid.
|
||||
Currently only ever returns 0</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Encode PCM audio to MP2 by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>int twolame_encode_buffer(
|
||||
twolame_options *glopts, // the set of options you're using
|
||||
const short int leftpcm[], // the left and right audio channels
|
||||
const short int rightpcm[],
|
||||
int num_samples, // the number of samples in each channel
|
||||
unsigned char *mp2buffer, // a pointer to a buffer for the MP2 audio data
|
||||
// NB User must allocate space!
|
||||
int mp2buffer_size); // The size of the mp2buffer that the user allocated
|
||||
int *mp2fill_size);</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>This function returns the number of bytes written into mp2buffer by the library MPEG.
|
||||
One frame of MPEG audio will be returned for every 1152 samples of PCM audio.
|
||||
Multiple calls can be made to this function.
|
||||
It is the users responsibility to:</tt></pre>
|
||||
</div></div>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
allocate the mp2buffer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
read the pcmaudio from somewhere with new samples always staring from
|
||||
the beginning of the buffer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
write the mp2buffer contents to somewhere (it is overwritten with each call)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Flush the encoder by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>int twolame_encode_flush(
|
||||
twolame_options *glopts,
|
||||
unsigned char *mp2buffer,
|
||||
int mp2buffer_size);</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>When encoding is finished, unless there was exactly a multiple of 1152 samples/channel
|
||||
sent to the encoder, there will be some remaining audio that is not encoded. This function
|
||||
encodes this last bit of audio by padding out with zeros until there is 1152 samples per channel
|
||||
in the PCM audio buffers and then encoding this.</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>This function returns the number of bytes written into mp2buffer by the library MPEG.</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The user must "de-initialise" the encoder at the end by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>void twolame_close(twolame_options **glopts);</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>This function must be called to free all the memory and structures
|
||||
associated with this set of encoding parameters.
|
||||
POST: glopts = NULL</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:17 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>The libtwolame API</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>The libtwolame API</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<p>This is the interface for encoding PCM audio to MPEG Audio Layer 2.</p>
|
||||
<p>It is <em>very</em> similar to the libmp3lame API.</p>
|
||||
<p>See simplefrontend/simplefrontend.c for a very simple application
|
||||
using the API.</p>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Steps to encode PCM to MP2</h2>
|
||||
<div class="sectionbody">
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
Grab a set of default options by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame_options *encodeOptions;
|
||||
encodeOptions = twolame_init();</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Adjust those options to suit your requirements.
|
||||
See twolame.h for a full list of options. eg.
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame_set_out_samplerate(encodeOptions, 32000);
|
||||
twolame_set_bitrate(encodeOptions, 160);</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Initialise twolame library with these options by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame_init_params(encodeOptions);</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>NOTE: The return value should be checked to see if the options were valid.
|
||||
Currently only ever returns 0</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Encode PCM audio to MP2 by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>int twolame_encode_buffer(
|
||||
twolame_options *glopts, // the set of options you're using
|
||||
const short int leftpcm[], // the left and right audio channels
|
||||
const short int rightpcm[],
|
||||
int num_samples, // the number of samples in each channel
|
||||
unsigned char *mp2buffer, // a pointer to a buffer for the MP2 audio data
|
||||
// NB User must allocate space!
|
||||
int mp2buffer_size); // The size of the mp2buffer that the user allocated
|
||||
int *mp2fill_size);</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>This function returns the number of bytes written into mp2buffer by the library MPEG.
|
||||
One frame of MPEG audio will be returned for every 1152 samples of PCM audio.
|
||||
Multiple calls can be made to this function.
|
||||
It is the users responsibility to:</tt></pre>
|
||||
</div></div>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
allocate the mp2buffer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
read the pcmaudio from somewhere with new samples always staring from
|
||||
the beginning of the buffer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
write the mp2buffer contents to somewhere (it is overwritten with each call)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Flush the encoder by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>int twolame_encode_flush(
|
||||
twolame_options *glopts,
|
||||
unsigned char *mp2buffer,
|
||||
int mp2buffer_size);</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>When encoding is finished, unless there was exactly a multiple of 1152 samples/channel
|
||||
sent to the encoder, there will be some remaining audio that is not encoded. This function
|
||||
encodes this last bit of audio by padding out with zeros until there is 1152 samples per channel
|
||||
in the PCM audio buffers and then encoding this.</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>This function returns the number of bytes written into mp2buffer by the library MPEG.</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The user must "de-initialise" the encoder at the end by calling:
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>void twolame_close(twolame_options **glopts);</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>This function must be called to free all the memory and structures
|
||||
associated with this set of encoding parameters.
|
||||
POST: glopts = NULL</tt></pre>
|
||||
</div></div>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:17 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,182 +1,182 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME Authors</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME Authors</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<div class="title">Nicholas Humfrey - <njh at ecs.soton.ac.uk></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Current Maintainer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
New automake build system
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Added libsndfile support
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Reference documentation for API
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Lots of cleaning and improving !
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
New frontend
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Christophe Massiot - <cmassiot at freebox.fr></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Changes to make libtwolame thread-safe
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title"><em>Mean</em> - <mean@users.sourceforge.net></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Fix for AMD64 processors
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Fix for CRC protection
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Mike Cheng <mikecheng at NOT planckenergy.com> (remove the NOT)</div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Author of tooLAME, which TwoLAME is based on.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">ISO Dist10 code writers</div><ul>
|
||||
<li>
|
||||
<p>
|
||||
original basis of toolame
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">LAME specific contributions</div><ul>
|
||||
<li>
|
||||
<p>
|
||||
fht routines from Ron Mayer <mayer at acuson.com>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
fht tweaking by Mathew Hendry <math at vissci.com>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
window_subband & filter subband from LAME circa v3.30
|
||||
(multiple LAME authors)
|
||||
(before Takehiro's window/filter/mdct combination)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Oliver Lietz <lietz at nanocosmos.de></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Tables now included in the exe! (yay! :)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Patrick de Smet <pds at telin.rug.ac.be></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
scale_factor calc speedup.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
subband_quantization speedup
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Bill Eldridge <bill at hk.rfa.org> and Federico Grau <grauf at rfa.org></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
option for "no padding"
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Nick Burch <gagravarr at SoftHome.net></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
WAV file reading
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
os/2 Makefile mods.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Phillipe Jouguet <philippe.jouguet at vdldiffusion.com></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
DAB extensions
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
spelling, LSF using psyII, WAVE reading
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Henrik Herranen - <leopold at vlsi.fi></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
WAVE reading
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Andreas Neukoetter - <anti at webhome.de></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
verbosity patch <em>-t</em> switch for transcode plugin
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Sami Sallinen - <sami.sallinen at g-cluster.com></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
filter subband loop unroll psychoi fix for "% 1408" calcs
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:16 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME Authors</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME Authors</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<div class="title">Nicholas Humfrey - <njh at ecs.soton.ac.uk></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Current Maintainer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
New automake build system
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Added libsndfile support
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Reference documentation for API
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Lots of cleaning and improving !
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
New frontend
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Christophe Massiot - <cmassiot at freebox.fr></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Changes to make libtwolame thread-safe
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title"><em>Mean</em> - <mean@users.sourceforge.net></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Fix for AMD64 processors
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Fix for CRC protection
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Mike Cheng <mikecheng at NOT planckenergy.com> (remove the NOT)</div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Author of tooLAME, which TwoLAME is based on.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">ISO Dist10 code writers</div><ul>
|
||||
<li>
|
||||
<p>
|
||||
original basis of toolame
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">LAME specific contributions</div><ul>
|
||||
<li>
|
||||
<p>
|
||||
fht routines from Ron Mayer <mayer at acuson.com>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
fht tweaking by Mathew Hendry <math at vissci.com>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
window_subband & filter subband from LAME circa v3.30
|
||||
(multiple LAME authors)
|
||||
(before Takehiro's window/filter/mdct combination)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Oliver Lietz <lietz at nanocosmos.de></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
Tables now included in the exe! (yay! :)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Patrick de Smet <pds at telin.rug.ac.be></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
scale_factor calc speedup.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
subband_quantization speedup
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Bill Eldridge <bill at hk.rfa.org> and Federico Grau <grauf at rfa.org></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
option for "no padding"
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Nick Burch <gagravarr at SoftHome.net></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
WAV file reading
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
os/2 Makefile mods.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Phillipe Jouguet <philippe.jouguet at vdldiffusion.com></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
DAB extensions
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
spelling, LSF using psyII, WAVE reading
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Henrik Herranen - <leopold at vlsi.fi></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
WAVE reading
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Andreas Neukoetter - <anti at webhome.de></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
verbosity patch <em>-t</em> switch for transcode plugin
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="title">Sami Sallinen - <sami.sallinen at g-cluster.com></div><ul>
|
||||
<li>
|
||||
<p>
|
||||
filter subband loop unroll psychoi fix for "% 1408" calcs
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:16 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,77 +1,77 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME Documentation</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME Documentation</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<p>TwoLAME - an optimized MPEG Audio Layer 2 encoder</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
<a href="readme.html">Read Me</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="twolame.1.html">TwoLAME(1) Manual Page</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="changelog.html">What is New</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="todo.html">TODO</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="api.html">libtwolame API Overview</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="twolame_8h.html">libtwolame API Reference</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="psycho.html">Psychoacoustic Models Overview</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="vbr.html">VBR Features Overview</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="authors.html">The TwoLAME Authors</a>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>twolame homepage: <a href="http://www.twolame.org">http://www.twolame.org</a><br />
|
||||
twolame mailing list: <a href="http://lists.sourceforge.net/lists/listinfo/twolame-discuss">twolame-discuss@lists.sourceforge.net</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:15 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME Documentation</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME Documentation</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<p>TwoLAME - an optimized MPEG Audio Layer 2 encoder</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
<a href="readme.html">Read Me</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="twolame.1.html">TwoLAME(1) Manual Page</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="changelog.html">What is New</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="todo.html">TODO</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="api.html">libtwolame API Overview</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="twolame_8h.html">libtwolame API Reference</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="psycho.html">Psychoacoustic Models Overview</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="vbr.html">VBR Features Overview</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
<a href="authors.html">The TwoLAME Authors</a>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>twolame homepage: <a href="http://www.twolame.org">http://www.twolame.org</a><br />
|
||||
twolame mailing list: <a href="http://lists.sourceforge.net/lists/listinfo/twolame-discuss">twolame-discuss@lists.sourceforge.net</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:15 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,132 +1,132 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>Psychoacoustic Models in TwoLAME</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>Psychoacoustic Models in TwoLAME</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<h2>Introduction</h2>
|
||||
<div class="sectionbody">
|
||||
<p>In MPEG audio encoding, a psychoacoustic model (PAM) is used to determine which
|
||||
are the sonically important parts of the waveform that is being encoded. The PAM
|
||||
looks for loud sounds which may mask soft sounds, noise which may affect the level
|
||||
of sounds nearby, sounds which are too soft for us to hear and should be ignored
|
||||
and so on. The information from the PAM is used to determine which parts of the
|
||||
spectrum should get more bits and thus be encoded at greater quality - and which
|
||||
parts are inaudible/unimportant and should thus get fewer bits.</p>
|
||||
<p>In MPEG Audio LayerII encoding, 1152 sound samples are read in - this constitutes
|
||||
a <em>frame</em>. For each frame the PAM outputs just <strong>32</strong> values
|
||||
(The values are the Signal to Masking Ratio [SMR] in that subband). This is important!
|
||||
There are only 32 values to determine how to alloctate bits for 1152 samples - this
|
||||
is a pretty coarse technique.</p>
|
||||
<p>The different PAMs listed below use different techniques to decide on these 32
|
||||
values. Some models are better than others - meaning that the 32 values chosen
|
||||
are pretty good at spreading the bits where they should go. Even with a really
|
||||
bad PAM (e.g. Model -1) you can still get satisfactory results a lot of the time.
|
||||
All of these models have strengths and weaknesses. The model <em>you</em> end up using
|
||||
will be the one that produces the best sound for your ears, for your audio.</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model -1</h2>
|
||||
<div class="sectionbody">
|
||||
<p>This PAM doesn't actually look at the samples being encoded to decide upon the
|
||||
output values. There is simply a set of 32 default values which are used,
|
||||
regardless of input.</p>
|
||||
<p><strong>Pros</strong>: Faaaast. Low complexity. Surprisingly good.
|
||||
"Surprising" in that the other PAMs go to the effort of calculating FFTs
|
||||
and subbands and masking, and this one does absolutely <strong>nothing</strong>.
|
||||
Zip. Nada. Diddly Squat. This model might be the best example of why
|
||||
it is hard to make a good model - if having no computations sounds OK,
|
||||
how do you improve on it?</p>
|
||||
<p><strong>Cons</strong>: Absolutely no attempt to consider any of the masking effects that
|
||||
would help the audio sound better.</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model 0</h2>
|
||||
<div class="sectionbody">
|
||||
<p>This PAM looks at the sizes of the <em>scalefactors</em> for the audio and combines
|
||||
it with the Absolute Threshold of Hearing (ATH) to make the 32 SMR values.</p>
|
||||
<p><strong>Pros</strong>: Faaast. Low complexity.</p>
|
||||
<p><strong>Cons</strong>: This model has absolutely no mathematical basis and does not use
|
||||
any perceptual model of hearing. It simply juggles some of the numbers of
|
||||
the input sound to determine the values. Feel free to hack the daylights out
|
||||
of this PAM - add multipliers, constants, log-tables <strong>anything</strong>. Tweak it until
|
||||
you begin to like the sound.</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model 1 and 2</h2>
|
||||
<div class="sectionbody">
|
||||
<p>These PAMs are from the ISO standard. Just because they are the standard,
|
||||
doesn't mean that they are any good. Look at LAME which basically threw out
|
||||
the MP3 standard psycho models and made their own (GPSYCHO).</p>
|
||||
<p><strong>Pros</strong>: A reference for future PAMs</p>
|
||||
<p><strong>Cons</strong>: Terrible ISO code, buggy tables, poor documentation.</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model 3</h2>
|
||||
<div class="sectionbody">
|
||||
<p>A re-implementation of psychoacoustic model 1. ISO11172 was used as the guide
|
||||
for re-writing this PAM from the ground up.</p>
|
||||
<p><strong>Pros</strong>: No more obscure tables of values from the ISO code. Hopefully a good
|
||||
base to work upon for tweaking PAMs</p>
|
||||
<p><strong>Cons</strong>: At the moment, doesn't really sound any better than PAM1</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model 4</h2>
|
||||
<div class="sectionbody">
|
||||
<p>A cleaned up version of PAM2.</p>
|
||||
<p><strong>Pros</strong>: Faster than PAM2. No more obscure tables of values from the ISO
|
||||
standard. Hopefully a good base to work from for improving the PAMs</p>
|
||||
<p><strong>Cons</strong>: Still has the same "warbling"/"Davros" problems as PAM2.</p>
|
||||
</div>
|
||||
<h2>Future psychoacoustic models</h2>
|
||||
<div class="sectionbody">
|
||||
<p>There's a heap that could be done. Unfortunately, I've got a set of tin
|
||||
ears, crappy speakers and a noisy computer room. If you've got the
|
||||
capability to do proper PAM testing then please feel free to do so.
|
||||
Otherwise, I'll just keep plodding along with new ideas as they
|
||||
arise, such as:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Temporal masking (there's no pre-echo or anything in TwoLAME)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Left Right Masking
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
A PAM that's fully tuneable from the command line?
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Graphical output of SMR values etc. Would allow better debugging of PAMs
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Re-sampling routines
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Low/High pass filtering
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:18 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>Psychoacoustic Models in TwoLAME</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>Psychoacoustic Models in TwoLAME</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<h2>Introduction</h2>
|
||||
<div class="sectionbody">
|
||||
<p>In MPEG audio encoding, a psychoacoustic model (PAM) is used to determine which
|
||||
are the sonically important parts of the waveform that is being encoded. The PAM
|
||||
looks for loud sounds which may mask soft sounds, noise which may affect the level
|
||||
of sounds nearby, sounds which are too soft for us to hear and should be ignored
|
||||
and so on. The information from the PAM is used to determine which parts of the
|
||||
spectrum should get more bits and thus be encoded at greater quality - and which
|
||||
parts are inaudible/unimportant and should thus get fewer bits.</p>
|
||||
<p>In MPEG Audio LayerII encoding, 1152 sound samples are read in - this constitutes
|
||||
a <em>frame</em>. For each frame the PAM outputs just <strong>32</strong> values
|
||||
(The values are the Signal to Masking Ratio [SMR] in that subband). This is important!
|
||||
There are only 32 values to determine how to alloctate bits for 1152 samples - this
|
||||
is a pretty coarse technique.</p>
|
||||
<p>The different PAMs listed below use different techniques to decide on these 32
|
||||
values. Some models are better than others - meaning that the 32 values chosen
|
||||
are pretty good at spreading the bits where they should go. Even with a really
|
||||
bad PAM (e.g. Model -1) you can still get satisfactory results a lot of the time.
|
||||
All of these models have strengths and weaknesses. The model <em>you</em> end up using
|
||||
will be the one that produces the best sound for your ears, for your audio.</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model -1</h2>
|
||||
<div class="sectionbody">
|
||||
<p>This PAM doesn't actually look at the samples being encoded to decide upon the
|
||||
output values. There is simply a set of 32 default values which are used,
|
||||
regardless of input.</p>
|
||||
<p><strong>Pros</strong>: Faaaast. Low complexity. Surprisingly good.
|
||||
"Surprising" in that the other PAMs go to the effort of calculating FFTs
|
||||
and subbands and masking, and this one does absolutely <strong>nothing</strong>.
|
||||
Zip. Nada. Diddly Squat. This model might be the best example of why
|
||||
it is hard to make a good model - if having no computations sounds OK,
|
||||
how do you improve on it?</p>
|
||||
<p><strong>Cons</strong>: Absolutely no attempt to consider any of the masking effects that
|
||||
would help the audio sound better.</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model 0</h2>
|
||||
<div class="sectionbody">
|
||||
<p>This PAM looks at the sizes of the <em>scalefactors</em> for the audio and combines
|
||||
it with the Absolute Threshold of Hearing (ATH) to make the 32 SMR values.</p>
|
||||
<p><strong>Pros</strong>: Faaast. Low complexity.</p>
|
||||
<p><strong>Cons</strong>: This model has absolutely no mathematical basis and does not use
|
||||
any perceptual model of hearing. It simply juggles some of the numbers of
|
||||
the input sound to determine the values. Feel free to hack the daylights out
|
||||
of this PAM - add multipliers, constants, log-tables <strong>anything</strong>. Tweak it until
|
||||
you begin to like the sound.</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model 1 and 2</h2>
|
||||
<div class="sectionbody">
|
||||
<p>These PAMs are from the ISO standard. Just because they are the standard,
|
||||
doesn't mean that they are any good. Look at LAME which basically threw out
|
||||
the MP3 standard psycho models and made their own (GPSYCHO).</p>
|
||||
<p><strong>Pros</strong>: A reference for future PAMs</p>
|
||||
<p><strong>Cons</strong>: Terrible ISO code, buggy tables, poor documentation.</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model 3</h2>
|
||||
<div class="sectionbody">
|
||||
<p>A re-implementation of psychoacoustic model 1. ISO11172 was used as the guide
|
||||
for re-writing this PAM from the ground up.</p>
|
||||
<p><strong>Pros</strong>: No more obscure tables of values from the ISO code. Hopefully a good
|
||||
base to work upon for tweaking PAMs</p>
|
||||
<p><strong>Cons</strong>: At the moment, doesn't really sound any better than PAM1</p>
|
||||
</div>
|
||||
<h2>Psychoacoustic Model 4</h2>
|
||||
<div class="sectionbody">
|
||||
<p>A cleaned up version of PAM2.</p>
|
||||
<p><strong>Pros</strong>: Faster than PAM2. No more obscure tables of values from the ISO
|
||||
standard. Hopefully a good base to work from for improving the PAMs</p>
|
||||
<p><strong>Cons</strong>: Still has the same "warbling"/"Davros" problems as PAM2.</p>
|
||||
</div>
|
||||
<h2>Future psychoacoustic models</h2>
|
||||
<div class="sectionbody">
|
||||
<p>There's a heap that could be done. Unfortunately, I've got a set of tin
|
||||
ears, crappy speakers and a noisy computer room. If you've got the
|
||||
capability to do proper PAM testing then please feel free to do so.
|
||||
Otherwise, I'll just keep plodding along with new ideas as they
|
||||
arise, such as:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Temporal masking (there's no pre-echo or anything in TwoLAME)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Left Right Masking
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
A PAM that's fully tuneable from the command line?
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Graphical output of SMR values etc. Would allow better debugging of PAMs
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Re-sampling routines
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Low/High pass filtering
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:18 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,123 +1,123 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<p>Based on tooLAME by Michael Cheng</p>
|
||||
<p>All changes to the ISO source are licensed under the LGPL
|
||||
(see COPYING for details)</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>TwoLAME is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>TwoLAME 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
|
||||
Lesser General Public License for more details.</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>You should have received a copy of the GNU Lesser General Public
|
||||
License along with TwoLAME; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>INTRODUCTION</h2>
|
||||
<div class="sectionbody">
|
||||
<p>TwoLAME is an optimized MPEG Audio Layer 2 (MP2) encoder.
|
||||
It is based heavily on:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
tooLAME by Michael Cheng
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
the ISO dist10 code
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
improvement to algorithms as part of the LAME project (lame.sf.net)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
other contributors (see AUTHORS)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>TwoLAME should be able to be used as a drop-in replacement for
|
||||
LAME (a MPEG Layer 3 encoder). The frontend takes very similar
|
||||
command line options to LAME, and the backend library has a very
|
||||
similar API to LAME.</p>
|
||||
<p>For the latest version of TwoLAME, visit the project homepage:
|
||||
http://www.twolame.org/</p>
|
||||
</div>
|
||||
<h2>MPEG Audio Layer 2 (MP2)</h2>
|
||||
<div class="sectionbody">
|
||||
<p>(taken from Wikipedia article on MP2)</p>
|
||||
<p>MP2 (sometimes incorrectly named Musicam) is a short form of MPEG Audio Layer II,
|
||||
and it is also used as a file extension for files containing audio data of this
|
||||
type. While it has largely been superseded by MP3 for PC and Internet applications,
|
||||
it remains a dominant standard for audio broadcasting as part of the DAB digital
|
||||
radio and DVB digital television standards. It is also used internally within the
|
||||
radio industry, for example in NPR's PRSS Content Depot programming distribution
|
||||
system.</p>
|
||||
</div>
|
||||
<h2>INSTALLATION</h2>
|
||||
<div class="sectionbody">
|
||||
<p>Standard automake process:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>./configure
|
||||
make
|
||||
make install</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
<h2>REFERENCE PAPERS</h2>
|
||||
<div class="sectionbody">
|
||||
<p>(Specifically Layer II Papers)</p>
|
||||
<p>Kumar, M & Zubair, M., A high performance software implementation of mpeg audio
|
||||
encoder, 1996, ICASSP Conf Proceedings (I think)</p>
|
||||
<p>Fischer, K.A., Calculation of the psychoacoustic simultaneous masked threshold
|
||||
based on MPEG/Audio Encoder Model One, ICSI Technical Report, 1997
|
||||
ftp://ftp.icsi.berkeley.edu/pub/real/kyrill/PsychoMpegOne.tar.Z</p>
|
||||
<p>Hyen-O et al, New Implementation techniques of a real-time mpeg-2 audio encoding
|
||||
system. p2287, ICASSP 99.</p>
|
||||
<p>Imai, T., et al, MPEG-1 Audio real-time encoding system, IEEE Trans on Consumer
|
||||
Electronics, v44, n3 1998. p888</p>
|
||||
<p>Teh, D., et al, Efficient bit allocation algorithm for ISO/MPEG audio encoder,
|
||||
Electronics Letters, v34, n8, p721</p>
|
||||
<p>Murphy, C & Anandakumar, K, Real-time MPEG-1 audio coding and decoding on a DSP
|
||||
Chip, IEEE Trans on Consumer Electronics, v43, n1, 1997 p40</p>
|
||||
<p>Hans, M & Bhaskaran, V., A compliant MPEG-1 layer II audio decoder with 16-B
|
||||
arithmetic operations, IEEE Signal Proc Letters v4 n5 1997 p121</p>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:15 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<p>Based on tooLAME by Michael Cheng</p>
|
||||
<p>All changes to the ISO source are licensed under the LGPL
|
||||
(see COPYING for details)</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>TwoLAME is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>TwoLAME 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
|
||||
Lesser General Public License for more details.</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>You should have received a copy of the GNU Lesser General Public
|
||||
License along with TwoLAME; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>INTRODUCTION</h2>
|
||||
<div class="sectionbody">
|
||||
<p>TwoLAME is an optimized MPEG Audio Layer 2 (MP2) encoder.
|
||||
It is based heavily on:</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
tooLAME by Michael Cheng
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
the ISO dist10 code
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
improvement to algorithms as part of the LAME project (lame.sf.net)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
other contributors (see AUTHORS)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>TwoLAME should be able to be used as a drop-in replacement for
|
||||
LAME (a MPEG Layer 3 encoder). The frontend takes very similar
|
||||
command line options to LAME, and the backend library has a very
|
||||
similar API to LAME.</p>
|
||||
<p>For the latest version of TwoLAME, visit the project homepage:
|
||||
http://www.twolame.org/</p>
|
||||
</div>
|
||||
<h2>MPEG Audio Layer 2 (MP2)</h2>
|
||||
<div class="sectionbody">
|
||||
<p>(taken from Wikipedia article on MP2)</p>
|
||||
<p>MP2 (sometimes incorrectly named Musicam) is a short form of MPEG Audio Layer II,
|
||||
and it is also used as a file extension for files containing audio data of this
|
||||
type. While it has largely been superseded by MP3 for PC and Internet applications,
|
||||
it remains a dominant standard for audio broadcasting as part of the DAB digital
|
||||
radio and DVB digital television standards. It is also used internally within the
|
||||
radio industry, for example in NPR's PRSS Content Depot programming distribution
|
||||
system.</p>
|
||||
</div>
|
||||
<h2>INSTALLATION</h2>
|
||||
<div class="sectionbody">
|
||||
<p>Standard automake process:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>./configure
|
||||
make
|
||||
make install</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
<h2>REFERENCE PAPERS</h2>
|
||||
<div class="sectionbody">
|
||||
<p>(Specifically Layer II Papers)</p>
|
||||
<p>Kumar, M & Zubair, M., A high performance software implementation of mpeg audio
|
||||
encoder, 1996, ICASSP Conf Proceedings (I think)</p>
|
||||
<p>Fischer, K.A., Calculation of the psychoacoustic simultaneous masked threshold
|
||||
based on MPEG/Audio Encoder Model One, ICSI Technical Report, 1997
|
||||
ftp://ftp.icsi.berkeley.edu/pub/real/kyrill/PsychoMpegOne.tar.Z</p>
|
||||
<p>Hyen-O et al, New Implementation techniques of a real-time mpeg-2 audio encoding
|
||||
system. p2287, ICASSP 99.</p>
|
||||
<p>Imai, T., et al, MPEG-1 Audio real-time encoding system, IEEE Trans on Consumer
|
||||
Electronics, v44, n3 1998. p888</p>
|
||||
<p>Teh, D., et al, Efficient bit allocation algorithm for ISO/MPEG audio encoder,
|
||||
Electronics Letters, v34, n8, p721</p>
|
||||
<p>Murphy, C & Anandakumar, K, Real-time MPEG-1 audio coding and decoding on a DSP
|
||||
Chip, IEEE Trans on Consumer Electronics, v43, n1, 1997 p40</p>
|
||||
<p>Hans, M & Bhaskaran, V., A compliant MPEG-1 layer II audio decoder with 16-B
|
||||
arithmetic operations, IEEE Signal Proc Letters v4 n5 1997 p121</p>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:15 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,106 +1,106 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME TODO List</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME TODO List</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Fix bug with Padding and framesizes with samplerate of 44.1 and 22kHz
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
use Exact-width integer types (eg uint16_t)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Add libresample support to libtoolame (toolame_set_in_samplerate etc.)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
parameter checking in toolame.c using assert
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Create a new toolame.spec (be sure to include twolame.pc)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
quite a lot of duplicated code between toolame_encode_buffer_interleaved
|
||||
and toolame_encode_buffer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
sort out changing parameter for toolame_set_VBR_q from FLOAT to int (like LAME)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
better use of verbosity settings
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
full options sanity checking/verification in toolame_init_params
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
don't allow twolame_set_* after twolame_init_params() has been called
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Fix broken DAB support
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
with this VBR mode, we know the bits aren't going to run out, so we can
|
||||
just assign them "greedily".
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
VBR_a_bit_allocation() is yet to be written :)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Add a layer 2 decoder ? mpglib ?
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
use 32-bit floats internally where possible
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:17 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME TODO List</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME TODO List</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<div id="preamble">
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Fix bug with Padding and framesizes with samplerate of 44.1 and 22kHz
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
use Exact-width integer types (eg uint16_t)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Add libresample support to libtoolame (toolame_set_in_samplerate etc.)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
parameter checking in toolame.c using assert
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Create a new toolame.spec (be sure to include twolame.pc)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
quite a lot of duplicated code between toolame_encode_buffer_interleaved
|
||||
and toolame_encode_buffer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
sort out changing parameter for toolame_set_VBR_q from FLOAT to int (like LAME)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
better use of verbosity settings
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
full options sanity checking/verification in toolame_init_params
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
don't allow twolame_set_* after twolame_init_params() has been called
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Fix broken DAB support
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
with this VBR mode, we know the bits aren't going to run out, so we can
|
||||
just assign them "greedily".
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
VBR_a_bit_allocation() is yet to be written :)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Add a layer 2 decoder ? mpglib ?
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
use 32-bit floats internally where possible
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:17 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,476 +1,476 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-manpage.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TWOLAME(1)</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>
|
||||
TWOLAME(1) Manual Page
|
||||
</h1>
|
||||
<h2>NAME</h2>
|
||||
<div class="sectionbody">
|
||||
<p>twolame -
|
||||
an optimised MPEG Audio Layer 2 (MP2) encoder
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<h2>SYNOPSIS</h2>
|
||||
<div class="sectionbody">
|
||||
<p><em>twolame</em> [options] <infile> [outfile]</p>
|
||||
</div>
|
||||
<h2>DESCRIPTION</h2>
|
||||
<div class="sectionbody">
|
||||
<p>TwoLAME is an optimised MPEG Audio Layer 2 (MP2) encoder based on tooLAME by
|
||||
Mike Cheng, which in turn is based upon the ISO dist10 code and portions of
|
||||
LAME. Encoding is performed by the libtwolame library backend.</p>
|
||||
</div>
|
||||
<h2>OPTIONS</h2>
|
||||
<div class="sectionbody">
|
||||
<h3>Input File</h3>
|
||||
<p>twolame uses libsndfile for reading the input sound file, so
|
||||
the input file can be in any format supported by libsndfile.
|
||||
To read raw PCM audio from STDIN, then use - as the input filename.</p>
|
||||
<h3>Output File</h3>
|
||||
<p>If no output filename is specified, then suffix of the input filename
|
||||
is automatically changed to .mp2. To write the encoded audio to STDOUT
|
||||
then use - as the output filename.</p>
|
||||
<h3>Input Options</h3>
|
||||
<dl>
|
||||
<dt>
|
||||
-r, --raw-input
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Specifies that input is raw signed PCM audio.
|
||||
If audio is stereo, than audio samples are interleaved
|
||||
between the two channels.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-x, --byte-swap
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Force byte-swapping of the input. Endian detection is performed
|
||||
automatically by libsndfile, so this option shouldn't
|
||||
normally be needed.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-s, --samplerate <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
If inputting raw PCM sound, you must specify the sample rate of
|
||||
the audio in Hz.
|
||||
Valid sample rates: 16000, 22050, 24000, 32000, 44100, 48000Hz.
|
||||
Default sample rate is 44100Hz.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--samplesize <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Specifies the sample size (in bits) of the raw PCM audio.
|
||||
Valid sample sizes: 8, 16, 24, 32.
|
||||
Default sample size is 16-bit.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-N, --channels <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
If inputting raw PCM sound, you must specify the number of channels
|
||||
in the input audio. Default number of channels is 2.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-g, --swap-channels
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Swap the Left and Right channels of a stereo input file.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--scale <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Scale the input audio prior to encoding.
|
||||
All of the input audio is multiplied by specified value.
|
||||
Value between 0 and 1 will reduce the audio gain, and a value
|
||||
above 1 will increase the gain of the audio.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--scale-l <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Same as --scale, but only affects the left channel.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--scale-r <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Same as --scale, but only affects the right channel.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Output Options</h3>
|
||||
<dl>
|
||||
<dt>
|
||||
-m, --mode <char>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Choose the mode of the resulting audio. Default is auto.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
"a" auto - choose mode automatically based on the input
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
"s" stereo
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
"d" dual channel
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
"j" joint stereo
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
"m" mono
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt>
|
||||
-a, --downmix
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
If the input file is stereo then, downmix the left and right
|
||||
input channels into a single mono channel.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-b, --bitrate <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Sets the total bitrate (in kbps) for the output file.
|
||||
The default bitrate depends on the number of
|
||||
input channels and samplerate.
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>------------------------------
|
||||
Sample Rate Mono Stereo
|
||||
------------------------------
|
||||
48000 96 192
|
||||
44100 96 192
|
||||
32000 80 160
|
||||
24000 48 96
|
||||
22050 48 96
|
||||
16000 32 64
|
||||
------------------------------</tt></pre>
|
||||
</div></div>
|
||||
</dd>
|
||||
<dt>
|
||||
-P, --psyc-mode <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Choose the psycho-acoustic model to use (-1 to 4).
|
||||
Model number -1 is turns off psycho-acoustic modelling and
|
||||
uses fixed default values instead.
|
||||
Please see the file <em>psycho</em> for a full description of
|
||||
each of the models available.
|
||||
Default model is 3.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-v, --vbr
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enable VBR mode. See <em>vbr</em> documentation file for details.
|
||||
Default VBR level is 5.0.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-v, --vbr-level <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enable VBR mode and set quality level.
|
||||
The higher the number the better the quality.
|
||||
Maximum range is -50 to 50 but useful range is -10 to 10.
|
||||
See <em>vbr</em> documentation file for details.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-l, --ath <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Set the ATH level. Default level is 0.0.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-q, --quick <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enable quick mode. Only re-calculate psycho-acoustic
|
||||
model every specified number of frames.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-S, --single-frame
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enables single frame mode: only a single frame of MPEG audio
|
||||
is output and then the program terminates.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Miscellaneous Options</h3>
|
||||
<dl>
|
||||
<dt>
|
||||
-c, --copyright
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn on Copyright flag in output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-o, --non-original
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn off Original flag in output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--original
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn on Original flag in output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-p, --protect
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enable CRC error protection in output bitstream.
|
||||
An extra 16-bit checksum is added to frames.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-d, --padding
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn on padding in output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-R, --reserve <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Reserve specified number of bits in the each from of the
|
||||
output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-e, --deemphasis <char>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Set the de-emphasis type (n/c/5). Default is none.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-E, --energy
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn on energy level extensions.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Verbosity Options</h3>
|
||||
<dl>
|
||||
<dt>
|
||||
-t, --talkativity <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Set the amount of information to be displayed on stderr (0 to 10).
|
||||
Default is 2.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--quiet
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Don't send any messages to stderr, unless there is an error.
|
||||
(Same as --talkativity=0)
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--brief
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Only display a minimal number of messages while encoding.
|
||||
This setting is quieter than the default talkativity setting.
|
||||
(Same as --talkativity=1)
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--verbose
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Display an increased number of messages on stderr.
|
||||
This setting is useful to diagnose problems.
|
||||
(Same as --talkativity=4)
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h2>Return Codes</h2>
|
||||
<div class="sectionbody">
|
||||
<p>If encoding completes successfully, then twolame will return 0.
|
||||
However if encoding is not successful, then it will return one of the following codes.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
1 (No encoding performed)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
2 (Error opening input file)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
4 (Error opening output file)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
6 (Error allocating memory)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
8 (Error in chosen encoding parameters)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
10 (Error reading input audio)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
12 (Error occured while encoding)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
14 (Error writing output audio)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>EXAMPLES</h2>
|
||||
<div class="sectionbody">
|
||||
<p>This will encode sound.wav to sound.mp2 using the default constant bitrate of 192 kbps
|
||||
and using the default psycho-acoustic model (model 3):</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame sound.wav</tt></pre>
|
||||
</div></div>
|
||||
<p>Constant bitrate of 160kbps and joint stereo encoding, saved to file sound_160.mp2:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame -b 160 -m j sound.aiff sound_160.mp2</tt></pre>
|
||||
</div></div>
|
||||
<p>Encode sound.wav to newfile.mp2 using psycho-acoustic model 2 and encoding
|
||||
with variable bitrate:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame -P 2 -v sound.wav newfile.mp2</tt></pre>
|
||||
</div></div>
|
||||
<p>Same as example above, except that the negative value of the "-V" argument
|
||||
means that the lower bitrates will be favoured over the higher ones:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame -P 2 -V -5 sound.wav newfile.mp2</tt></pre>
|
||||
</div></div>
|
||||
<p>Resample audio file using sox and pipe straight through twolame:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>sox sound_11025.aiff -t raw -r 16000 | twolame -r -s 16000 - - > out.mp2</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
<h2>AUTHORS</h2>
|
||||
<div class="sectionbody">
|
||||
<p>The twolame frontend was (re)written by Nicholas J Humfrey.
|
||||
The libtwolame library is based on toolame by Mike Cheng.
|
||||
For a full list of authors, please see the AUTHORS file.</p>
|
||||
</div>
|
||||
<h2>RESOURCES</h2>
|
||||
<div class="sectionbody">
|
||||
<p>TwoLAME web site: http://www.twolame.org/</p>
|
||||
</div>
|
||||
<h2>SEE ALSO</h2>
|
||||
<div class="sectionbody">
|
||||
<p>lame(1), mpg123(1), madplay(1), sox(1)</p>
|
||||
</div>
|
||||
<h2>COPYING</h2>
|
||||
<div class="sectionbody">
|
||||
<p>Copyright © 2004-2006 The TwoLAME Project. Free use of this software is
|
||||
granted under the terms of the GNU Lesser General Public License (LGPL).</p>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:19 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-manpage.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TWOLAME(1)</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>
|
||||
TWOLAME(1) Manual Page
|
||||
</h1>
|
||||
<h2>NAME</h2>
|
||||
<div class="sectionbody">
|
||||
<p>twolame -
|
||||
an optimised MPEG Audio Layer 2 (MP2) encoder
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<h2>SYNOPSIS</h2>
|
||||
<div class="sectionbody">
|
||||
<p><em>twolame</em> [options] <infile> [outfile]</p>
|
||||
</div>
|
||||
<h2>DESCRIPTION</h2>
|
||||
<div class="sectionbody">
|
||||
<p>TwoLAME is an optimised MPEG Audio Layer 2 (MP2) encoder based on tooLAME by
|
||||
Mike Cheng, which in turn is based upon the ISO dist10 code and portions of
|
||||
LAME. Encoding is performed by the libtwolame library backend.</p>
|
||||
</div>
|
||||
<h2>OPTIONS</h2>
|
||||
<div class="sectionbody">
|
||||
<h3>Input File</h3>
|
||||
<p>twolame uses libsndfile for reading the input sound file, so
|
||||
the input file can be in any format supported by libsndfile.
|
||||
To read raw PCM audio from STDIN, then use - as the input filename.</p>
|
||||
<h3>Output File</h3>
|
||||
<p>If no output filename is specified, then suffix of the input filename
|
||||
is automatically changed to .mp2. To write the encoded audio to STDOUT
|
||||
then use - as the output filename.</p>
|
||||
<h3>Input Options</h3>
|
||||
<dl>
|
||||
<dt>
|
||||
-r, --raw-input
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Specifies that input is raw signed PCM audio.
|
||||
If audio is stereo, than audio samples are interleaved
|
||||
between the two channels.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-x, --byte-swap
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Force byte-swapping of the input. Endian detection is performed
|
||||
automatically by libsndfile, so this option shouldn't
|
||||
normally be needed.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-s, --samplerate <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
If inputting raw PCM sound, you must specify the sample rate of
|
||||
the audio in Hz.
|
||||
Valid sample rates: 16000, 22050, 24000, 32000, 44100, 48000Hz.
|
||||
Default sample rate is 44100Hz.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--samplesize <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Specifies the sample size (in bits) of the raw PCM audio.
|
||||
Valid sample sizes: 8, 16, 24, 32.
|
||||
Default sample size is 16-bit.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-N, --channels <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
If inputting raw PCM sound, you must specify the number of channels
|
||||
in the input audio. Default number of channels is 2.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-g, --swap-channels
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Swap the Left and Right channels of a stereo input file.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--scale <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Scale the input audio prior to encoding.
|
||||
All of the input audio is multiplied by specified value.
|
||||
Value between 0 and 1 will reduce the audio gain, and a value
|
||||
above 1 will increase the gain of the audio.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--scale-l <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Same as --scale, but only affects the left channel.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--scale-r <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Same as --scale, but only affects the right channel.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Output Options</h3>
|
||||
<dl>
|
||||
<dt>
|
||||
-m, --mode <char>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Choose the mode of the resulting audio. Default is auto.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
"a" auto - choose mode automatically based on the input
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
"s" stereo
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
"d" dual channel
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
"j" joint stereo
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
"m" mono
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt>
|
||||
-a, --downmix
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
If the input file is stereo then, downmix the left and right
|
||||
input channels into a single mono channel.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-b, --bitrate <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Sets the total bitrate (in kbps) for the output file.
|
||||
The default bitrate depends on the number of
|
||||
input channels and samplerate.
|
||||
</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>------------------------------
|
||||
Sample Rate Mono Stereo
|
||||
------------------------------
|
||||
48000 96 192
|
||||
44100 96 192
|
||||
32000 80 160
|
||||
24000 48 96
|
||||
22050 48 96
|
||||
16000 32 64
|
||||
------------------------------</tt></pre>
|
||||
</div></div>
|
||||
</dd>
|
||||
<dt>
|
||||
-P, --psyc-mode <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Choose the psycho-acoustic model to use (-1 to 4).
|
||||
Model number -1 is turns off psycho-acoustic modelling and
|
||||
uses fixed default values instead.
|
||||
Please see the file <em>psycho</em> for a full description of
|
||||
each of the models available.
|
||||
Default model is 3.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-v, --vbr
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enable VBR mode. See <em>vbr</em> documentation file for details.
|
||||
Default VBR level is 5.0.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-v, --vbr-level <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enable VBR mode and set quality level.
|
||||
The higher the number the better the quality.
|
||||
Maximum range is -50 to 50 but useful range is -10 to 10.
|
||||
See <em>vbr</em> documentation file for details.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-l, --ath <float>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Set the ATH level. Default level is 0.0.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-q, --quick <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enable quick mode. Only re-calculate psycho-acoustic
|
||||
model every specified number of frames.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-S, --single-frame
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enables single frame mode: only a single frame of MPEG audio
|
||||
is output and then the program terminates.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Miscellaneous Options</h3>
|
||||
<dl>
|
||||
<dt>
|
||||
-c, --copyright
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn on Copyright flag in output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-o, --non-original
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn off Original flag in output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--original
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn on Original flag in output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-p, --protect
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Enable CRC error protection in output bitstream.
|
||||
An extra 16-bit checksum is added to frames.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-d, --padding
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn on padding in output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-R, --reserve <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Reserve specified number of bits in the each from of the
|
||||
output bitstream.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-e, --deemphasis <char>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Set the de-emphasis type (n/c/5). Default is none.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
-E, --energy
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Turn on energy level extensions.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Verbosity Options</h3>
|
||||
<dl>
|
||||
<dt>
|
||||
-t, --talkativity <int>
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Set the amount of information to be displayed on stderr (0 to 10).
|
||||
Default is 2.
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--quiet
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Don't send any messages to stderr, unless there is an error.
|
||||
(Same as --talkativity=0)
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--brief
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Only display a minimal number of messages while encoding.
|
||||
This setting is quieter than the default talkativity setting.
|
||||
(Same as --talkativity=1)
|
||||
</p>
|
||||
</dd>
|
||||
<dt>
|
||||
--verbose
|
||||
</dt>
|
||||
<dd>
|
||||
<p>
|
||||
Display an increased number of messages on stderr.
|
||||
This setting is useful to diagnose problems.
|
||||
(Same as --talkativity=4)
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h2>Return Codes</h2>
|
||||
<div class="sectionbody">
|
||||
<p>If encoding completes successfully, then twolame will return 0.
|
||||
However if encoding is not successful, then it will return one of the following codes.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
1 (No encoding performed)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
2 (Error opening input file)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
4 (Error opening output file)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
6 (Error allocating memory)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
8 (Error in chosen encoding parameters)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
10 (Error reading input audio)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
12 (Error occured while encoding)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
14 (Error writing output audio)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>EXAMPLES</h2>
|
||||
<div class="sectionbody">
|
||||
<p>This will encode sound.wav to sound.mp2 using the default constant bitrate of 192 kbps
|
||||
and using the default psycho-acoustic model (model 3):</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame sound.wav</tt></pre>
|
||||
</div></div>
|
||||
<p>Constant bitrate of 160kbps and joint stereo encoding, saved to file sound_160.mp2:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame -b 160 -m j sound.aiff sound_160.mp2</tt></pre>
|
||||
</div></div>
|
||||
<p>Encode sound.wav to newfile.mp2 using psycho-acoustic model 2 and encoding
|
||||
with variable bitrate:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame -P 2 -v sound.wav newfile.mp2</tt></pre>
|
||||
</div></div>
|
||||
<p>Same as example above, except that the negative value of the "-V" argument
|
||||
means that the lower bitrates will be favoured over the higher ones:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame -P 2 -V -5 sound.wav newfile.mp2</tt></pre>
|
||||
</div></div>
|
||||
<p>Resample audio file using sox and pipe straight through twolame:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>sox sound_11025.aiff -t raw -r 16000 | twolame -r -s 16000 - - > out.mp2</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
<h2>AUTHORS</h2>
|
||||
<div class="sectionbody">
|
||||
<p>The twolame frontend was (re)written by Nicholas J Humfrey.
|
||||
The libtwolame library is based on toolame by Mike Cheng.
|
||||
For a full list of authors, please see the AUTHORS file.</p>
|
||||
</div>
|
||||
<h2>RESOURCES</h2>
|
||||
<div class="sectionbody">
|
||||
<p>TwoLAME web site: http://www.twolame.org/</p>
|
||||
</div>
|
||||
<h2>SEE ALSO</h2>
|
||||
<div class="sectionbody">
|
||||
<p>lame(1), mpg123(1), madplay(1), sox(1)</p>
|
||||
</div>
|
||||
<h2>COPYING</h2>
|
||||
<div class="sectionbody">
|
||||
<p>Copyright © 2004-2006 The TwoLAME Project. Free use of this software is
|
||||
granted under the terms of the GNU Lesser General Public License (LGPL).</p>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:19 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,337 +1,337 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME: MPEG Audio Layer II VBR</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME: MPEG Audio Layer II VBR</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<h2>Contents</h2>
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Introduction
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Usage
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Bitrate Ranges for various Sampling frequencies
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Why can't the bitrate vary from 32kbps to 384kbps for every file?
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Short Answer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Long Answer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Tech Stuff
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>Introduction</h2>
|
||||
<div class="sectionbody">
|
||||
<p>VBR mode works by selecting a different bitrate for each frame. Frames
|
||||
which are harder to encode will be allocated more bits i.e. a higher bitrate.</p>
|
||||
<p>LayerII VBR is a complete hack - the ISO standard actually says that decoders are not
|
||||
required to support it. As a hack, its implementation is a pain to try and understand.
|
||||
If you're mega-keen to get full range VBR working, either (a) send me money (b) grab the
|
||||
ISO standard and a C compiler and email me.</p>
|
||||
</div>
|
||||
<h2>Usage</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame -v [level] inputfile outputfile.</tt></pre>
|
||||
</div></div>
|
||||
<p>A level of 5 works very well for me.</p>
|
||||
<p>The level value can is a measurement of quality - the higher
|
||||
the level the higher the average bitrate of the resultant file.
|
||||
[See TECH STUFF for a better explanation of what the value does]</p>
|
||||
<p>The confusing part of my implementation of LayerII VBR is that it's different from MP3 VBR.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
The range of bitrates used is controlled by the input sampling frequency. (See below "Bitrate ranges")
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The tendency to use higher bitrates is governed by the <level>.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>E.g. Say you have a 44.1kHz Stereo file. In VBR mode, the bitrate can range from 192 to 384 kbps.</p>
|
||||
<p>Using "-v -5" will force the encoder to favour the lower bitrate.</p>
|
||||
<p>Using "-v 5" will force the encoder to favour the upper bitrate.</p>
|
||||
<p>The value can actually be <strong>any</strong> int. -27, 233, 47. The larger the number, the greater
|
||||
the bitrate bias.</p>
|
||||
</div>
|
||||
<h2>Bitrate Ranges</h2>
|
||||
<div class="sectionbody">
|
||||
<p>When making a VBR stream, the bitrate is only allowed to vary within
|
||||
set limits</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>48kHz
|
||||
Stereo: 112-384kbps Mono: 56-192kbps</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>44.1kHz & 32kHz
|
||||
Stereo: 192-384kbps Mono: 96-192kbps</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>24kHz, 22.05kHz & 16kHz
|
||||
Stereo/Mono: 8-160kbps</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
<h2>Why doesn't the VBR mode work the same as MP3VBR? The Short Answer</h2>
|
||||
<div class="sectionbody">
|
||||
<p><strong>Why can't the bitrate vary from 32kbps to 384kbps for every file?</strong></p>
|
||||
<p>According to the standard (ISO/IEC 11172-3:1993) Section 2.4.2.3</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>"In order to provide the smallest possible delay and complexity, the
|
||||
decoder is not required to support a continuously variable bitrate when
|
||||
in layer I or II. Layer III supports variable bitrate by switching the
|
||||
bitrate index."</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>and</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>"For Layer II, not all combinations of total bitrate and mode are allowed."</tt></pre>
|
||||
</div></div>
|
||||
<p>Hence, most LayerII coders would not have been written with VBR in mind, and
|
||||
LayerII VBR is a hack. It works for limited cases. Getting it to work to
|
||||
the same extent as MP3-style VBR will be a major hack.</p>
|
||||
<p>(If you <strong>really</strong> want better bitrate ranges, read "The Long Answer" and submit your mega-patch.)</p>
|
||||
</div>
|
||||
<h2>Why doesn't the VBR mode work the same as MP3VBR? The Long Answer</h2>
|
||||
<div class="sectionbody">
|
||||
<p><strong>Why can't the bitrate vary from 32kbps to 384kbps for every file?</strong></p>
|
||||
<h3>Reason 1: The standard limits the range</h3>
|
||||
<p>As quoted above from the standard for 48/44.1/32kHz:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>"For Layer II, not all combinations of total bitrate and mode are allowed. See
|
||||
the following table."</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>Bitrate Allowed Modes
|
||||
(kbps)
|
||||
32 mono only
|
||||
48 mono only
|
||||
56 mono only
|
||||
64 all modes
|
||||
80 mono only
|
||||
96 all modes
|
||||
112 all modes
|
||||
128 all modes
|
||||
160 all modes
|
||||
192 all modes
|
||||
224 stereo only
|
||||
256 stereo only
|
||||
320 stereo only
|
||||
384 stereo only</tt></pre>
|
||||
</div></div>
|
||||
<p>So based upon this table alone, you <strong>could</strong> have VBR stereo encoding which varies
|
||||
smoothly from 96 to 384kbps. Or you could have have VBR mono encoding which varies from
|
||||
32 to 192kbps. But since the top and bottom bitrates don't apply to all modes, it would
|
||||
be impossible to have a stereo file encoded from 32 to 384 kbps.</p>
|
||||
<p>But this isn't what is really limiting the allowable bitrate range - the bit allocation
|
||||
tables are the major hurdle.</p>
|
||||
<h3>Reason 2: The bit allocation tables don't allow it</h3>
|
||||
<p>From the standard, Section 2.4.3.3.1 "Bit allocation decoding"</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>"For different combinations of bitrate and sampling frequency, different bit
|
||||
allocation tables exist.</tt></pre>
|
||||
</div></div>
|
||||
<p>These bit allocation tables are pre-determined tables (in Annex B of the standard) which
|
||||
indicate</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
how many bits to read for the initial data (2,3 or 4)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
these bits are then used as an index back into the table to
|
||||
find the number of quantize levels for the samples in this subband
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>But the table used (and hence the number of bits and the calculated index) are different
|
||||
for different combinations of bitrate and sampling frequency.</p>
|
||||
<p>I will use TableB.2a as an example.</p>
|
||||
<p>Table B.2a Applies for the following combinations.</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>Sampling Freq Bitrates in (kbps/channel) [emphasis: this is a PER CHANNEL bitrate]
|
||||
48 56, 64, 80, 96, 112, 128, 160, 192
|
||||
44.1 56, 64, 80
|
||||
32 56, 64, 80</tt></pre>
|
||||
</div></div>
|
||||
<p>If we have a STEREO 48kHz input file, and we use this table, then the bitrates
|
||||
we could calculate from this would be 112, 128, 160, 192, 224, 256, 320 and 384 kbps.</p>
|
||||
<p>This table contains no information on how to encode stuff at bitrates less than 112kbps
|
||||
(for a stereo file). You would have to load allocation table B.2c to encode stereo at
|
||||
64kbps and 128kbps.</p>
|
||||
<p>Since it would be a MAJOR piece of hacking to get the different tables shifted in and out
|
||||
during the encoding process, once an allocation table is loaded <strong>IT IS NOT CHANGED</strong>.</p>
|
||||
<p>Hence, the best table is picked at the start of the encoding process, and the encoder
|
||||
is stuck with it for the rest of the encode.</p>
|
||||
<p>For twolame-02j, I have picked the table it loads for different
|
||||
sampling frequencies in order to optimize the range of bitrates possible.</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>48 kHz - Table B.2a
|
||||
Stereo Bitrate Range: 112 - 384
|
||||
Mono Bitrate Range : 56 - 192</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>44.1/32 kHz - Table B.2b
|
||||
Stereo Bitrate Range: 192 - 384
|
||||
Mono Bitrate Range: 96 - 192</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>24/22.05/16 kHz - LSF Table (Standard ISO/IEC 13818.3:1995 Annex B, Table B.1)
|
||||
There is only 1 table for the Lower Sampling Frequencies
|
||||
All modes (mono and stereo) are allowable at all bitrates
|
||||
So at the Lower Sampling Frequencies you *can* have a completely variable
|
||||
bitrate over the entire range.</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
<h2>Tech Stuff</h2>
|
||||
<div class="sectionbody">
|
||||
<p>The VBR mode is mainly centered around the main_bit_allocation() and
|
||||
a_bit_allocation() routines in encode.c.</p>
|
||||
<p>The limited range of VBR is due to my particular implementation which restricts
|
||||
ranges to within one alloc table (see tables B.2a, B.2b, B.2c and B.2d in ISO 11172).
|
||||
The VBR range for 32/44.1khz lies within B.2b, and the 48khz VBR lies within table B.2a.</p>
|
||||
<p>I'm not sure whether it is worth extending these ranges down to lower bitrates.
|
||||
The work required to switch alloc tables <strong>during</strong> the encoding is major.</p>
|
||||
<p>In the case of silence, it might be worth doing a quick check for very low signals
|
||||
and writing a pre-calculated <strong>blank</strong> 32kpbs frame. [probably also a lot of work].</p>
|
||||
</div>
|
||||
<h2>How CBR works</h2>
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Use the psycho model to determine the MNRs for each subband
|
||||
[MNR = the ratio of "masking" to "noise"]
|
||||
(From an encoding perspective, a bigger MNR in a subband means that
|
||||
it sounds better since the noise is more masked))
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
calculate the available data bits (adb) for this bitrate.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Based upon the MNR (Masking:Noise Ratio) values, allocate bits to each
|
||||
subband
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Keep increasing the bits to whichever subband currently has the min MNR
|
||||
value until we have no bits left.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
This mode does not guarentee that all the subbands are without noise
|
||||
ie there may still be subbands with MNR less than 0.0 (noisy!)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>How VBR works</h2>
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
pretend we have lots of bits to spare, and work out the bits which would
|
||||
raise the MNR in each subband to the level given by the argument on the
|
||||
command line "-v [int]"
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Pick the bitrate which has more bits than the required_bits we just calculated
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
calculate a_bit_allocation()
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
VBR "guarantees" that all subbands have MNR > VBRLEVEL or that we have
|
||||
reached the maximum bitrate.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>FUTURE</h2>
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
with this VBR mode, we know the bits aren't going to run out, so we can
|
||||
just assign them "greedily".
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
VBR_a_bit_allocation() is yet to be written :)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:18 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="generator" content="AsciiDoc 7.1.2" />
|
||||
<link rel="stylesheet" href="./twolame.css" type="text/css" />
|
||||
<link rel="stylesheet" href="./twolame-quirks.css" type="text/css" />
|
||||
<title>TwoLAME: MPEG Audio Layer II VBR</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<h1>TwoLAME: MPEG Audio Layer II VBR</h1>
|
||||
<span id="revision">version 0.3.11</span>
|
||||
</div>
|
||||
<h2>Contents</h2>
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Introduction
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Usage
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Bitrate Ranges for various Sampling frequencies
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Why can't the bitrate vary from 32kbps to 384kbps for every file?
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Short Answer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Long Answer
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Tech Stuff
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>Introduction</h2>
|
||||
<div class="sectionbody">
|
||||
<p>VBR mode works by selecting a different bitrate for each frame. Frames
|
||||
which are harder to encode will be allocated more bits i.e. a higher bitrate.</p>
|
||||
<p>LayerII VBR is a complete hack - the ISO standard actually says that decoders are not
|
||||
required to support it. As a hack, its implementation is a pain to try and understand.
|
||||
If you're mega-keen to get full range VBR working, either (a) send me money (b) grab the
|
||||
ISO standard and a C compiler and email me.</p>
|
||||
</div>
|
||||
<h2>Usage</h2>
|
||||
<div class="sectionbody">
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>twolame -v [level] inputfile outputfile.</tt></pre>
|
||||
</div></div>
|
||||
<p>A level of 5 works very well for me.</p>
|
||||
<p>The level value can is a measurement of quality - the higher
|
||||
the level the higher the average bitrate of the resultant file.
|
||||
[See TECH STUFF for a better explanation of what the value does]</p>
|
||||
<p>The confusing part of my implementation of LayerII VBR is that it's different from MP3 VBR.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
The range of bitrates used is controlled by the input sampling frequency. (See below "Bitrate ranges")
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
The tendency to use higher bitrates is governed by the <level>.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>E.g. Say you have a 44.1kHz Stereo file. In VBR mode, the bitrate can range from 192 to 384 kbps.</p>
|
||||
<p>Using "-v -5" will force the encoder to favour the lower bitrate.</p>
|
||||
<p>Using "-v 5" will force the encoder to favour the upper bitrate.</p>
|
||||
<p>The value can actually be <strong>any</strong> int. -27, 233, 47. The larger the number, the greater
|
||||
the bitrate bias.</p>
|
||||
</div>
|
||||
<h2>Bitrate Ranges</h2>
|
||||
<div class="sectionbody">
|
||||
<p>When making a VBR stream, the bitrate is only allowed to vary within
|
||||
set limits</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>48kHz
|
||||
Stereo: 112-384kbps Mono: 56-192kbps</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>44.1kHz & 32kHz
|
||||
Stereo: 192-384kbps Mono: 96-192kbps</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>24kHz, 22.05kHz & 16kHz
|
||||
Stereo/Mono: 8-160kbps</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
<h2>Why doesn't the VBR mode work the same as MP3VBR? The Short Answer</h2>
|
||||
<div class="sectionbody">
|
||||
<p><strong>Why can't the bitrate vary from 32kbps to 384kbps for every file?</strong></p>
|
||||
<p>According to the standard (ISO/IEC 11172-3:1993) Section 2.4.2.3</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>"In order to provide the smallest possible delay and complexity, the
|
||||
decoder is not required to support a continuously variable bitrate when
|
||||
in layer I or II. Layer III supports variable bitrate by switching the
|
||||
bitrate index."</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>and</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>"For Layer II, not all combinations of total bitrate and mode are allowed."</tt></pre>
|
||||
</div></div>
|
||||
<p>Hence, most LayerII coders would not have been written with VBR in mind, and
|
||||
LayerII VBR is a hack. It works for limited cases. Getting it to work to
|
||||
the same extent as MP3-style VBR will be a major hack.</p>
|
||||
<p>(If you <strong>really</strong> want better bitrate ranges, read "The Long Answer" and submit your mega-patch.)</p>
|
||||
</div>
|
||||
<h2>Why doesn't the VBR mode work the same as MP3VBR? The Long Answer</h2>
|
||||
<div class="sectionbody">
|
||||
<p><strong>Why can't the bitrate vary from 32kbps to 384kbps for every file?</strong></p>
|
||||
<h3>Reason 1: The standard limits the range</h3>
|
||||
<p>As quoted above from the standard for 48/44.1/32kHz:</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>"For Layer II, not all combinations of total bitrate and mode are allowed. See
|
||||
the following table."</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>Bitrate Allowed Modes
|
||||
(kbps)
|
||||
32 mono only
|
||||
48 mono only
|
||||
56 mono only
|
||||
64 all modes
|
||||
80 mono only
|
||||
96 all modes
|
||||
112 all modes
|
||||
128 all modes
|
||||
160 all modes
|
||||
192 all modes
|
||||
224 stereo only
|
||||
256 stereo only
|
||||
320 stereo only
|
||||
384 stereo only</tt></pre>
|
||||
</div></div>
|
||||
<p>So based upon this table alone, you <strong>could</strong> have VBR stereo encoding which varies
|
||||
smoothly from 96 to 384kbps. Or you could have have VBR mono encoding which varies from
|
||||
32 to 192kbps. But since the top and bottom bitrates don't apply to all modes, it would
|
||||
be impossible to have a stereo file encoded from 32 to 384 kbps.</p>
|
||||
<p>But this isn't what is really limiting the allowable bitrate range - the bit allocation
|
||||
tables are the major hurdle.</p>
|
||||
<h3>Reason 2: The bit allocation tables don't allow it</h3>
|
||||
<p>From the standard, Section 2.4.3.3.1 "Bit allocation decoding"</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>"For different combinations of bitrate and sampling frequency, different bit
|
||||
allocation tables exist.</tt></pre>
|
||||
</div></div>
|
||||
<p>These bit allocation tables are pre-determined tables (in Annex B of the standard) which
|
||||
indicate</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
how many bits to read for the initial data (2,3 or 4)
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
these bits are then used as an index back into the table to
|
||||
find the number of quantize levels for the samples in this subband
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>But the table used (and hence the number of bits and the calculated index) are different
|
||||
for different combinations of bitrate and sampling frequency.</p>
|
||||
<p>I will use TableB.2a as an example.</p>
|
||||
<p>Table B.2a Applies for the following combinations.</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>Sampling Freq Bitrates in (kbps/channel) [emphasis: this is a PER CHANNEL bitrate]
|
||||
48 56, 64, 80, 96, 112, 128, 160, 192
|
||||
44.1 56, 64, 80
|
||||
32 56, 64, 80</tt></pre>
|
||||
</div></div>
|
||||
<p>If we have a STEREO 48kHz input file, and we use this table, then the bitrates
|
||||
we could calculate from this would be 112, 128, 160, 192, 224, 256, 320 and 384 kbps.</p>
|
||||
<p>This table contains no information on how to encode stuff at bitrates less than 112kbps
|
||||
(for a stereo file). You would have to load allocation table B.2c to encode stereo at
|
||||
64kbps and 128kbps.</p>
|
||||
<p>Since it would be a MAJOR piece of hacking to get the different tables shifted in and out
|
||||
during the encoding process, once an allocation table is loaded <strong>IT IS NOT CHANGED</strong>.</p>
|
||||
<p>Hence, the best table is picked at the start of the encoding process, and the encoder
|
||||
is stuck with it for the rest of the encode.</p>
|
||||
<p>For twolame-02j, I have picked the table it loads for different
|
||||
sampling frequencies in order to optimize the range of bitrates possible.</p>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>48 kHz - Table B.2a
|
||||
Stereo Bitrate Range: 112 - 384
|
||||
Mono Bitrate Range : 56 - 192</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>44.1/32 kHz - Table B.2b
|
||||
Stereo Bitrate Range: 192 - 384
|
||||
Mono Bitrate Range: 96 - 192</tt></pre>
|
||||
</div></div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre><tt>24/22.05/16 kHz - LSF Table (Standard ISO/IEC 13818.3:1995 Annex B, Table B.1)
|
||||
There is only 1 table for the Lower Sampling Frequencies
|
||||
All modes (mono and stereo) are allowable at all bitrates
|
||||
So at the Lower Sampling Frequencies you *can* have a completely variable
|
||||
bitrate over the entire range.</tt></pre>
|
||||
</div></div>
|
||||
</div>
|
||||
<h2>Tech Stuff</h2>
|
||||
<div class="sectionbody">
|
||||
<p>The VBR mode is mainly centered around the main_bit_allocation() and
|
||||
a_bit_allocation() routines in encode.c.</p>
|
||||
<p>The limited range of VBR is due to my particular implementation which restricts
|
||||
ranges to within one alloc table (see tables B.2a, B.2b, B.2c and B.2d in ISO 11172).
|
||||
The VBR range for 32/44.1khz lies within B.2b, and the 48khz VBR lies within table B.2a.</p>
|
||||
<p>I'm not sure whether it is worth extending these ranges down to lower bitrates.
|
||||
The work required to switch alloc tables <strong>during</strong> the encoding is major.</p>
|
||||
<p>In the case of silence, it might be worth doing a quick check for very low signals
|
||||
and writing a pre-calculated <strong>blank</strong> 32kpbs frame. [probably also a lot of work].</p>
|
||||
</div>
|
||||
<h2>How CBR works</h2>
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
Use the psycho model to determine the MNRs for each subband
|
||||
[MNR = the ratio of "masking" to "noise"]
|
||||
(From an encoding perspective, a bigger MNR in a subband means that
|
||||
it sounds better since the noise is more masked))
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
calculate the available data bits (adb) for this bitrate.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Based upon the MNR (Masking:Noise Ratio) values, allocate bits to each
|
||||
subband
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Keep increasing the bits to whichever subband currently has the min MNR
|
||||
value until we have no bits left.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
This mode does not guarentee that all the subbands are without noise
|
||||
ie there may still be subbands with MNR less than 0.0 (noisy!)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>How VBR works</h2>
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
pretend we have lots of bits to spare, and work out the bits which would
|
||||
raise the MNR in each subband to the level given by the argument on the
|
||||
command line "-v [int]"
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
Pick the bitrate which has more bits than the required_bits we just calculated
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
calculate a_bit_allocation()
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
VBR "guarantees" that all subbands have MNR > VBRLEVEL or that we have
|
||||
reached the maximum bitrate.
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>FUTURE</h2>
|
||||
<div class="sectionbody">
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
with this VBR mode, we know the bits aren't going to run out, so we can
|
||||
just assign them "greedily".
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
VBR_a_bit_allocation() is yet to be written :)
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Version 0.3.11<br />
|
||||
Last updated 09-Jan-2008 11:45:18 BST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,20 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual C++ Express 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtwolame_dll", "libtwolame_dll.vcproj", "{DFB06356-061D-4EAD-82F5-4696149B6F01}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{DFB06356-061D-4EAD-82F5-4696149B6F01}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{DFB06356-061D-4EAD-82F5-4696149B6F01}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{DFB06356-061D-4EAD-82F5-4696149B6F01}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{DFB06356-061D-4EAD-82F5-4696149B6F01}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual C++ Express 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtwolame_dll", "libtwolame_dll.vcproj", "{DFB06356-061D-4EAD-82F5-4696149B6F01}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{DFB06356-061D-4EAD-82F5-4696149B6F01}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{DFB06356-061D-4EAD-82F5-4696149B6F01}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{DFB06356-061D-4EAD-82F5-4696149B6F01}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{DFB06356-061D-4EAD-82F5-4696149B6F01}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
@@ -1,367 +1,367 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8,00"
|
||||
Name="libtwolame_dll"
|
||||
ProjectGUID="{DFB06356-061D-4EAD-82F5-4696149B6F01}"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="lib"
|
||||
IntermediateDirectory="temp\dll\Debug"
|
||||
ConfigurationType="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTWOLAME_DLL_EXPORTS;"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\twolameD.dll"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="lib"
|
||||
IntermediateDirectory="temp\dll\Release"
|
||||
ConfigurationType="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTWOLAME_DLL_EXPORTS;"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\twolame.dll"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\libtwolame\ath.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\availbits.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\bitbuffer.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\common.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\configwin.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\crc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\dab.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\encode.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\energy.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\enwindow.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\fft.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\mem.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_0.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_1_critband.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_1_freqtable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_2.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_2_absthr.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_3.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_4.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_n1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\subband.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\twolame.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\util.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\winutil.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\libtwolame\ath.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\availbits.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\bitbuffer.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\crc.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\dab.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\encode.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\energy.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\fft.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\get_set.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\mem.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_0.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_1.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_2.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_3.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_4.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_n1.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\subband.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\twolame.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\util.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8,00"
|
||||
Name="libtwolame_dll"
|
||||
ProjectGUID="{DFB06356-061D-4EAD-82F5-4696149B6F01}"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="lib"
|
||||
IntermediateDirectory="temp\dll\Debug"
|
||||
ConfigurationType="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBTWOLAME_DLL_EXPORTS;"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\twolameD.dll"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="lib"
|
||||
IntermediateDirectory="temp\dll\Release"
|
||||
ConfigurationType="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBTWOLAME_DLL_EXPORTS;"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\twolame.dll"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\libtwolame\ath.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\availbits.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\bitbuffer.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\common.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\configwin.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\crc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\dab.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\encode.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\energy.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\enwindow.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\fft.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\mem.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_0.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_1_critband.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_1_freqtable.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_2.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_2_absthr.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_3.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_4.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_n1.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\subband.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\twolame.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\util.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\winutil.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\libtwolame\ath.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\availbits.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\bitbuffer.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\crc.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\dab.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\encode.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\energy.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\fft.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\get_set.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\mem.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_0.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_1.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_2.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_3.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_4.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\psycho_n1.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\subband.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\twolame.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\libtwolame\util.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
|
@@ -1,20 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual C++ Express 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtwolame_static", "libtwolame_static.vcproj", "{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual C++ Express 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtwolame_static", "libtwolame_static.vcproj", "{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{8C69F7B6-684F-48D9-9057-8912CA3DAA8B}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user