CDToMP3(WAV)-2
///////////////////////lame.cpp//////////////////////////////////////
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Lame.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
TBEERR Err;
unsigned FileLength,Done;
unsigned dwWrite,toRead,isRead,toWrite,IsWritten;
AnsiString FWAVFileName,FMp3FileName;
Word PrcntComplete;
//---------------------------------------------------------------------------
__fastcall TLameVersion::TLameVersion(void)
: TPersistent()
{
beVersion(FBeV);
}
//---------------------------------------------------------------------------
void __fastcall TLameVersion::Assign(TPersistent *Source)
{
if(Source->ClassNameIs("TLameVersion"))
{
FBeV.byDLLMajorVersion=((TLameVersion *)Source)->FBeV.byDLLMajorVersion;
FBeV.byDLLMinorVersion=((TLameVersion *)Source)->FBeV.byDLLMinorVersion;
FBeV.byMajorVersion=((TLameVersion *)Source)->FBeV.byMajorVersion;
FBeV.byMinorVersion=((TLameVersion *)Source)->FBeV.byMinorVersion;
}
else TPersistent::Assign(Source);
}
//---------------------------------------------------------------------------
__fastcall TLameCoder::TLameCoder(TComponent *AOwner)
: TComponent(AOwner)
{
FSampleRate=44100;
FBitrate=128;
FMaxBitrate=320;
FQuality=NORMAL_QUALITY;
FCRC=true;
FVBRQuality=4;
FInputFiles=new TStringList;
FOutputFiles=new TStringList;
FLameVersion=new TLameVersion;
FDefaultExt=".mp3";
}
//---------------------------------------------------------------------------
__fastcall TLameCoder::~TLameCoder()
{
delete FInputFiles;
delete FOutputFiles;
delete FLameVersion;
}
//---------------------------------------------------------------------------
void __fastcall TLameCoder::Assign(TPersistent *Source)
{
if(Source->ClassNameIs("TLameCoder"))
{
FSampleRate =((TLameCoder *)Source)->FSampleRate;
FReSampleRate =((TLameCoder *)Source)->FReSampleRate;
FMode =((TLameCoder *)Source)->FMode;
FBitrate =((TLameCoder *)Source)->FBitrate;
FMaxBitrate =((TLameCoder *)Source)->FMaxBitrate;
FQuality =((TLameCoder *)Source)->FQuality;
FMpegVersion =((TLameCoder *)Source)->FMpegVersion;
FPsyModel =((TLameCoder *)Source)->FPsyModel;
FEmphasis =((TLameCoder *)Source)->FEmphasis;
FPrivate =((TLameCoder *)Source)->FPrivate;
FCRC =((TLameCoder *)Source)->FCRC;
FCopyright =((TLameCoder *)Source)->FCopyright;
FOriginal =((TLameCoder *)Source)->FOriginal;
FWriteVBRHeader=((TLameCoder *)Source)->FWriteVBRHeader;
FEnableVBR =((TLameCoder *)Source)->FEnableVBR;
FVBRQuality =((TLameCoder *)Source)->FVBRQuality;
}
else TComponent::Assign(Source);
}
//---------------------------------------------------------------------------
void __fastcall TLameCoder::SetSampleRate(unsigned Value)
{
FSampleRate=Value;
}
//---------------------------------------------------------------------------
void __fastcall TLameCoder::SetBitrate(unsigned Value)
{
FBitrate=Value;
}
//---------------------------------------------------------------------------
void __fastcall TLameCoder::SetEnableVBR(BOOL Value)
{
FEnableVBR=Value;
FWriteVBRHeader=Value;
}
//---------------------------------------------------------------------------
TLameVersion * __fastcall TLameCoder::GetLameVersion(void)
{
return FLameVersion;
}
//---------------------------------------------------------------------------
void __fastcall TLameCoder::SetInputFiles(TStrings *Value )
{
FInputFiles->Assign(Value);
FOutputFiles->Clear();
for(int I=0;I<FInputFiles->Count;I++)
FOutputFiles->Add(ChangeFileExt(FInputFiles->Strings[I],FDefaultExt));
}
//---------------------------------------------------------------------------
void __fastcall TLameCoder::SetOutputFiles(TStrings *Value)
{
FOutputFiles->Assign(Value);
}
//---------------------------------------------------------------------------
void __fastcall TLameCoder::SetMode(TLameMode Value)
{
switch(Value)
{
case STEREO : FMode=BE_MP3_MODE_STEREO;break;
case JSTEREO : FMode=BE_MP3_MODE_JSTEREO;break;
case DUALCHANNEL: FMode=BE_MP3_MODE_DUALCHANNEL;break;
case MONO : FMode=BE_MP3_MODE_MONO;break;
}
}
//---------------------------------------------------------------------------
TLameMode __fastcall TLameCoder::GetMode(void)
{
switch(FMode)
{
case BE_MP3_MODE_STEREO :return STEREO;
case BE_MP3_MODE_JSTEREO :return JSTEREO;
case BE_MP3_MODE_DUALCHANNEL:return DUALCHANNEL;
case BE_MP3_MODE_MONO :return MONO;
}
return MONO;
}
//---------------------------------------------------------------------------
TBEERR __fastcall TLameCoder::PrepareCoder(void)
{
FBeConfig.Format.dwConfig=BE_CONFIG_LAME;
TLHV1 *LHV1=&FBeConfig.Format.LHV1;
LHV1->dwStructVersion=1;
LHV1->dwStructSize =sizeof(FBeConfig);
LHV1->dwSampleRate =FSampleRate;
LHV1->dwReSampleRate =0;
LHV1->nMode =FMode;
LHV1->dwBitrate =FBitrate;
LHV1->dwMaxBitrate =FMaxBitrate;
LHV1->nQuality =unsigned(FQuality);
LHV1->dwMpegVersion =MPEG1;
LHV1->dwPsyModel =0;
LHV1->dwEmphasis =0;
LHV1->bPrivate =FPrivate;
LHV1->bCRC =FCRC;
LHV1->bCopyright =FCopyright;
LHV1->bOriginal =FOriginal;
LHV1->bWriteVBRHeader=FWriteVBRHeader;
LHV1->bEnableVBR =FEnableVBR;
LHV1->nVBRQuality =FVBRQuality;
Err=beInitStream(FBeConfig,FNumSamples,FBufSize,FHBeStream);
if(Err==BE_ERR_SUCCESSFUL)
FOutputBuf=new char[FBufSize];
return Err;
}