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

📄 ladspaeffect.cpp

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      if (right && outputs > 1) {         for (i = 0; i < block; i++)            buffer[i] = fOutBuffer[1][i];         right->Set((samplePtr)buffer, floatSample, rs, block);      }            len -= block;      ls += block;      rs += block;            if (inputs > 1) {         if (TrackGroupProgress(count, (ls-lstart)/(double)originalLen))            return false;      }      else {         if (TrackProgress(count, (ls-lstart)/(double)originalLen))            return false;      }   }   if (mData->deactivate)      mData->deactivate(handle);   if (mData->cleanup)      mData->cleanup(handle);   return true;}void LadspaEffect::End(){   if (buffer) {      unsigned long i;      delete[]buffer;      for (i = 0; i < inputs; i++) {         delete fInBuffer[i];      }      for (i = 0; i < outputs; i++) {         delete fOutBuffer[i];      }      delete[] fInBuffer;      delete[] fOutBuffer;   }   buffer = NULL;   fInBuffer = NULL;   fOutBuffer = NULL;}const int LADSPA_SLIDER_ID = 13100;const int LADSPA_TEXTCTRL_ID = 13101;const int LADSPA_PREVIEW_ID = 13102;BEGIN_EVENT_TABLE(LadspaEffectDialog, wxDialog)    EVT_BUTTON(wxID_OK, LadspaEffectDialog::OnOK)    EVT_BUTTON(wxID_CANCEL, LadspaEffectDialog::OnCancel)    EVT_BUTTON(LADSPA_PREVIEW_ID, LadspaEffectDialog::OnPreview)    EVT_SLIDER(LADSPA_SLIDER_ID, LadspaEffectDialog::OnSlider)    EVT_TEXT(LADSPA_TEXTCTRL_ID, LadspaEffectDialog::OnTextCtrl)END_EVENT_TABLE()IMPLEMENT_CLASS(LadspaEffectDialog, wxDialog)LadspaEffectDialog::LadspaEffectDialog(LadspaEffect *eff,                                       wxWindow * parent,                                       const LADSPA_Descriptor *data,                                       float *inputControls,                                       int sampleRate)   :wxDialog(parent, -1, LAT1CTOWX(data->Name),             wxDefaultPosition, wxDefaultSize,             wxDEFAULT_DIALOG_STYLE),    effect(eff){   numParams = 0;   this->mData = data;   this->inputControls = inputControls;   this->sampleRate = sampleRate;	#ifdef __WXMSW__		// On Windows, for some reason, wxWindows calls OnTextCtrl during creation		// of the text control, and LadspaEffectDialog::OnTextCtrl calls HandleText, 		// which assumes all the fields have been initialized. 		// This can give us a bad pointer crash, so manipulate inSlider to 		// no-op HandleText during creation.		inSlider = true;	#else		inSlider = false;	#endif   inText = false;   targetSlider = NULL;   sliders = new wxSlider*[mData->PortCount];   fields = new wxTextCtrl*[mData->PortCount];	labels = new wxStaticText*[mData->PortCount];   ports = new unsigned long [mData->PortCount];   unsigned long p;   for(p=0; p<mData->PortCount; p++) {      LADSPA_PortDescriptor d = mData->PortDescriptors[p];      if (LADSPA_IS_PORT_CONTROL(d) &&          LADSPA_IS_PORT_INPUT(d)) {         ports[numParams] = p;         numParams++;      }   }   wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);   wxControl *item;   if (mData->Maker &&       mData->Maker[0] &&        LAT1CTOWX(mData->Maker) != wxString(_("None"))) {             item = new wxStaticText(this, 0,                              wxString(_("Author: "))+LAT1CTOWX(mData->Maker));      mainSizer->Add(item, 0, wxALL, 5);   }      if (mData->Copyright &&       mData->Copyright[0] &&        LAT1CTOWX(mData->Copyright) != wxString(_("None"))) {            item = new wxStaticText(this, 0,                              LAT1CTOWX(mData->Copyright));      mainSizer->Add(item, 0, wxALL, 5);   }   wxSizer *paramSizer =      new wxStaticBoxSizer(new wxStaticBox(this, -1,                                           _("Effect Settings")),                           wxVERTICAL );   wxFlexGridSizer *gridSizer =      new wxFlexGridSizer(3, 0, 0);   for (p = 0; p < numParams; p++) {      item = new wxStaticText(this, 0, wxString(mData->PortNames[ports[p]], wxConvISO8859_1));      gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);      wxString fieldText;      LADSPA_PortRangeHint hint = mData->PortRangeHints[ports[p]];      if (LADSPA_IS_HINT_INTEGER(hint.HintDescriptor))         fieldText.Printf(wxT("%d"), (int)(inputControls[ports[p]] + 0.5));      else         fieldText.Printf(wxT("%f"), inputControls[ports[p]]);      fields[p] = new wxTextCtrl(this, LADSPA_TEXTCTRL_ID, fieldText);      gridSizer->Add(fields[p], 0, wxALL, 5);      sliders[p] =          new wxSlider(this, LADSPA_SLIDER_ID,                       0, 0, 1000,                       wxDefaultPosition,                       wxSize(200, -1));      gridSizer->Add(sliders[p], 0, wxALL, 5);   }   // Set all of the sliders based on the value in the   // text fields	inSlider = false; // Now we're ready for HandleText to actually do something.   HandleText();      paramSizer->Add(gridSizer, 1, wxALL, 5);   mainSizer->Add(paramSizer, 1, wxALL, 5);   wxBoxSizer *okSizer = new wxBoxSizer(wxHORIZONTAL);   wxButton *button;   button = new wxButton(this, LADSPA_PREVIEW_ID, effect->GetPreviewName());   okSizer->Add(button, 0, wxALIGN_CENTRE | wxALL, 5);   button = new wxButton(this, wxID_CANCEL, _("Cancel"));   okSizer->Add(button, 0, wxALIGN_CENTRE | wxALL, 5);   button = new wxButton(this, wxID_OK, _("OK"));   button->SetDefault();   button->SetFocus();   okSizer->Add(button, 0, wxALIGN_CENTRE | wxALL, 5);   mainSizer->Add(okSizer, 0, wxALIGN_CENTRE | wxALL, 5);   SetAutoLayout(TRUE);   SetSizer(mainSizer);   mainSizer->Fit(this);   mainSizer->SetSizeHints(this);}LadspaEffectDialog::~LadspaEffectDialog(){   delete[]sliders;   delete[]fields;   delete[]labels;}void LadspaEffectDialog::OnSlider(wxCommandEvent &event){   targetSlider = (wxSlider *)event.GetEventObject();   HandleSlider();   targetSlider = NULL;}void LadspaEffectDialog::OnTextCtrl(wxCommandEvent & WXUNUSED(event)){	HandleText();}void LadspaEffectDialog::HandleSlider(){   // if we don't add the following three lines, changing   // the value of the slider will change the text, which   // will change the slider, and so on.  This gets rid of   // the implicit loop.   if (inText)      return;   inSlider = true;   for (unsigned long p = 0; p < numParams; p++) {      if (targetSlider && targetSlider!=sliders[p])         continue;      float val;      float lower = float(0.0);      float upper = float(10.0);      float range;      LADSPA_PortRangeHint hint = mData->PortRangeHints[ports[p]];      if (LADSPA_IS_HINT_BOUNDED_BELOW(hint.HintDescriptor))         lower = hint.LowerBound;      if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint.HintDescriptor))         upper = hint.UpperBound;      if (LADSPA_IS_HINT_SAMPLE_RATE(hint.HintDescriptor)) {         lower *= sampleRate;         upper *= sampleRate;      }      range = upper - lower;      val = (sliders[p]->GetValue() / 1000.0) * range + lower;      wxString str;      if (LADSPA_IS_HINT_INTEGER(hint.HintDescriptor))         str.Printf(wxT("%d"), (int)(val + 0.5));      else         str.Printf(wxT("%f"), val);      fields[p]->SetValue(str);      inputControls[ports[p]] = val;   }   inSlider = false;}void LadspaEffectDialog::HandleText(){   // if we don't add the following three lines, changing   // the value of the slider will change the text, which   // will change the slider, and so on.  This gets rid of   // the implicit loop.   if (inSlider)      return;   inText = true;   for (unsigned long p = 0; p < numParams; p++) {      double dval;      float val;      float lower = float(0.0);      float upper = float(10.0);      float range;      fields[p]->GetValue().ToDouble(&dval);      val = dval;      LADSPA_PortRangeHint hint = mData->PortRangeHints[ports[p]];      if (LADSPA_IS_HINT_BOUNDED_BELOW(hint.HintDescriptor))         lower = hint.LowerBound;      if (LADSPA_IS_HINT_BOUNDED_ABOVE(hint.HintDescriptor))         upper = hint.UpperBound;            if (LADSPA_IS_HINT_SAMPLE_RATE(hint.HintDescriptor)) {         lower *= sampleRate;         upper *= sampleRate;      }               range = upper - lower;      if (val < lower)         val = lower;      if (val > upper)         val = upper;      inputControls[ports[p]] = val;      sliders[p]->SetValue((int)(((val-lower)/range) * 1000.0 + 0.5));         }   inText = false;}void LadspaEffectDialog::OnOK(wxCommandEvent & WXUNUSED(event)){   EndModal(TRUE);}void LadspaEffectDialog::OnCancel(wxCommandEvent & WXUNUSED(event)){   EndModal(FALSE);}void LadspaEffectDialog::OnPreview(wxCommandEvent & WXUNUSED(event)){   effect->Preview();}// Indentation settings for Vim and Emacs and unique identifier for Arch, a// version control system. Please do not modify past this point.//// Local Variables:// c-basic-offset: 3// indent-tabs-mode: nil// End://// vim: et sts=3 sw=3// arch-tag: 7e4a0346-c3ec-45de-9f71-818c6e34a094

⌨️ 快捷键说明

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