⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exportmp3.cpp

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 CPP
📖 第 1 页 / 共 4 页
字号:
   if( gMP3Exporter )      delete gMP3Exporter;   gMP3Exporter = NULL;}#elif defined(__WXMAC__)   /* --------------------------------------------------------------------------*/   /* The following code is intended to work with LAMELib, roughly LAME      verson 3.87, as distributed by N2MP3. */   typedef struct {      /* input file description */      unsigned long num_samples;  /* number of samples. default=2^32-1    */      int num_channels;           /* input number of channels. default=2  */      int in_samplerate;          /* input_samp_rate. default=44.1kHz     */      int out_samplerate;         /* output_samp_rate. (usually determined automatically)   */       float scale;                /* scale input by this amount */      /* general control params */      int gtkflag;                /* run frame analyzer?       */      int bWriteVbrTag;           /* add Xing VBR tag?         */      int disable_waveheader;     /* disable writing of .wav header, when *decoding* */      int decode_only;            /* use lame/mpglib to convert mp3 to wav */      int ogg;                    /* encode to Vorbis .ogg file */      int quality;                /* quality setting 0=best,  9=worst  */      int silent;                 /* disable some status output */      float update_interval;      /* to use Frank's time status display */      int brhist_disp;            /* enable VBR bitrate histogram display */      int mode;                       /* 0,1,2,3 stereo,jstereo,dual channel,mono */      int mode_fixed;                 /* use specified the mode, do not use lame's opinion of the best mode */      int force_ms;                   /* force M/S mode.  requires mode=1 */      int brate;                      /* bitrate */      float compression_ratio;          /* user specified compression ratio, instead of brate */      int free_format;                /* use free format? */      int space[10000];  /* to liberally accomadate for the real size of the struct */   } lame_global_flags;   /* All functions types are suffexed with _t because gcc won't let you have a    * type and a variable of the same name */   typedef void lame_init_t(lame_global_flags *);   /* NOTE: Same deal with this one: >= 3.88 changes it to: const char    * *get_lame_version(), but this time they don't even leave us a    * compatibility version! aggh! */   typedef void lame_version_t(lame_global_flags *, char *);   typedef const char *get_lame_version_t();   typedef void lame_init_params_t(lame_global_flags*);   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 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 lame_encode_finish_t(         lame_global_flags *gf,         unsigned char*     mp3buf,         int                size );   /* --------------------------------------------------------------------------*/   class MacLAMEExporter : public MP3Exporter {      private:         lame_init_t* lame_init;         lame_version_t* lame_version;         get_lame_version_t* get_lame_version;         lame_init_params_t* lame_init_params;         lame_encode_buffer_t* lame_encode_buffer;         lame_encode_finish_t* lame_encode_finish;         lame_global_flags *mGF;                  bool mLibraryLoaded, mEncoding;         char mVersion[20];         static const int mSamplesPerChunk = 220500;         static const int mOutBufferSize = int(1.25 * mSamplesPerChunk + 7200);         short int *mLeftBuffer;         short int *mRightBuffer;               public:                  MacLAMEExporter() {            mLibraryLoaded = false;            mEncoding = false;            mGF = NULL;         }         wxString GetLibraryPath()         {            return wxT("");         }         wxString GetLibraryName()         {            return wxT("LAMELib");         }                  wxString GetLibraryTypeString()         {            return _("Only LAMELib|LAMELib|Shared Libraries (*)|*");         }                  wxString GetLibraryMessage()         {            // Must be <= 255 characters on Mac            /* i18n-hint: This message is used on Mac OS 9.  This particular             message must be <= 255 characters.  Be brief. */            return _("Audacity does not export MP3 files directly, but instead uses LAME, "                   "an MP3 exporting library available separately.  See the documentation "                   "for more information.\n\n"                   "Would you like to locate LameLib now?");         }         bool  LoadLibrary() {            wxLogNull logNo;            //BG: I was unable to test the wxDynamicLibrary code on this platform            if (wxFileExists(FILENAME(mLibPath)))            {               if(lame_enc_lib.IsLoaded())               {                  lame_enc_lib.Unload();               }               if(!lame_enc_lib.Load(FILENAME(mLibPath)))               {                  return false;               }            }            else               return false;            lame_init = (lame_init_t *) lame_enc_lib.GetSymbol("lame_init");            lame_version = (lame_version_t *) lame_enc_lib.GetSymbol("lame_version");                        get_lame_version =               (get_lame_version_t *) lame_enc_lib.GetSymbol("get_lame_version");            lame_init_params =                (lame_init_params_t *) lame_enc_lib.GetSymbol("lame_init_params");            lame_encode_buffer =                (lame_encode_buffer_t *) lame_enc_lib.GetSymbol("lame_encode_buffer");            lame_encode_finish =                (lame_encode_finish_t *) lame_enc_lib.GetSymbol("lame_encode_finish");            if (!lame_init ||                !lame_init_params ||                !lame_encode_buffer ||                !(lame_version || get_lame_version) ||                !lame_encode_finish) {               return false;            }            mGF = new lame_global_flags;            lame_init(mGF);            mLibraryLoaded = true;            return true;         }      bool ValidLibraryLoaded() { return mLibraryLoaded; }      wxString GetLibraryVersion() {         if(!mLibraryLoaded) return wxT("");         if(get_lame_version)            return get_lame_version();         else {            lame_version(mGF, mVersion);            return mVersion;         }      }      int InitializeStream(int channels, int sampleRate) {         if(!mLibraryLoaded) return -1;         mGF->num_channels = channels;         mGF->in_samplerate = sampleRate;         mGF->out_samplerate = sampleRate;         mGF->num_samples = 0;                  if (channels == 1)            mGF->mode = 3;  // mono         else            mGF->mode = 1;  // joint stereo         lame_init_params(mGF);                  mLeftBuffer = new short[mSamplesPerChunk];         mRightBuffer = new short[mSamplesPerChunk];         mEncoding = true;         return mSamplesPerChunk;      }      int GetOutBufferSize() {         return mOutBufferSize;      }            int GetConfigurationCaps() {         return MP3CONFIG_BITRATE;      }      int EncodeBuffer(short int inbuffer[], unsigned char outbuffer[]) {         if(!mEncoding) return -1;                  if (mGF->num_channels == 2) {            for(int i=0; i<mSamplesPerChunk; i++) {               mLeftBuffer[i] = inbuffer[2*i];               mRightBuffer[i] = inbuffer[2*i+1];            }            return lame_encode_buffer(mGF, mLeftBuffer, mRightBuffer, mSamplesPerChunk,                                      outbuffer, mOutBufferSize);         }         else {            return lame_encode_buffer(mGF, inbuffer, inbuffer, mSamplesPerChunk,                       outbuffer, mOutBufferSize);         }      }      int EncodeRemainder(short int inbuffer[], int nSamples,                        unsigned char outbuffer[]) {         if (mGF->num_channels == 2) {            for(int i=0; i<nSamples; i++) {               mLeftBuffer[i] = inbuffer[2*i];               mRightBuffer[i] = inbuffer[2*i+1];            }            return lame_encode_buffer(mGF, mLeftBuffer, mRightBuffer, nSamples, outbuffer,               mOutBufferSize);         }         else {            return lame_encode_buffer(mGF, inbuffer, inbuffer, nSamples,                       outbuffer, mOutBufferSize);         }      }      int FinishStream(unsigned char outbuffer[]) {         mEncoding = false;         int result = lame_encode_finish(mGF, outbuffer, mOutBufferSize);                  delete[] mLeftBuffer;         delete[] mRightBuffer;                  return result;      }      void CancelEncoding() { mEncoding = false; }      int GetQualityVariance() { return -1; }      void SetBitrate(int rate) { }      int GetBitrate() { return -1; }      void SetQuality(int quality) { }      int GetQuality() { return -1; }   };MP3Exporter *gMP3Exporter = NULL;MP3Exporter *GetMP3Exporter(){   if (!gMP3Exporter)      gMP3Exporter = new MacLAMEExporter();      return gMP3Exporter;}void ReleaseMP3Exporter(){   if( gMP3Exporter )      delete gMP3Exporter;   gMP3Exporter = NULL;}#elif defined(__WXMSW__)#include "BladeMP3EncDLL.h"class BladeEncExporter : public MP3Exporter {private:   BE_CONFIG mConf;   BE_VERSION mVersion;   HBE_STREAM mStreamHandle;   bool mLibraryLoaded, mEncoding,mStereo;   unsigned long mOutBufferSize, mInSampleNum;   int mDefaultRate;   BEINITSTREAM beInitStream;   BEENCODECHUNK beEncodeChunk;   BEDEINITSTREAM beDeinitStream;   BECLOSESTREAM beCloseStream;   BEVERSION beVersion;public:   BladeEncExporter() {      mLibraryLoaded = false;      mEncoding = false;      /* Set all the config defaults to sane values */      memset(&mConf, 0, sizeof(BE_CONFIG));//      mConf.dwConfig = BE_CONFIG_LAME;//      mConf.format.LHV1.dwStructVersion = 1;//      mConf.format.LHV1.dwStructSize = sizeof(BE_CONFIG);//      mConf.format.LHV1.dwReSampleRate = 0;//      mConf.format.LHV1.dwBitrate = 128;      //mConf.format.LHV1.dwMaxBitrate = 128;//      mConf.format.LHV1.nPreset = LQP_HIGH_QUALITY;//	  mConf.format.LHV1.dwMpegVersion = MPEG1;//      mConf.format.LHV1.bCopyright = false;//      mConf.format.LHV1.bCRC = true;//      mConf.format.LHV1.bOriginal = false;//      mConf.format.LHV1.bPrivate = false;//      mConf.format.LHV1.bWriteVBRHeader = false;//      mConf.format.LHV1.bEnableVBR = true;//      mConf.format.LHV1.nVBRQuality = 2;//      mConf.format.LHV1.dwVbrAbr_bps = -1;//      mConf.format.LHV1.bNoRes = true;      mConf.dwConfig = BE_CONFIG_MP3;      mConf.format.mp3.wBitrate = 128;      mConf.format.mp3.bCopyright = false;      mConf.format.mp3.bCRC = true;      mConf.format.mp3.bOriginal = false;      mConf.format.mp3.bPrivate = false;            mDefaultRate = 128;   }   wxString GetLibraryPath()   {      return wxT("");   }   wxString GetLibraryName()   {      return wxT("lame_enc.dll");   }      wxString GetLibraryTypeString()   {      return _("Only lame_enc.dll|lame_enc.dll|Dynamically Linked Libraries (*.dll)|*.dll|All Files (*.*)|*");   }      wxString GetLibraryMessage()   {      /* i18n-hint: This message is used on Windows. */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -