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

📄 changetempo.cpp

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   this->SetAutoLayout(true);   this->SetSizer(pBoxSizer_Dialog);   pBoxSizer_Dialog->Fit(this);   pBoxSizer_Dialog->SetSizeHints(this);}bool ChangeTempoDialog::Validate(){   return true; }bool ChangeTempoDialog::TransferDataToWindow(){   m_bLoopDetect = true;	// percent change controls	this->Update_Text_PercentChange();	this->Update_Slider_PercentChange();	// from/to BPM controls	wxString str;	if (m_pTextCtrl_FromBPM) {		if (m_FromBPM != 0)			str.Printf(wxT("%d"), m_FromBPM);		else			str = wxT("");		m_pTextCtrl_FromBPM->SetValue(str);	}	if (m_pTextCtrl_ToBPM) {		if (m_ToBPM != 0)			str.Printf(wxT("%d"), m_ToBPM);		else			str = wxT("");		m_pTextCtrl_ToBPM->SetValue(str);	}	// from/to Length controls	if (m_pTextCtrl_FromLength) {		str.Printf(wxT("%.2f"), m_FromLength);		m_pTextCtrl_FromLength->SetValue(str);		m_pTextCtrl_FromLength->Enable(false); // Disable because the value comes from the user selection.	}	if (m_pTextCtrl_ToLength) {		str.Printf(wxT("%.2f"), m_ToLength);		m_pTextCtrl_ToLength->SetValue(str);	}   m_bLoopDetect = false;	return true;}bool ChangeTempoDialog::TransferDataFromWindow(){	wxString str;	// percent change controls   if (m_pTextCtrl_PercentChange) {      str = m_pTextCtrl_PercentChange->GetValue();      double newValue = 0;      str.ToDouble(&newValue);		m_PercentChange = newValue;	}	// Ignore Slider_PercentChange because TextCtrl_PercentChange 	// always tracks it & is more precise (decimal points).	// from/to BPM controls   long newLong;   if (m_pTextCtrl_FromBPM) {      str = m_pTextCtrl_FromBPM->GetValue();      str.ToLong(&newLong);		m_FromBPM = (unsigned int)(newLong);	}   if (m_pTextCtrl_ToBPM) {      str = m_pTextCtrl_ToBPM->GetValue();      str.ToLong(&newLong);		m_ToBPM = (unsigned int)(newLong);	}	// from/to Length controls   // Don't do m_pTextCtrl_ToLength. It's disabled.   if (m_pTextCtrl_ToLength) {      str = m_pTextCtrl_ToLength->GetValue();      str.ToLong(&newLong);		m_ToLength = (int)(newLong);	}   return true;}// handler implementations for ChangeTempoDialogvoid ChangeTempoDialog::OnText_PercentChange(wxCommandEvent & event){   if (m_bLoopDetect)      return;   if (m_pTextCtrl_PercentChange) {      wxString str = m_pTextCtrl_PercentChange->GetValue();      double newValue = 0;      str.ToDouble(&newValue);		m_PercentChange = newValue;      m_bLoopDetect = true;		this->Update_Slider_PercentChange();		this->Update_Text_ToBPM();		this->Update_Text_ToLength();      m_bLoopDetect = false;      FindWindow(wxID_OK)->Enable(m_PercentChange > -100.0);   }}void ChangeTempoDialog::OnSlider_PercentChange(wxCommandEvent & event){   if (m_bLoopDetect)      return;	if (m_pSlider_PercentChange) {		m_PercentChange = (double)(m_pSlider_PercentChange->GetValue()); 		// Warp positive values to actually go up faster & further than negatives.		if (m_PercentChange > 0.0)			m_PercentChange = pow(m_PercentChange, PERCENTCHANGE_SLIDER_WARP);	   m_bLoopDetect = true;		this->Update_Text_PercentChange();		this->Update_Text_ToBPM();		this->Update_Text_ToLength();	   m_bLoopDetect = false;	}}void ChangeTempoDialog::OnText_FromBPM(wxCommandEvent & event){   if (m_bLoopDetect)      return;   if (m_pTextCtrl_FromBPM) {      wxString str = m_pTextCtrl_FromBPM->GetValue();      long newValue;      str.ToLong(&newValue);		m_FromBPM = (unsigned int)(newValue);      m_bLoopDetect = true;		this->Update_Text_ToBPM();      m_bLoopDetect = false;   }}void ChangeTempoDialog::OnText_ToBPM(wxCommandEvent & event){   if (m_bLoopDetect)      return;   if (m_pTextCtrl_ToBPM) {      wxString str = m_pTextCtrl_ToBPM->GetValue();      long newValue;      str.ToLong(&newValue);		m_ToBPM = (unsigned int)(newValue);      m_bLoopDetect = true;		// If FromBPM has already been set, then there's a new percent change.		if (m_FromBPM != 0) {			m_PercentChange = (((double)(m_ToBPM) * 100.0) / (double)(m_FromBPM)) - 100.0;			this->Update_Text_PercentChange();			this->Update_Slider_PercentChange();			this->Update_Text_ToLength();		}            m_bLoopDetect = false;   }}void ChangeTempoDialog::OnText_ToLength(wxCommandEvent & event){   if (m_bLoopDetect)      return;   if (m_pTextCtrl_ToLength) {      wxString str = m_pTextCtrl_ToLength->GetValue();      double newValue = 0;      str.ToDouble(&newValue);		m_ToLength = newValue;		m_PercentChange = ((m_FromLength * 100.0) / m_ToLength) - 100.0;      m_bLoopDetect = true;		this->Update_Text_PercentChange();		this->Update_Slider_PercentChange();		this->Update_Text_ToBPM();            m_bLoopDetect = false;   }}void ChangeTempoDialog::OnPreview(wxCommandEvent &event){   TransferDataFromWindow();	// Save & restore parameters around Preview, because we didn't do OK.	double oldPercentChange = m_pEffect->m_PercentChange;	m_pEffect->m_PercentChange = m_PercentChange;	m_pEffect->Preview();	m_pEffect->m_PercentChange = oldPercentChange;}void ChangeTempoDialog::OnOk(wxCommandEvent & event){   TransferDataFromWindow();      if (Validate())       EndModal(true);   else       event.Skip();}void ChangeTempoDialog::OnCancel(wxCommandEvent & event){   EndModal(false);}// helper fnsvoid ChangeTempoDialog::Update_Text_PercentChange(){	if (m_pTextCtrl_PercentChange) {		wxString str;		str.Printf(wxT("%.3f"), m_PercentChange);		m_pTextCtrl_PercentChange->SetValue(str);	}}void ChangeTempoDialog::Update_Slider_PercentChange(){   if (m_pSlider_PercentChange) {		double unwarped = m_PercentChange;		if (unwarped > 0.0)			// Un-warp values above zero to actually go up to PERCENTCHANGE_MAX.			unwarped = pow(m_PercentChange, (1.0 / PERCENTCHANGE_SLIDER_WARP));		// Add 0.5 to unwarped so trunc -> round.		m_pSlider_PercentChange->SetValue((int)(unwarped + 0.5)); 	}}void ChangeTempoDialog::Update_Text_ToBPM() // Use m_FromBPM & m_PercentChange to set new m_ToBPM & control.{   // Update ToBPM iff FromBPM has been set.	if (m_FromBPM == 0) 		return;	m_ToBPM = (unsigned int)((((double)(m_FromBPM) * 											(100.0 + m_PercentChange)) / 100.0) + 										0.5); // Add 0.5 so trunc -> round.	if (m_pTextCtrl_ToBPM) {		wxString str;		str.Printf(wxT("%d"), m_ToBPM);		m_pTextCtrl_ToBPM->SetValue(str);	}}void ChangeTempoDialog::Update_Text_ToLength() // Use m_FromLength & m_PercentChange to set new m_ToLength & control.{	m_ToLength = (m_FromLength * 100.0) / (100.0 + m_PercentChange);	if (m_pTextCtrl_ToLength) {		wxString str;		str.Printf(wxT("%.2f"), m_ToLength);		m_pTextCtrl_ToLength->SetValue(str);	}}#endif // USE_SOUNDTOUCH// 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: 1a049a55-47b1-44d3-ba79-bb925f8e7b93

⌨️ 快捷键说明

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