added cbr, abr and vbr setting feature with encoding quality
This commit is contained in:
parent
ae1f874cea
commit
7e9555b97c
|
@ -1,3 +1,9 @@
|
|||
DarkIce 0.10
|
||||
|
||||
o added possibility to select constant, average and variable bit rate
|
||||
encoding modes with specifying encoding quality as well.
|
||||
thanks to Nicu Pavel <npavel@ituner.com>
|
||||
|
||||
09-04-2002: DarkIce 0.9.1 released
|
||||
|
||||
o bugfix: a memory leak was introduced in 0.9, which is fixed thanks to
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(src/DarkIce.cpp)
|
||||
AM_INIT_AUTOMAKE(darkice, 0.9.1)
|
||||
AM_INIT_AUTOMAKE(darkice, 0.10beta)
|
||||
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
|
|
|
@ -17,7 +17,9 @@ channel = 2 # channels. 1 = mono, 2 = stereo
|
|||
# there may be up to 8 of these sections, named [icecast-0] ... [icecast-7]
|
||||
# these can be mixed with [icecast2-x] and [shoutcast-x] sections
|
||||
[icecast-0]
|
||||
bitrateMode = cbr # constant bit rate
|
||||
bitrate = 96 # bitrate of the mp3 stream sent to the server
|
||||
quality = 0.8 # encoding quality
|
||||
server = yp.yourserver.com
|
||||
# host name of the server
|
||||
port = 8000 # port of the IceCast server, usually 8000
|
||||
|
@ -36,6 +38,7 @@ public = yes # advertise this stream?
|
|||
# there may be up to 8 of these sections, named [icecast2-0] ... [icecast2-7]
|
||||
# these can be mixed with [icecast-x] and [shoutcast-x] sections
|
||||
[icecast2-0]
|
||||
bitrateMode = abr # average bit rate
|
||||
format = vorbis # format of the stream: ogg vorbis
|
||||
bitrate = 96 # bitrate of the stream sent to the server
|
||||
server = yp.yourserver.com
|
||||
|
@ -56,7 +59,8 @@ public = yes # advertise this stream?
|
|||
# there may be up to 8 of these sections, named [shoutcast-0] ... [shoutcast-7]
|
||||
# these can be mixed with [icecast-x] and [icecast2-x] sections
|
||||
[shoutcast-0]
|
||||
bitrate = 96 # bitrate of the mp3 stream sent to the server
|
||||
bitrateMode = vbr # variable bit rate mode
|
||||
quality = 0.5 # encoding quality
|
||||
server = yp.yourserver.com
|
||||
# host name of the server
|
||||
port = 8001 # source port of the ShoutCast server, usually 8001
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH darkice 1 "September 18, 2001" "DarkIce" "DarkIce live audio streamer"
|
||||
.TH darkice 1 "April 13, 2002" "DarkIce" "DarkIce live audio streamer"
|
||||
.SH NAME
|
||||
darkice \- an icecast / shoutcast live audio streamer
|
||||
.SH SYNOPSIS
|
||||
|
@ -81,6 +81,9 @@ Ogg Vorbis encoding code based on the contribution of aNa|0Gue
|
|||
BSD porting help from Robin P. Blanchard
|
||||
.I <Robin_Blanchard@gactr.uga.edu>
|
||||
|
||||
CBR, ABR and VBR and encoding quality setting feature from Nicu Pavel
|
||||
.I <npavel@ituner.com>
|
||||
|
||||
|
||||
.SH LINKS
|
||||
Project homepage:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.TH darkice.cfg 5 "March 28, 2002" "DarkIce" "DarkIce live audio streamer"
|
||||
.TH darkice.cfg 5 "April 13, 2002" "DarkIce" "DarkIce live audio streamer"
|
||||
.SH NAME
|
||||
darkice.cfg \- configuration file for darkice
|
||||
.SH DESCRIPTION
|
||||
|
@ -86,9 +86,21 @@ The stream will be reachable at
|
|||
|
||||
Required values:
|
||||
|
||||
.TP
|
||||
.I bitrateMode
|
||||
The bit rate mode of the encoding, either "cbr", "abr" or "vbr",
|
||||
standing for constant bit rate, average bit rate and variable bit
|
||||
respectively. Use the bitrate and/or quality values to specify details
|
||||
of the appropriate bit rate mode.
|
||||
.TP
|
||||
.I bitrate
|
||||
Bit rate to encode to in kBits / sec (e.g. 96)
|
||||
Bit rate to encode to in kBits / sec (e.g. 96). Only used when cbr or
|
||||
abr bit rate modes are specified.
|
||||
.TP
|
||||
.I quality
|
||||
The quality of encoding a value between 0.0 .. 1.0 (e.g. 0.8), with 1.0 being
|
||||
the highest quality. Use a value greater than 0.0. Only used when cbr or vbr
|
||||
bit rate modes are specified.
|
||||
.TP
|
||||
.I server
|
||||
The
|
||||
|
@ -177,14 +189,20 @@ Format of the stream sent to the
|
|||
.B IceCast2
|
||||
server. Currently the only supported value here is 'vorbis'.
|
||||
.TP
|
||||
.I bitrateMode
|
||||
The bit rate mode of the encoding, either "cbr", "abr" or "vbr",
|
||||
standing for constant bit rate, average bit rate and variable bit
|
||||
respectively. Use the bitrate and/or quality values to specify details
|
||||
of the appropriate bit rate mode.
|
||||
.TP
|
||||
.I bitrate
|
||||
Bit rate to encode to in kBits / sec (e.g. 96)
|
||||
If specified, the quality field may not be specified.
|
||||
Bit rate to encode to in kBits / sec (e.g. 96). Only used when cbr or
|
||||
abr bit rate modes are specified.
|
||||
.TP
|
||||
.I quality
|
||||
Quality of a variable bitrate stream, a number between 0.0 ... 1.0
|
||||
(e.g. 0.8).
|
||||
If specified, the bitrate field may not be specified.
|
||||
The quality of encoding a value between 0.0 .. 1.0 (e.g. 0.8), with 1.0 being
|
||||
the highest quality. Use a value greater than 0.0. Only used when cbr or vbr
|
||||
bit rate modes are specified.
|
||||
.TP
|
||||
.I server
|
||||
The
|
||||
|
@ -244,9 +262,21 @@ The stream will be reachable at
|
|||
|
||||
Required values:
|
||||
|
||||
.TP
|
||||
.I bitrateMode
|
||||
The bit rate mode of the encoding, either "cbr", "abr" or "vbr",
|
||||
standing for constant bit rate, average bit rate and variable bit
|
||||
respectively. Use the bitrate and/or quality values to specify details
|
||||
of the appropriate bit rate mode.
|
||||
.TP
|
||||
.I bitrate
|
||||
Bit rate to encode to in kBits / sec (e.g. 96)
|
||||
Bit rate to encode to in kBits / sec (e.g. 96). Only used when cbr or
|
||||
abr bit rate modes are specified.
|
||||
.TP
|
||||
.I quality
|
||||
The quality of encoding a value between 0.0 .. 1.0 (e.g. 0.8), with 1.0 being
|
||||
the highest quality. Use a value greater than 0.0. Only used when cbr or vbr
|
||||
bit rate modes are specified.
|
||||
.TP
|
||||
.I server
|
||||
The
|
||||
|
@ -319,8 +349,20 @@ Required values:
|
|||
.I format
|
||||
Format to encode in. Must be either 'mp3' or 'vorbis'.
|
||||
.TP
|
||||
.I bitrateMode
|
||||
The bit rate mode of the encoding, either "cbr", "abr" or "vbr",
|
||||
standing for constant bit rate, average bit rate and variable bit
|
||||
respectively. Use the bitrate and/or quality values to specify details
|
||||
of the appropriate bit rate mode.
|
||||
.TP
|
||||
.I bitrate
|
||||
Bit rate to encode to in kBits / sec (e.g. 96)
|
||||
Bit rate to encode to in kBits / sec (e.g. 96). Only used when cbr or
|
||||
abr bit rate modes are specified.
|
||||
.TP
|
||||
.I quality
|
||||
The quality of encoding a value between 0.0 .. 1.0 (e.g. 0.8), with 1.0 being
|
||||
the highest quality. Use a value greater than 0.0. Only used when cbr or vbr
|
||||
bit rate modes are specified.
|
||||
.TP
|
||||
.I fileName
|
||||
The name of the local file to save the encoded data into.
|
||||
|
@ -355,7 +397,8 @@ at 22.05kHz, 16 bit stereo.
|
|||
It will build up a connection to the
|
||||
.B IceCast
|
||||
server yp.yourserver.com on port 8000 with the password "hackme".
|
||||
The stream will be encoded to 96 kb/s mp3, and will be reachable at
|
||||
The stream will be encoded to 96 kb/s mp3 with quality 0.8, and will be
|
||||
reachable at
|
||||
.I http://yp.yourserver.com:8000/live96
|
||||
to mp3 players.
|
||||
The encoding session will be stored by
|
||||
|
@ -380,7 +423,9 @@ bitsPerSample = 16
|
|||
channel = 2
|
||||
|
||||
[icecast-0]
|
||||
bitrateMode = cbr
|
||||
bitrate = 96
|
||||
quality = 0.8
|
||||
server = yp.yourserver.com
|
||||
port = 8000
|
||||
password = hackme
|
||||
|
@ -397,8 +442,8 @@ localDumpFile = /tmp/encoder-dump.mp3
|
|||
|
||||
.PP
|
||||
The following sample configuration file simply encodes the 16 bit stereo
|
||||
44.1 kHz sound card input into Ogg Vorbis at 96 kb/s for 60 seconds, and saves
|
||||
it in the local file at /tmp/save.ogg.
|
||||
44.1 kHz sound card input into Ogg Vorbis at average bit rate 96 kb/s for 60
|
||||
seconds, and saves it in the local file at /tmp/save.ogg.
|
||||
|
||||
.nf
|
||||
[general]
|
||||
|
@ -413,6 +458,7 @@ channel = 2
|
|||
|
||||
[file-0]
|
||||
format = vorbis
|
||||
bitrateMode = abr
|
||||
bitrate = 96
|
||||
fileName = /tmp/save.ogg
|
||||
.fi
|
||||
|
@ -429,7 +475,8 @@ It will build up a connection to an
|
|||
.B IceCast
|
||||
server yp.your-ice-server.com on port 8000 with the password "ice-hackme".
|
||||
The sound for this stream will be cut at 10500 Hz from above.
|
||||
The stream will be encoded to 96 kb/s mp3 and resampled to 22.05kHz.
|
||||
The stream will be encoded to average bit rate 96 kb/s mp3 and resampled to
|
||||
22.05kHz.
|
||||
The stream will be reachable at
|
||||
.I http://yp.your-ice-server.com:8000/live96
|
||||
to mp3 players.
|
||||
|
@ -442,7 +489,8 @@ on the server side.
|
|||
It will also connect to a
|
||||
.I ShoutCast
|
||||
server at yp.your-shout-server.com on port 8001 with the password "shout-hackme"
|
||||
This stream will be encoded to 128 kb/s mp3, and will be reachable at
|
||||
This stream will be encoded to constant bit rate 128 kb/s mp3 with quality
|
||||
0.8, and will be reachable at
|
||||
.I http://yp.your-shout-server.com:8000
|
||||
to mp3 players.
|
||||
|
||||
|
@ -459,6 +507,7 @@ channel = 2
|
|||
|
||||
[icecast-0]
|
||||
sampleRate = 22050
|
||||
bitrateMode = abr
|
||||
bitrate = 96
|
||||
lowpass = 10500
|
||||
server = yp.your-ice-server.com
|
||||
|
@ -473,7 +522,9 @@ public = yes
|
|||
remoteDumpFile = /tmp/live96.mp3
|
||||
|
||||
[shoutcast-0]
|
||||
bitrateMode = cbr
|
||||
bitrate = 128
|
||||
quality = 0.8
|
||||
server = yp.your-shout-server.com
|
||||
port = 8001
|
||||
password = shout-hackme
|
||||
|
|
|
@ -57,6 +57,18 @@
|
|||
*/
|
||||
class AudioEncoder : public Sink, public virtual Referable
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Type to specify bitrate mode. Possible values:
|
||||
* - cbr - constant bitrate mode
|
||||
* described by bitrate
|
||||
* - abr - average bitrate mode
|
||||
* described by an average bitrate and quality
|
||||
* - vbr - variable bitrate mode
|
||||
* described by quality
|
||||
*/
|
||||
enum BitrateMode { cbr, abr, vbr };
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
|
@ -79,6 +91,11 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
*/
|
||||
bool inBigEndian;
|
||||
|
||||
/**
|
||||
* The bitrate mode of the encoder
|
||||
*/
|
||||
BitrateMode outBitrateMode;
|
||||
|
||||
/**
|
||||
* Bit rate of the output in kbits/sec, for fixed bitrate encodings.
|
||||
*/
|
||||
|
@ -105,7 +122,8 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
* @param inSampleRate sample rate of the input.
|
||||
* @param inBitsPerSample number of bits per sample of the input.
|
||||
* @param inChannel number of channels of the input.
|
||||
* @param inBigEndian shows if the input is big or little endian
|
||||
* @param inBigEndian shows if the input is big or little endian.
|
||||
* @param outBitrateMode the bit rate mode of the output.
|
||||
* @param outBitrate bit rate of the output.
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* @param outChannel number of channels of the output.
|
||||
|
@ -116,8 +134,9 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
unsigned int inBitsPerSample,
|
||||
unsigned int inChannel,
|
||||
bool inBigEndian,
|
||||
BitrateMode outBitrateMode,
|
||||
unsigned int outBitrate,
|
||||
float outQuality,
|
||||
double outQuality,
|
||||
unsigned int outSampleRate,
|
||||
unsigned int outChannel ) throw ( Exception )
|
||||
{
|
||||
|
@ -125,10 +144,15 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
this->inBitsPerSample = inBitsPerSample;
|
||||
this->inChannel = inChannel;
|
||||
this->inBigEndian = inBigEndian;
|
||||
this->outBitrateMode = outBitrateMode;
|
||||
this->outBitrate = outBitrate;
|
||||
this->outQuality = outQuality;
|
||||
this->outSampleRate = outSampleRate;
|
||||
this->outChannel = outChannel;
|
||||
|
||||
if ( outQuality < 0 || 1.0 < outQuality ) {
|
||||
throw Exception( __FILE__, __LINE__, "invalid encoder quality");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -156,46 +180,14 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
}
|
||||
|
||||
/**
|
||||
* Constructor for fixed bitrate encoding.
|
||||
* Constructor.
|
||||
*
|
||||
* @param inSampleRate sample rate of the input.
|
||||
* @param inBitsPerSample number of bits per sample of the input.
|
||||
* @param inChannel number of channels of the input.
|
||||
* @param inBigEndian shows if the input is big or little endian
|
||||
* @param outBitrateMode the bit rate mode of the output.
|
||||
* @param outBitrate bit rate of the output (kbits/sec).
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, inSampleRate is used.
|
||||
* @param outChannel number of channels of the output.
|
||||
* If 0, inChannel is used.
|
||||
* @exception Exception
|
||||
*/
|
||||
inline
|
||||
AudioEncoder ( unsigned int inSampleRate,
|
||||
unsigned int inBitsPerSample,
|
||||
unsigned int inChannel,
|
||||
bool inBigEndian,
|
||||
unsigned int outBitrate,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0 )
|
||||
throw ( Exception )
|
||||
{
|
||||
init ( inSampleRate,
|
||||
inBitsPerSample,
|
||||
inChannel,
|
||||
inBigEndian,
|
||||
outBitrate,
|
||||
0.0,
|
||||
outSampleRate ? outSampleRate : inSampleRate,
|
||||
outChannel ? outChannel : inChannel );
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for variable bitrate encoding.
|
||||
*
|
||||
* @param inSampleRate sample rate of the input.
|
||||
* @param inBitsPerSample number of bits per sample of the input.
|
||||
* @param inChannel number of channels of the input.
|
||||
* @param inBigEndian shows if the input is big or little endian
|
||||
* @param outQuality the quality of the stream.
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, inSampleRate is used.
|
||||
|
@ -208,6 +200,8 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
unsigned int inBitsPerSample,
|
||||
unsigned int inChannel,
|
||||
bool inBigEndian,
|
||||
BitrateMode outBitrateMode,
|
||||
unsigned int outBitrate,
|
||||
double outQuality,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0 )
|
||||
|
@ -217,46 +211,20 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
inBitsPerSample,
|
||||
inChannel,
|
||||
inBigEndian,
|
||||
0,
|
||||
outBitrateMode,
|
||||
outBitrate,
|
||||
outQuality,
|
||||
outSampleRate ? outSampleRate : inSampleRate,
|
||||
outChannel ? outChannel : inChannel );
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for fixed bitrate encoding.
|
||||
* Constructor.
|
||||
*
|
||||
* @param as get input sample rate, bits per sample and channels
|
||||
* from this AudioSource.
|
||||
* @param outBitrateMode the bit rate mode of the output.
|
||||
* @param outBitrate bit rate of the output (kbits/sec).
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, input sample rate is used.
|
||||
* @param outChannel number of channels of the output.
|
||||
* If 0, input channel is used.
|
||||
* @exception Exception
|
||||
*/
|
||||
inline
|
||||
AudioEncoder ( const AudioSource * as,
|
||||
unsigned int outBitrate,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0 )
|
||||
throw ( Exception)
|
||||
{
|
||||
init( as->getSampleRate(),
|
||||
as->getBitsPerSample(),
|
||||
as->getChannel(),
|
||||
as->isBigEndian(),
|
||||
outBitrate,
|
||||
0.0,
|
||||
outSampleRate ? outSampleRate : as->getSampleRate(),
|
||||
outChannel ? outChannel : as->getChannel() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for variable bitrate encoding.
|
||||
*
|
||||
* @param as get input sample rate, bits per sample and channels
|
||||
* from this AudioSource.
|
||||
* @param outQuality the quality of the stream.
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, input sample rate is used.
|
||||
|
@ -266,6 +234,8 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
*/
|
||||
inline
|
||||
AudioEncoder ( const AudioSource * as,
|
||||
BitrateMode outBitrateMode,
|
||||
unsigned int outBitrate,
|
||||
double outQuality,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0 )
|
||||
|
@ -274,8 +244,9 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
init( as->getSampleRate(),
|
||||
as->getBitsPerSample(),
|
||||
as->getChannel(),
|
||||
as->isBigEndian(),
|
||||
0,
|
||||
as->isBigEndian(),
|
||||
outBitrateMode,
|
||||
outBitrate,
|
||||
outQuality,
|
||||
outSampleRate ? outSampleRate : as->getSampleRate(),
|
||||
outChannel ? outChannel : as->getChannel() );
|
||||
|
@ -293,6 +264,7 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
encoder.inBitsPerSample,
|
||||
encoder.inChannel,
|
||||
encoder.inBigEndian,
|
||||
encoder.outBitrateMode,
|
||||
encoder.outBitrate,
|
||||
encoder.outQuality,
|
||||
encoder.outSampleRate,
|
||||
|
@ -316,6 +288,7 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
encoder.inBitsPerSample,
|
||||
encoder.inChannel,
|
||||
encoder.inBigEndian,
|
||||
encoder.outBitrateMode,
|
||||
encoder.outBitrate,
|
||||
encoder.outQuality,
|
||||
encoder.outSampleRate,
|
||||
|
@ -405,6 +378,17 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
return outSampleRate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the bit rate mode of the output.
|
||||
*
|
||||
* @return the bit rate mode of the output.
|
||||
*/
|
||||
inline BitrateMode
|
||||
getOutBitrateMode ( void ) const throw ()
|
||||
{
|
||||
return outBitrateMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the bit rate of the output in kbits/sec, for fixed bitrate
|
||||
* encodings.
|
||||
|
@ -429,18 +413,6 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
return outQuality;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tell if this encoding is fixed bitrate or variable bitrate.
|
||||
*
|
||||
* @return <code>true</code> if this encoding is variable bitrate,
|
||||
* <code>false</code> if fixed bitrate.
|
||||
*/
|
||||
inline bool
|
||||
isVBR ( void ) const throw ()
|
||||
{
|
||||
return outBitrate == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check wether encoding is in progress.
|
||||
*
|
||||
|
@ -484,6 +456,9 @@ class AudioEncoder : public Sink, public virtual Referable
|
|||
$Source$
|
||||
|
||||
$Log$
|
||||
Revision 1.7 2002/04/13 11:26:00 darkeye
|
||||
added cbr, abr and vbr setting feature with encoding quality
|
||||
|
||||
Revision 1.6 2002/03/28 16:39:32 darkeye
|
||||
added interface for variable bitrate encoding
|
||||
|
||||
|
|
|
@ -198,29 +198,68 @@ DarkIce :: configIceCast ( const Config & config,
|
|||
stream);
|
||||
#else
|
||||
|
||||
const char * str;
|
||||
const char * str;
|
||||
|
||||
unsigned int sampleRate = 0;
|
||||
unsigned int bitrate = 0;
|
||||
const char * server = 0;
|
||||
unsigned int port = 0;
|
||||
const char * password = 0;
|
||||
const char * mountPoint = 0;
|
||||
const char * remoteDumpFile = 0;
|
||||
const char * name = 0;
|
||||
const char * description = 0;
|
||||
const char * url = 0;
|
||||
const char * genre = 0;
|
||||
bool isPublic = false;
|
||||
int lowpass = 0;
|
||||
int highpass = 0;
|
||||
const char * localDumpName = 0;
|
||||
FileSink * localDumpFile = 0;
|
||||
unsigned int sampleRate = 0;
|
||||
AudioEncoder::BitrateMode bitrateMode;
|
||||
unsigned int bitrate = 0;
|
||||
double quality = 0.0;
|
||||
const char * server = 0;
|
||||
unsigned int port = 0;
|
||||
const char * password = 0;
|
||||
const char * mountPoint = 0;
|
||||
const char * remoteDumpFile = 0;
|
||||
const char * name = 0;
|
||||
const char * description = 0;
|
||||
const char * url = 0;
|
||||
const char * genre = 0;
|
||||
bool isPublic = false;
|
||||
int lowpass = 0;
|
||||
int highpass = 0;
|
||||
const char * localDumpName = 0;
|
||||
FileSink * localDumpFile = 0;
|
||||
|
||||
str = cs->get( "sampleRate");
|
||||
sampleRate = str ? Util::strToL( str) : dsp->getSampleRate();
|
||||
str = cs->getForSure("bitrate", " missing in section ", stream);
|
||||
bitrate = Util::strToL( str);
|
||||
|
||||
str = cs->get( "bitrate");
|
||||
bitrate = str ? Util::strToL( str) : 0;
|
||||
str = cs->get( "quality");
|
||||
quality = str ? Util::strToD( str) : 0.0;
|
||||
|
||||
str = cs->getForSure( "bitrateMode",
|
||||
" not specified in section ",
|
||||
stream);
|
||||
if ( Util::strEq( str, "cbr") ) {
|
||||
bitrateMode = AudioEncoder::cbr;
|
||||
|
||||
if ( bitrate == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"bitrate not specified for CBR encoding");
|
||||
}
|
||||
if ( quality == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"quality not specified for CBR encoding");
|
||||
}
|
||||
} else if ( Util::strEq( str, "abr") ) {
|
||||
bitrateMode = AudioEncoder::abr;
|
||||
|
||||
if ( bitrate == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"bitrate not specified for ABR encoding");
|
||||
}
|
||||
} else if ( Util::strEq( str, "vbr") ) {
|
||||
bitrateMode = AudioEncoder::vbr;
|
||||
|
||||
if ( quality == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"quality not specified for VBR encoding");
|
||||
}
|
||||
} else {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"invalid bitrate mode: ", str);
|
||||
}
|
||||
|
||||
server = cs->getForSure( "server", " missing in section ", stream);
|
||||
str = cs->getForSure( "port", " missing in section ", stream);
|
||||
port = Util::strToL( str);
|
||||
|
@ -239,6 +278,7 @@ DarkIce :: configIceCast ( const Config & config,
|
|||
lowpass = str ? Util::strToL( str) : 0;
|
||||
str = cs->get( "highpass");
|
||||
highpass = str ? Util::strToL( str) : 0;
|
||||
|
||||
localDumpName = cs->get( "localDumpFile");
|
||||
|
||||
// go on and create the things
|
||||
|
@ -278,7 +318,9 @@ DarkIce :: configIceCast ( const Config & config,
|
|||
|
||||
audioOuts[u].encoder = new LameLibEncoder( audioOuts[u].server.get(),
|
||||
dsp.get(),
|
||||
bitrateMode,
|
||||
bitrate,
|
||||
quality,
|
||||
sampleRate,
|
||||
dsp->getChannel(),
|
||||
lowpass,
|
||||
|
@ -316,23 +358,24 @@ DarkIce :: configIceCast2 ( const Config & config,
|
|||
break;
|
||||
}
|
||||
|
||||
const char * str;
|
||||
const char * str;
|
||||
|
||||
IceCast2::StreamFormat format;
|
||||
unsigned int sampleRate = 0;
|
||||
unsigned int bitrate = 0;
|
||||
double quality = 0.0;
|
||||
const char * server = 0;
|
||||
unsigned int port = 0;
|
||||
const char * password = 0;
|
||||
const char * mountPoint = 0;
|
||||
const char * name = 0;
|
||||
const char * description = 0;
|
||||
const char * url = 0;
|
||||
const char * genre = 0;
|
||||
bool isPublic = false;
|
||||
const char * localDumpName = 0;
|
||||
FileSink * localDumpFile = 0;
|
||||
IceCast2::StreamFormat format;
|
||||
unsigned int sampleRate = 0;
|
||||
AudioEncoder::BitrateMode bitrateMode;
|
||||
unsigned int bitrate = 0;
|
||||
double quality = 0.0;
|
||||
const char * server = 0;
|
||||
unsigned int port = 0;
|
||||
const char * password = 0;
|
||||
const char * mountPoint = 0;
|
||||
const char * name = 0;
|
||||
const char * description = 0;
|
||||
const char * url = 0;
|
||||
const char * genre = 0;
|
||||
bool isPublic = false;
|
||||
const char * localDumpName = 0;
|
||||
FileSink * localDumpFile = 0;
|
||||
|
||||
str = cs->getForSure( "format", " missing in section ", stream);
|
||||
if ( Util::strEq( str, "vorbis") ) {
|
||||
|
@ -356,18 +399,40 @@ DarkIce :: configIceCast2 ( const Config & config,
|
|||
bitrate = str ? Util::strToL( str) : 0;
|
||||
str = cs->get( "quality");
|
||||
quality = str ? Util::strToD( str) : 0.0;
|
||||
|
||||
if ( bitrate == 0 && quality == 0.0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"neither fixed bitrate nor VBR quality specified in ",
|
||||
stream);
|
||||
}
|
||||
if ( bitrate != 0 && quality != 0.0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"both fixed bitrate and VBR quality specified in ",
|
||||
stream);
|
||||
}
|
||||
|
||||
str = cs->getForSure( "bitrateMode",
|
||||
" not specified in section ",
|
||||
stream);
|
||||
if ( Util::strEq( str, "cbr") ) {
|
||||
bitrateMode = AudioEncoder::cbr;
|
||||
|
||||
if ( bitrate == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"bitrate not specified for CBR encoding");
|
||||
}
|
||||
if ( quality == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"quality not specified for CBR encoding");
|
||||
}
|
||||
} else if ( Util::strEq( str, "abr") ) {
|
||||
bitrateMode = AudioEncoder::abr;
|
||||
|
||||
if ( bitrate == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"bitrate not specified for ABR encoding");
|
||||
}
|
||||
} else if ( Util::strEq( str, "vbr") ) {
|
||||
bitrateMode = AudioEncoder::vbr;
|
||||
|
||||
if ( quality == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"quality not specified for VBR encoding");
|
||||
}
|
||||
} else {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"invalid bitrate mode: ", str);
|
||||
}
|
||||
|
||||
server = cs->getForSure( "server", " missing in section ", stream);
|
||||
str = cs->getForSure( "port", " missing in section ", stream);
|
||||
port = Util::strToL( str);
|
||||
|
@ -429,7 +494,9 @@ DarkIce :: configIceCast2 ( const Config & config,
|
|||
audioOuts[u].encoder = new LameLibEncoder(
|
||||
audioOuts[u].server.get(),
|
||||
dsp.get(),
|
||||
bitrateMode,
|
||||
bitrate,
|
||||
quality,
|
||||
sampleRate,
|
||||
dsp->getChannel() );
|
||||
#endif // HAVE_LAME_LIB
|
||||
|
@ -442,21 +509,14 @@ DarkIce :: configIceCast2 ( const Config & config,
|
|||
"thus can't Ogg Vorbis stream: ",
|
||||
stream);
|
||||
#else
|
||||
if ( bitrate != 0 ) {
|
||||
audioOuts[u].encoder = new VorbisLibEncoder(
|
||||
audioOuts[u].server.get(),
|
||||
dsp.get(),
|
||||
bitrate,
|
||||
sampleRate,
|
||||
dsp->getChannel() );
|
||||
} else {
|
||||
audioOuts[u].encoder = new VorbisLibEncoder(
|
||||
audioOuts[u].server.get(),
|
||||
dsp.get(),
|
||||
quality,
|
||||
sampleRate,
|
||||
dsp->getChannel() );
|
||||
}
|
||||
audioOuts[u].encoder = new VorbisLibEncoder(
|
||||
audioOuts[u].server.get(),
|
||||
dsp.get(),
|
||||
bitrateMode,
|
||||
bitrate,
|
||||
quality,
|
||||
sampleRate,
|
||||
dsp->getChannel() );
|
||||
#endif // HAVE_VORBIS_LIB
|
||||
break;
|
||||
|
||||
|
@ -480,7 +540,7 @@ DarkIce :: configShoutCast ( const Config & config,
|
|||
unsigned int bufferSecs )
|
||||
throw ( Exception )
|
||||
{
|
||||
// look for IceCast encoder output streams,
|
||||
// look for Shoutcast encoder output streams,
|
||||
// sections [shoutcast-0], [shoutcast-1], ...
|
||||
char stream[] = "shoutcast- ";
|
||||
size_t streamLen = Util::strLen( stream);
|
||||
|
@ -503,29 +563,68 @@ DarkIce :: configShoutCast ( const Config & config,
|
|||
stream);
|
||||
#else
|
||||
|
||||
const char * str;
|
||||
const char * str;
|
||||
|
||||
unsigned int sampleRate = 0;
|
||||
unsigned int bitrate = 0;
|
||||
const char * server = 0;
|
||||
unsigned int port = 0;
|
||||
const char * password = 0;
|
||||
const char * name = 0;
|
||||
const char * url = 0;
|
||||
const char * genre = 0;
|
||||
bool isPublic = false;
|
||||
int lowpass = 0;
|
||||
int highpass = 0;
|
||||
const char * irc = 0;
|
||||
const char * aim = 0;
|
||||
const char * icq = 0;
|
||||
const char * localDumpName = 0;
|
||||
FileSink * localDumpFile = 0;
|
||||
unsigned int sampleRate = 0;
|
||||
AudioEncoder::BitrateMode bitrateMode;
|
||||
unsigned int bitrate = 0;
|
||||
double quality = 0.0;
|
||||
const char * server = 0;
|
||||
unsigned int port = 0;
|
||||
const char * password = 0;
|
||||
const char * name = 0;
|
||||
const char * url = 0;
|
||||
const char * genre = 0;
|
||||
bool isPublic = false;
|
||||
int lowpass = 0;
|
||||
int highpass = 0;
|
||||
const char * irc = 0;
|
||||
const char * aim = 0;
|
||||
const char * icq = 0;
|
||||
const char * localDumpName = 0;
|
||||
FileSink * localDumpFile = 0;
|
||||
|
||||
str = cs->get( "sampleRate");
|
||||
sampleRate = str ? Util::strToL( str) : dsp->getSampleRate();
|
||||
str = cs->getForSure("bitrate", " missing in section ", stream);
|
||||
bitrate = Util::strToL( str);
|
||||
|
||||
str = cs->get( "bitrate");
|
||||
bitrate = str ? Util::strToL( str) : 0;
|
||||
str = cs->get( "quality");
|
||||
quality = str ? Util::strToD( str) : 0.0;
|
||||
|
||||
str = cs->getForSure( "bitrateMode",
|
||||
" not specified in section ",
|
||||
stream);
|
||||
if ( Util::strEq( str, "cbr") ) {
|
||||
bitrateMode = AudioEncoder::cbr;
|
||||
|
||||
if ( bitrate == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"bitrate not specified for CBR encoding");
|
||||
}
|
||||
if ( quality == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"quality not specified for CBR encoding");
|
||||
}
|
||||
} else if ( Util::strEq( str, "abr") ) {
|
||||
bitrateMode = AudioEncoder::abr;
|
||||
|
||||
if ( bitrate == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"bitrate not specified for ABR encoding");
|
||||
}
|
||||
} else if ( Util::strEq( str, "vbr") ) {
|
||||
bitrateMode = AudioEncoder::vbr;
|
||||
|
||||
if ( quality == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"quality not specified for VBR encoding");
|
||||
}
|
||||
} else {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"invalid bitrate mode: ", str);
|
||||
}
|
||||
|
||||
server = cs->getForSure( "server", " missing in section ", stream);
|
||||
str = cs->getForSure( "port", " missing in section ", stream);
|
||||
port = Util::strToL( str);
|
||||
|
@ -581,7 +680,9 @@ DarkIce :: configShoutCast ( const Config & config,
|
|||
|
||||
audioOuts[u].encoder = new LameLibEncoder( audioOuts[u].server.get(),
|
||||
dsp.get(),
|
||||
bitrateMode,
|
||||
bitrate,
|
||||
quality,
|
||||
sampleRate,
|
||||
dsp->getChannel(),
|
||||
lowpass,
|
||||
|
@ -618,14 +719,16 @@ DarkIce :: configFileCast ( const Config & config )
|
|||
break;
|
||||
}
|
||||
|
||||
const char * str;
|
||||
const char * str;
|
||||
|
||||
const char * format = 0;
|
||||
unsigned int bitrate = 0;
|
||||
const char * targetFileName = 0;
|
||||
unsigned int sampleRate = 0;
|
||||
int lowpass = 0;
|
||||
int highpass = 0;
|
||||
const char * format = 0;
|
||||
AudioEncoder::BitrateMode bitrateMode;
|
||||
unsigned int bitrate = 0;
|
||||
double quality = 0.0;
|
||||
const char * targetFileName = 0;
|
||||
unsigned int sampleRate = 0;
|
||||
int lowpass = 0;
|
||||
int highpass = 0;
|
||||
|
||||
format = cs->getForSure( "format", " missing in section ", stream);
|
||||
if ( !Util::strEq( format, "vorbis") && !Util::strEq( format, "mp3") ) {
|
||||
|
@ -640,6 +743,45 @@ DarkIce :: configFileCast ( const Config & config )
|
|||
stream);
|
||||
str = cs->get( "sampleRate");
|
||||
sampleRate = str ? Util::strToL( str) : dsp->getSampleRate();
|
||||
|
||||
str = cs->get( "bitrate");
|
||||
bitrate = str ? Util::strToL( str) : 0;
|
||||
str = cs->get( "quality");
|
||||
quality = str ? Util::strToD( str) : 0.0;
|
||||
|
||||
str = cs->getForSure( "bitrateMode",
|
||||
" not specified in section ",
|
||||
stream);
|
||||
if ( Util::strEq( str, "cbr") ) {
|
||||
bitrateMode = AudioEncoder::cbr;
|
||||
|
||||
if ( bitrate == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"bitrate not specified for CBR encoding");
|
||||
}
|
||||
if ( quality == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"quality not specified for CBR encoding");
|
||||
}
|
||||
} else if ( Util::strEq( str, "abr") ) {
|
||||
bitrateMode = AudioEncoder::abr;
|
||||
|
||||
if ( bitrate == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"bitrate not specified for ABR encoding");
|
||||
}
|
||||
} else if ( Util::strEq( str, "vbr") ) {
|
||||
bitrateMode = AudioEncoder::vbr;
|
||||
|
||||
if ( quality == 0 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"quality not specified for VBR encoding");
|
||||
}
|
||||
} else {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"invalid bitrate mode: ", str);
|
||||
}
|
||||
|
||||
str = cs->get( "lowpass");
|
||||
lowpass = str ? Util::strToL( str) : 0;
|
||||
str = cs->get( "highpass");
|
||||
|
@ -670,7 +812,9 @@ DarkIce :: configFileCast ( const Config & config )
|
|||
audioOuts[u].encoder = new LameLibEncoder(
|
||||
audioOuts[u].server.get(),
|
||||
dsp.get(),
|
||||
bitrateMode,
|
||||
bitrate,
|
||||
quality,
|
||||
sampleRate,
|
||||
dsp->getChannel(),
|
||||
lowpass,
|
||||
|
@ -686,7 +830,9 @@ DarkIce :: configFileCast ( const Config & config )
|
|||
audioOuts[u].encoder = new VorbisLibEncoder(
|
||||
audioOuts[u].server.get(),
|
||||
dsp.get(),
|
||||
bitrateMode,
|
||||
bitrate,
|
||||
quality,
|
||||
dsp->getSampleRate(),
|
||||
dsp->getChannel() );
|
||||
#endif // HAVE_VORBIS_LIB
|
||||
|
@ -834,6 +980,9 @@ DarkIce :: run ( void ) throw ( Exception )
|
|||
$Source$
|
||||
|
||||
$Log$
|
||||
Revision 1.27 2002/04/13 11:26:00 darkeye
|
||||
added cbr, abr and vbr setting feature with encoding quality
|
||||
|
||||
Revision 1.26 2002/03/28 16:43:11 darkeye
|
||||
enabled resampling and variable bitrates for vorbis (icecast2) streams
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#ifdef HAVE_LAME_LIB
|
||||
|
||||
|
||||
|
||||
#include "Exception.h"
|
||||
#include "Util.h"
|
||||
#include "LameLibEncoder.h"
|
||||
|
@ -117,14 +118,82 @@ LameLibEncoder :: open ( void )
|
|||
"set lame out sample rate",
|
||||
lame_get_out_samplerate( lameGlobalFlags));
|
||||
|
||||
if ( 0 > lame_set_brate( lameGlobalFlags, getOutBitrate()) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting output bit rate error",
|
||||
getOutBitrate() );
|
||||
switch ( getOutBitrateMode() ) {
|
||||
|
||||
case cbr: {
|
||||
|
||||
if ( 0 > lame_set_brate( lameGlobalFlags, getOutBitrate()) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting output bit rate error",
|
||||
getOutBitrate() );
|
||||
}
|
||||
|
||||
reportEvent( 5,
|
||||
"set lame bit rate",
|
||||
lame_get_brate( lameGlobalFlags));
|
||||
|
||||
double d = (1.0 - getOutQuality()) * 10.0;
|
||||
int q = int (d + 0.499999);
|
||||
|
||||
if ( 0 > lame_set_quality( lameGlobalFlags, q) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting quality error", q);
|
||||
}
|
||||
|
||||
reportEvent( 5,
|
||||
"set lame quality",
|
||||
lame_get_quality( lameGlobalFlags));
|
||||
} break;
|
||||
|
||||
case abr:
|
||||
|
||||
if ( 0 > lame_set_VBR( lameGlobalFlags,vbr_abr)) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting abr error", vbr_abr);
|
||||
}
|
||||
|
||||
reportEvent( 5,
|
||||
"set lame abr bitrate",
|
||||
lame_get_VBR( lameGlobalFlags));
|
||||
|
||||
if ( 0 > lame_set_VBR_mean_bitrate_kbps( lameGlobalFlags,
|
||||
getOutBitrate())) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting abr mean bitrate error",
|
||||
getOutBitrate());
|
||||
}
|
||||
|
||||
reportEvent( 5,
|
||||
"set lame abr mean bitrate",
|
||||
lame_get_VBR_mean_bitrate_kbps( lameGlobalFlags));
|
||||
break;
|
||||
|
||||
case vbr: {
|
||||
|
||||
if ( 0 > lame_set_VBR( lameGlobalFlags, vbr_mtrh)) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting vbr error", vbr_mtrh );
|
||||
}
|
||||
|
||||
reportEvent( 5,
|
||||
"set lame vbr bitrate",
|
||||
lame_get_VBR( lameGlobalFlags));
|
||||
|
||||
double d = (1.0 - getOutQuality()) * 10.0;
|
||||
int q = int (d + 0.499999);
|
||||
|
||||
if ( 0 > lame_set_VBR_q( lameGlobalFlags, q) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting vbr quality error", q);
|
||||
}
|
||||
|
||||
reportEvent( 5,
|
||||
"set lame vbr quality",
|
||||
lame_get_VBR_q( lameGlobalFlags));
|
||||
} break;
|
||||
}
|
||||
|
||||
reportEvent( 5, "set lame bit rate", lame_get_brate( lameGlobalFlags));
|
||||
|
||||
|
||||
if ( 0 > lame_set_lowpassfreq( lameGlobalFlags, lowpass) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting lowpass frequency error",
|
||||
|
@ -145,15 +214,10 @@ LameLibEncoder :: open ( void )
|
|||
"set lame highpass frequency",
|
||||
lame_get_highpassfreq( lameGlobalFlags));
|
||||
|
||||
|
||||
|
||||
|
||||
// not configurable lame settings
|
||||
|
||||
if ( 0 > lame_set_quality( lameGlobalFlags, 2) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"lame lib setting quality error",
|
||||
2 );
|
||||
}
|
||||
|
||||
reportEvent( 5, "set lame quality", lame_get_quality( lameGlobalFlags));
|
||||
|
||||
if ( 0 > lame_set_exp_nspsytune( lameGlobalFlags, 1) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
|
@ -315,6 +379,9 @@ LameLibEncoder :: close ( void ) throw ( Exception )
|
|||
$Source$
|
||||
|
||||
$Log$
|
||||
Revision 1.11 2002/04/13 11:26:00 darkeye
|
||||
added cbr, abr and vbr setting feature with encoding quality
|
||||
|
||||
Revision 1.10 2002/03/28 16:38:37 darkeye
|
||||
moved functions conv8() and conv16() to class Util
|
||||
|
||||
|
|
|
@ -112,11 +112,11 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
inline void
|
||||
init ( Sink * sink,
|
||||
int lowpass,
|
||||
int highpass ) throw ( Exception )
|
||||
int highpass ) throw ( Exception )
|
||||
{
|
||||
this->sink = sink;
|
||||
this->lowpass = lowpass;
|
||||
this->highpass = highpass;
|
||||
this->sink = sink;
|
||||
this->lowpass = lowpass;
|
||||
this->highpass = highpass;
|
||||
|
||||
if ( getInBitsPerSample() != 16 && getInBitsPerSample() != 8 ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
|
@ -164,11 +164,14 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
* @param inSampleRate sample rate of the input.
|
||||
* @param inBitsPerSample number of bits per sample of the input.
|
||||
* @param inChannel number of channels of the input.
|
||||
* @param outBitrate bit rate of the output (bits/sec).
|
||||
* @param outBitrateMode the bit rate mode of the output.
|
||||
* @param outBitrate bit rate of the output (kbits/sec).
|
||||
* @param outQuality the quality of the stream.
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, inSampleRate is used.
|
||||
* @param outChannel number of channels of the output.
|
||||
* If 0, inChannel is used.
|
||||
* @param inBigEndian shows if the input is big or little endian
|
||||
* @param lowpass frequency threshold for the lowpass filter.
|
||||
* Input above this frequency is cut.
|
||||
* If 0, lame's default values are used,
|
||||
|
@ -184,7 +187,10 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
unsigned int inSampleRate,
|
||||
unsigned int inBitsPerSample,
|
||||
unsigned int inChannel,
|
||||
bool inBigEndian,
|
||||
BitrateMode outBitrateMode,
|
||||
unsigned int outBitrate,
|
||||
double outQuality,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0,
|
||||
int lowpass = 0,
|
||||
|
@ -193,12 +199,15 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
|
||||
: AudioEncoder ( inSampleRate,
|
||||
inBitsPerSample,
|
||||
inChannel,
|
||||
inChannel,
|
||||
inBigEndian,
|
||||
outBitrateMode,
|
||||
outBitrate,
|
||||
outQuality,
|
||||
outSampleRate,
|
||||
outChannel )
|
||||
{
|
||||
init( sink, lowpass, highpass );
|
||||
init( sink, lowpass, highpass);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -207,7 +216,9 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
* @param sink the sink to send mp3 output to
|
||||
* @param as get input sample rate, bits per sample and channels
|
||||
* from this AudioSource.
|
||||
* @param outBitrate bit rate of the output (bits/sec).
|
||||
* @param outBitrateMode the bit rate mode of the output.
|
||||
* @param outBitrate bit rate of the output (kbits/sec).
|
||||
* @param outQuality the quality of the stream.
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, input sample rate is used.
|
||||
* @param outChannel number of channels of the output.
|
||||
|
@ -225,7 +236,9 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
inline
|
||||
LameLibEncoder ( Sink * sink,
|
||||
const AudioSource * as,
|
||||
BitrateMode outBitrateMode,
|
||||
unsigned int outBitrate,
|
||||
double outQuality,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0,
|
||||
int lowpass = 0,
|
||||
|
@ -233,11 +246,13 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
throw ( Exception )
|
||||
|
||||
: AudioEncoder ( as,
|
||||
outBitrateMode,
|
||||
outBitrate,
|
||||
outQuality,
|
||||
outSampleRate,
|
||||
outChannel )
|
||||
{
|
||||
init( sink, lowpass, highpass );
|
||||
init( sink, lowpass, highpass);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -252,6 +267,7 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
{
|
||||
init( encoder.sink.get(), encoder.lowpass, encoder.highpass );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
|
@ -420,6 +436,9 @@ class LameLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
$Source$
|
||||
|
||||
$Log$
|
||||
Revision 1.12 2002/04/13 11:26:00 darkeye
|
||||
added cbr, abr and vbr setting feature with encoding quality
|
||||
|
||||
Revision 1.11 2002/03/28 16:38:37 darkeye
|
||||
moved functions conv8() and conv16() to class Util
|
||||
|
||||
|
|
|
@ -73,37 +73,43 @@ VorbisLibEncoder :: open ( void )
|
|||
|
||||
vorbis_info_init( &vorbisInfo);
|
||||
|
||||
if ( isVBR() ) {
|
||||
switch ( getOutBitrateMode() ) {
|
||||
|
||||
if ( (ret = vorbis_encode_init_vbr( &vorbisInfo,
|
||||
case cbr:
|
||||
case abr:
|
||||
#ifdef VORBIS_LIB_RC3
|
||||
if ( (ret = vorbis_encode_init( &vorbisInfo,
|
||||
getInChannel(),
|
||||
getOutSampleRate(),
|
||||
getOutQuality() )) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"vorbis encode init error", ret);
|
||||
}
|
||||
} else {
|
||||
#ifdef VORBIS_LIB_RC3
|
||||
if ( (ret = vorbis_encode_init( &vorbisInfo,
|
||||
getInChannel(),
|
||||
getOutSampleRate(),
|
||||
getOutBitrate() * 1024,
|
||||
getOutBitrate() * 1024,
|
||||
-1 )) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"vorbis encode init error", ret);
|
||||
}
|
||||
getOutBitrate() * 1000,
|
||||
getOutBitrate() * 1000,
|
||||
-1 )) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"vorbis encode init error", ret);
|
||||
}
|
||||
#else
|
||||
if ( (ret = vorbis_encode_init( &vorbisInfo,
|
||||
getInChannel(),
|
||||
getOutSampleRate(),
|
||||
-1,
|
||||
getOutBitrate() * 1024,
|
||||
-1 )) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"vorbis encode init error", ret);
|
||||
}
|
||||
if ( (ret = vorbis_encode_init( &vorbisInfo,
|
||||
getInChannel(),
|
||||
getOutSampleRate(),
|
||||
-1,
|
||||
getOutBitrate() * 1000,
|
||||
-1 )) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"vorbis encode init error", ret);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case vbr:
|
||||
|
||||
if ( (ret = vorbis_encode_init_vbr( &vorbisInfo,
|
||||
getInChannel(),
|
||||
getOutSampleRate(),
|
||||
getOutQuality() )) ) {
|
||||
throw Exception( __FILE__, __LINE__,
|
||||
"vorbis encode init error", ret);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ( (ret = vorbis_analysis_init( &vorbisDspState, &vorbisInfo)) ) {
|
||||
|
@ -310,6 +316,9 @@ VorbisLibEncoder :: close ( void ) throw ( Exception )
|
|||
$Source$
|
||||
|
||||
$Log$
|
||||
Revision 1.8 2002/04/13 11:26:00 darkeye
|
||||
added cbr, abr and vbr setting feature with encoding quality
|
||||
|
||||
Revision 1.7 2002/03/28 16:47:38 darkeye
|
||||
moved functions conv8() and conv16() to class Util (as conv())
|
||||
added resampling functionality
|
||||
|
|
|
@ -191,13 +191,16 @@ class VorbisLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
public:
|
||||
|
||||
/**
|
||||
* Constructor for fixed bitrate encoding.
|
||||
* Constructor.
|
||||
*
|
||||
* @param sink the sink to send mp3 output to
|
||||
* @param inSampleRate sample rate of the input.
|
||||
* @param inBitsPerSample number of bits per sample of the input.
|
||||
* @param inChannel number of channels of the input.
|
||||
* @param inBigEndian shows if the input is big or little endian
|
||||
* @param outBitrateMode the bit rate mode of the output.
|
||||
* @param outBitrate bit rate of the output (kbits/sec).
|
||||
* @param outQuality the quality of the stream.
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, inSampleRate is used.
|
||||
* @param outChannel number of channels of the output.
|
||||
|
@ -209,40 +212,9 @@ class VorbisLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
unsigned int inSampleRate,
|
||||
unsigned int inBitsPerSample,
|
||||
unsigned int inChannel,
|
||||
bool inBigEndian,
|
||||
BitrateMode outBitrateMode,
|
||||
unsigned int outBitrate,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0 )
|
||||
throw ( Exception )
|
||||
|
||||
: AudioEncoder ( inSampleRate,
|
||||
inBitsPerSample,
|
||||
inChannel,
|
||||
outBitrate,
|
||||
outSampleRate,
|
||||
outChannel )
|
||||
{
|
||||
init( sink);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for variable bitrate encoding.
|
||||
*
|
||||
* @param sink the sink to send mp3 output to
|
||||
* @param inSampleRate sample rate of the input.
|
||||
* @param inBitsPerSample number of bits per sample of the input.
|
||||
* @param inChannel number of channels of the input.
|
||||
* @param outQuality the quality of the stream (0.0 .. 1.0).
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, inSampleRate is used.
|
||||
* @param outChannel number of channels of the output.
|
||||
* If 0, inChannel is used.
|
||||
* @exception Exception
|
||||
*/
|
||||
inline
|
||||
VorbisLibEncoder ( Sink * sink,
|
||||
unsigned int inSampleRate,
|
||||
unsigned int inBitsPerSample,
|
||||
unsigned int inChannel,
|
||||
double outQuality,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0 )
|
||||
|
@ -251,6 +223,9 @@ class VorbisLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
: AudioEncoder ( inSampleRate,
|
||||
inBitsPerSample,
|
||||
inChannel,
|
||||
inBigEndian,
|
||||
outBitrateMode,
|
||||
outBitrate,
|
||||
outQuality,
|
||||
outSampleRate,
|
||||
outChannel )
|
||||
|
@ -259,12 +234,14 @@ class VorbisLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
}
|
||||
|
||||
/**
|
||||
* Constructor for fixed bitrate encoding.
|
||||
* Constructor.
|
||||
*
|
||||
* @param sink the sink to send mp3 output to
|
||||
* @param as get input sample rate, bits per sample and channels
|
||||
* from this AudioSource.
|
||||
* @param outBitrateMode the bit rate mode of the output.
|
||||
* @param outBitrate bit rate of the output (kbits/sec).
|
||||
* @param outQuality the quality of the stream.
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, input sample rate is used.
|
||||
* @param outChannel number of channels of the output.
|
||||
|
@ -274,41 +251,16 @@ class VorbisLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
inline
|
||||
VorbisLibEncoder ( Sink * sink,
|
||||
const AudioSource * as,
|
||||
BitrateMode outBitrateMode,
|
||||
unsigned int outBitrate,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0 )
|
||||
throw ( Exception )
|
||||
|
||||
: AudioEncoder ( as,
|
||||
outBitrate,
|
||||
outSampleRate,
|
||||
outChannel )
|
||||
{
|
||||
init( sink);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for variable bitrate encoding.
|
||||
*
|
||||
* @param sink the sink to send mp3 output to
|
||||
* @param as get input sample rate, bits per sample and channels
|
||||
* from this AudioSource.
|
||||
* @param outQuality the quality of the stream (0.0 .. 1.0).
|
||||
* @param outSampleRate sample rate of the output.
|
||||
* If 0, input sample rate is used.
|
||||
* @param outChannel number of channels of the output.
|
||||
* If 0, input channel is used.
|
||||
* @exception Exception
|
||||
*/
|
||||
inline
|
||||
VorbisLibEncoder ( Sink * sink,
|
||||
const AudioSource * as,
|
||||
double outQuality,
|
||||
unsigned int outSampleRate = 0,
|
||||
unsigned int outChannel = 0 )
|
||||
throw ( Exception )
|
||||
|
||||
: AudioEncoder ( as,
|
||||
outBitrateMode,
|
||||
outBitrate,
|
||||
outQuality,
|
||||
outSampleRate,
|
||||
outChannel )
|
||||
|
@ -493,6 +445,9 @@ class VorbisLibEncoder : public AudioEncoder, public virtual Reporter
|
|||
$Source$
|
||||
|
||||
$Log$
|
||||
Revision 1.5 2002/04/13 11:26:00 darkeye
|
||||
added cbr, abr and vbr setting feature with encoding quality
|
||||
|
||||
Revision 1.4 2002/03/28 16:47:38 darkeye
|
||||
moved functions conv8() and conv16() to class Util (as conv())
|
||||
added resampling functionality
|
||||
|
|
Loading…
Reference in New Issue