1
0
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:
ra
2010-01-24 13:33:28 +00:00
parent 58caf78a86
commit 6e3e8dcfff
187 changed files with 59451 additions and 59244 deletions

View File

@@ -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>

View File

@@ -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 - &lt;njh at ecs.soton.ac.uk&gt;</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 - &lt;cmassiot at freebox.fr&gt;</div><ul>
<li>
<p>
Changes to make libtwolame thread-safe
</p>
</li>
</ul>
<div class="title"><em>Mean</em> - &lt;mean@users.sourceforge.net&gt;</div><ul>
<li>
<p>
Fix for AMD64 processors
</p>
</li>
<li>
<p>
Fix for CRC protection
</p>
</li>
</ul>
<div class="title">Mike Cheng &lt;mikecheng at NOT planckenergy.com&gt; (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 &lt;mayer at acuson.com&gt;
</p>
</li>
<li>
<p>
fht tweaking by Mathew Hendry &lt;math at vissci.com&gt;
</p>
</li>
<li>
<p>
window_subband &amp; 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 &lt;lietz at nanocosmos.de&gt;</div><ul>
<li>
<p>
Tables now included in the exe! (yay! :)
</p>
</li>
</ul>
<div class="title">Patrick de Smet &lt;pds at telin.rug.ac.be&gt;</div><ul>
<li>
<p>
scale_factor calc speedup.
</p>
</li>
<li>
<p>
subband_quantization speedup
</p>
</li>
</ul>
<div class="title">Bill Eldridge &lt;bill at hk.rfa.org&gt; and Federico Grau &lt;grauf at rfa.org&gt;</div><ul>
<li>
<p>
option for "no padding"
</p>
</li>
</ul>
<div class="title">Nick Burch &lt;gagravarr at SoftHome.net&gt;</div><ul>
<li>
<p>
WAV file reading
</p>
</li>
<li>
<p>
os/2 Makefile mods.
</p>
</li>
</ul>
<div class="title">Phillipe Jouguet &lt;philippe.jouguet at vdldiffusion.com&gt;</div><ul>
<li>
<p>
DAB extensions
</p>
</li>
<li>
<p>
spelling, LSF using psyII, WAVE reading
</p>
</li>
</ul>
<div class="title">Henrik Herranen - &lt;leopold at vlsi.fi&gt;</div><ul>
<li>
<p>
WAVE reading
</p>
</li>
</ul>
<div class="title">Andreas Neukoetter - &lt;anti at webhome.de&gt;</div><ul>
<li>
<p>
verbosity patch <em>-t</em> switch for transcode plugin
</p>
</li>
</ul>
<div class="title">Sami Sallinen - &lt;sami.sallinen at g-cluster.com&gt;</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 - &lt;njh at ecs.soton.ac.uk&gt;</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 - &lt;cmassiot at freebox.fr&gt;</div><ul>
<li>
<p>
Changes to make libtwolame thread-safe
</p>
</li>
</ul>
<div class="title"><em>Mean</em> - &lt;mean@users.sourceforge.net&gt;</div><ul>
<li>
<p>
Fix for AMD64 processors
</p>
</li>
<li>
<p>
Fix for CRC protection
</p>
</li>
</ul>
<div class="title">Mike Cheng &lt;mikecheng at NOT planckenergy.com&gt; (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 &lt;mayer at acuson.com&gt;
</p>
</li>
<li>
<p>
fht tweaking by Mathew Hendry &lt;math at vissci.com&gt;
</p>
</li>
<li>
<p>
window_subband &amp; 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 &lt;lietz at nanocosmos.de&gt;</div><ul>
<li>
<p>
Tables now included in the exe! (yay! :)
</p>
</li>
</ul>
<div class="title">Patrick de Smet &lt;pds at telin.rug.ac.be&gt;</div><ul>
<li>
<p>
scale_factor calc speedup.
</p>
</li>
<li>
<p>
subband_quantization speedup
</p>
</li>
</ul>
<div class="title">Bill Eldridge &lt;bill at hk.rfa.org&gt; and Federico Grau &lt;grauf at rfa.org&gt;</div><ul>
<li>
<p>
option for "no padding"
</p>
</li>
</ul>
<div class="title">Nick Burch &lt;gagravarr at SoftHome.net&gt;</div><ul>
<li>
<p>
WAV file reading
</p>
</li>
<li>
<p>
os/2 Makefile mods.
</p>
</li>
</ul>
<div class="title">Phillipe Jouguet &lt;philippe.jouguet at vdldiffusion.com&gt;</div><ul>
<li>
<p>
DAB extensions
</p>
</li>
<li>
<p>
spelling, LSF using psyII, WAVE reading
</p>
</li>
</ul>
<div class="title">Henrik Herranen - &lt;leopold at vlsi.fi&gt;</div><ul>
<li>
<p>
WAVE reading
</p>
</li>
</ul>
<div class="title">Andreas Neukoetter - &lt;anti at webhome.de&gt;</div><ul>
<li>
<p>
verbosity patch <em>-t</em> switch for transcode plugin
</p>
</li>
</ul>
<div class="title">Sami Sallinen - &lt;sami.sallinen at g-cluster.com&gt;</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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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>

View File

@@ -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>

View File

@@ -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] &lt;infile&gt; [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 &lt;int&gt;
</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 &lt;int&gt;
</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 &lt;int&gt;
</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 &lt;float&gt;
</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 &lt;float&gt;
</dt>
<dd>
<p>
Same as --scale, but only affects the left channel.
</p>
</dd>
<dt>
--scale-r &lt;float&gt;
</dt>
<dd>
<p>
Same as --scale, but only affects the right channel.
</p>
</dd>
</dl>
<h3>Output Options</h3>
<dl>
<dt>
-m, --mode &lt;char&gt;
</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 &lt;int&gt;
</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 &lt;int&gt;
</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 &lt;float&gt;
</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 &lt;float&gt;
</dt>
<dd>
<p>
Set the ATH level. Default level is 0.0.
</p>
</dd>
<dt>
-q, --quick &lt;int&gt;
</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 &lt;int&gt;
</dt>
<dd>
<p>
Reserve specified number of bits in the each from of the
output bitstream.
</p>
</dd>
<dt>
-e, --deemphasis &lt;char&gt;
</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 &lt;int&gt;
</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 - - &gt; 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 &#169; 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] &lt;infile&gt; [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 &lt;int&gt;
</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 &lt;int&gt;
</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 &lt;int&gt;
</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 &lt;float&gt;
</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 &lt;float&gt;
</dt>
<dd>
<p>
Same as --scale, but only affects the left channel.
</p>
</dd>
<dt>
--scale-r &lt;float&gt;
</dt>
<dd>
<p>
Same as --scale, but only affects the right channel.
</p>
</dd>
</dl>
<h3>Output Options</h3>
<dl>
<dt>
-m, --mode &lt;char&gt;
</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 &lt;int&gt;
</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 &lt;int&gt;
</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 &lt;float&gt;
</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 &lt;float&gt;
</dt>
<dd>
<p>
Set the ATH level. Default level is 0.0.
</p>
</dd>
<dt>
-q, --quick &lt;int&gt;
</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 &lt;int&gt;
</dt>
<dd>
<p>
Reserve specified number of bits in the each from of the
output bitstream.
</p>
</dd>
<dt>
-e, --deemphasis &lt;char&gt;
</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 &lt;int&gt;
</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 - - &gt; 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 &#169; 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>

View File

@@ -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 &lt;level&gt;.
</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 &amp; 32kHz
Stereo: 192-384kbps Mono: 96-192kbps</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>24kHz, 22.05kHz &amp; 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 &gt; 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 &lt;level&gt;.
</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 &amp; 32kHz
Stereo: 192-384kbps Mono: 96-192kbps</tt></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><tt>24kHz, 22.05kHz &amp; 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 &gt; 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>

View File

@@ -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

View File

@@ -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>

View File

@@ -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