mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-30 23:49:28 +02:00
Bug 2383 - Audio converted to 16-bit before encoded to MP3
This commit is contained in:
parent
a6d0b3f902
commit
efa9354e8d
@ -700,20 +700,20 @@ typedef lame_global_flags *lame_init_t(void);
|
||||
typedef int lame_init_params_t(lame_global_flags*);
|
||||
typedef const char* get_lame_version_t(void);
|
||||
|
||||
typedef int lame_encode_buffer_t (
|
||||
lame_global_flags* gf,
|
||||
const short int buffer_l [],
|
||||
const short int buffer_r [],
|
||||
const int nsamples,
|
||||
unsigned char * mp3buf,
|
||||
const int mp3buf_size );
|
||||
typedef int CDECL lame_encode_buffer_ieee_float_t(
|
||||
lame_t gfp,
|
||||
const float pcm_l[],
|
||||
const float pcm_r[],
|
||||
const int nsamples,
|
||||
unsigned char * mp3buf,
|
||||
const int mp3buf_size);
|
||||
|
||||
typedef int lame_encode_buffer_interleaved_t(
|
||||
lame_global_flags* gf,
|
||||
short int pcm[],
|
||||
int num_samples, /* per channel */
|
||||
unsigned char* mp3buf,
|
||||
int mp3buf_size );
|
||||
typedef int CDECL lame_encode_buffer_interleaved_ieee_float_t(
|
||||
lame_t gfp,
|
||||
const float pcm[],
|
||||
const int nsamples,
|
||||
unsigned char * mp3buf,
|
||||
const int mp3buf_size);
|
||||
|
||||
typedef int lame_encode_flush_t(
|
||||
lame_global_flags *gf,
|
||||
@ -826,12 +826,12 @@ public:
|
||||
int GetOutBufferSize();
|
||||
|
||||
/* returns the number of bytes written. input is interleaved if stereo*/
|
||||
int EncodeBuffer(short int inbuffer[], unsigned char outbuffer[]);
|
||||
int EncodeRemainder(short int inbuffer[], int nSamples,
|
||||
int EncodeBuffer(float inbuffer[], unsigned char outbuffer[]);
|
||||
int EncodeRemainder(float inbuffer[], int nSamples,
|
||||
unsigned char outbuffer[]);
|
||||
|
||||
int EncodeBufferMono(short int inbuffer[], unsigned char outbuffer[]);
|
||||
int EncodeRemainderMono(short int inbuffer[], int nSamples,
|
||||
int EncodeBufferMono(float inbuffer[], unsigned char outbuffer[]);
|
||||
int EncodeRemainderMono(float inbuffer[], int nSamples,
|
||||
unsigned char outbuffer[]);
|
||||
|
||||
int FinishStream(unsigned char outbuffer[]);
|
||||
@ -863,8 +863,8 @@ private:
|
||||
/* function pointers to the symbols we get from the library */
|
||||
lame_init_t* lame_init;
|
||||
lame_init_params_t* lame_init_params;
|
||||
lame_encode_buffer_t* lame_encode_buffer;
|
||||
lame_encode_buffer_interleaved_t* lame_encode_buffer_interleaved;
|
||||
lame_encode_buffer_ieee_float_t* lame_encode_buffer_ieee_float;
|
||||
lame_encode_buffer_interleaved_ieee_float_t* lame_encode_buffer_interleaved_ieee_float;
|
||||
lame_encode_flush_t* lame_encode_flush;
|
||||
lame_close_t* lame_close;
|
||||
get_lame_version_t* get_lame_version;
|
||||
@ -1085,8 +1085,8 @@ bool MP3Exporter::InitLibraryInternal()
|
||||
lame_init = ::lame_init;
|
||||
get_lame_version = ::get_lame_version;
|
||||
lame_init_params = ::lame_init_params;
|
||||
lame_encode_buffer = ::lame_encode_buffer;
|
||||
lame_encode_buffer_interleaved = ::lame_encode_buffer_interleaved;
|
||||
lame_encode_buffer_ieee_float = ::lame_encode_buffer_ieee_float;
|
||||
lame_encode_buffer_interleaved_ieee_float = ::lame_encode_buffer_interleaved_ieee_float;
|
||||
lame_encode_flush = ::lame_encode_flush;
|
||||
lame_close = ::lame_close;
|
||||
|
||||
@ -1146,10 +1146,10 @@ bool MP3Exporter::InitLibraryExternal(wxString libpath)
|
||||
lame_lib.GetSymbol(wxT("get_lame_version"));
|
||||
lame_init_params = (lame_init_params_t *)
|
||||
lame_lib.GetSymbol(wxT("lame_init_params"));
|
||||
lame_encode_buffer = (lame_encode_buffer_t *)
|
||||
lame_lib.GetSymbol(wxT("lame_encode_buffer"));
|
||||
lame_encode_buffer_interleaved = (lame_encode_buffer_interleaved_t *)
|
||||
lame_lib.GetSymbol(wxT("lame_encode_buffer_interleaved"));
|
||||
lame_encode_buffer_ieee_float = (lame_encode_buffer_ieee_float_t *)
|
||||
lame_lib.GetSymbol(wxT("lame_encode_buffer_ieee_float"));
|
||||
lame_encode_buffer_interleaved_ieee_float = (lame_encode_buffer_interleaved_ieee_float_t *)
|
||||
lame_lib.GetSymbol(wxT("lame_encode_buffer_interleaved_ieee_float_t"));
|
||||
lame_encode_flush = (lame_encode_flush_t *)
|
||||
lame_lib.GetSymbol(wxT("lame_encode_flush"));
|
||||
lame_close = (lame_close_t *)
|
||||
@ -1199,8 +1199,8 @@ bool MP3Exporter::InitLibraryExternal(wxString libpath)
|
||||
if (!lame_init ||
|
||||
!get_lame_version ||
|
||||
!lame_init_params ||
|
||||
!lame_encode_buffer ||
|
||||
!lame_encode_buffer_interleaved ||
|
||||
!lame_encode_buffer_ieee_float ||
|
||||
!lame_encode_buffer_interleaved_ieee_float ||
|
||||
!lame_encode_flush ||
|
||||
!lame_close ||
|
||||
!lame_set_in_samplerate ||
|
||||
@ -1386,45 +1386,45 @@ int MP3Exporter::GetOutBufferSize()
|
||||
return mOutBufferSize;
|
||||
}
|
||||
|
||||
int MP3Exporter::EncodeBuffer(short int inbuffer[], unsigned char outbuffer[])
|
||||
int MP3Exporter::EncodeBuffer(float inbuffer[], unsigned char outbuffer[])
|
||||
{
|
||||
if (!mEncoding) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return lame_encode_buffer_interleaved(mGF, inbuffer, mSamplesPerChunk,
|
||||
return lame_encode_buffer_interleaved_ieee_float(mGF, inbuffer, mSamplesPerChunk,
|
||||
outbuffer, mOutBufferSize);
|
||||
}
|
||||
|
||||
int MP3Exporter::EncodeRemainder(short int inbuffer[], int nSamples,
|
||||
int MP3Exporter::EncodeRemainder(float inbuffer[], int nSamples,
|
||||
unsigned char outbuffer[])
|
||||
{
|
||||
if (!mEncoding) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return lame_encode_buffer_interleaved(mGF, inbuffer, nSamples, outbuffer,
|
||||
return lame_encode_buffer_interleaved_ieee_float(mGF, inbuffer, nSamples, outbuffer,
|
||||
mOutBufferSize);
|
||||
}
|
||||
|
||||
int MP3Exporter::EncodeBufferMono(short int inbuffer[], unsigned char outbuffer[])
|
||||
int MP3Exporter::EncodeBufferMono(float inbuffer[], unsigned char outbuffer[])
|
||||
{
|
||||
if (!mEncoding) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return lame_encode_buffer(mGF, inbuffer,inbuffer, mSamplesPerChunk,
|
||||
return lame_encode_buffer_ieee_float(mGF, inbuffer,inbuffer, mSamplesPerChunk,
|
||||
outbuffer, mOutBufferSize);
|
||||
}
|
||||
|
||||
int MP3Exporter::EncodeRemainderMono(short int inbuffer[], int nSamples,
|
||||
int MP3Exporter::EncodeRemainderMono(float inbuffer[], int nSamples,
|
||||
unsigned char outbuffer[])
|
||||
{
|
||||
if (!mEncoding) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return lame_encode_buffer(mGF, inbuffer, inbuffer, nSamples, outbuffer,
|
||||
return lame_encode_buffer_ieee_float(mGF, inbuffer, inbuffer, nSamples, outbuffer,
|
||||
mOutBufferSize);
|
||||
}
|
||||
|
||||
@ -1914,7 +1914,7 @@ ProgressResult ExportMP3::Export(AudacityProject *project,
|
||||
auto mixer = CreateMixer(tracks, selectionOnly,
|
||||
t0, t1,
|
||||
channels, inSamples, true,
|
||||
rate, int16Sample, true, mixerSpec);
|
||||
rate, floatSample, true, mixerSpec);
|
||||
|
||||
TranslatableString title;
|
||||
if (rmode == MODE_SET) {
|
||||
@ -1946,7 +1946,7 @@ ProgressResult ExportMP3::Export(AudacityProject *project,
|
||||
break;
|
||||
}
|
||||
|
||||
short *mixed = (short *)mixer->GetBuffer();
|
||||
float *mixed = (float *)mixer->GetBuffer();
|
||||
|
||||
if ((int)blockLen < inSamples) {
|
||||
if (channels > 1) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user