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