| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | /* * Flanger.cpp * ----------- * Purpose: Implementation of the DMO Flanger DSP (for non-Windows platforms) * Notes  : (currently none) * Authors: OpenMPT Devs * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. */#include "stdafx.h"#ifndef NO_PLUGINS#include "../../Sndfile.h"#include "Flanger.h"#endif // !NO_PLUGINSOPENMPT_NAMESPACE_BEGIN#ifndef NO_PLUGINSnamespace DMO{IMixPlugin* Flanger::Create(VSTPluginLib &factory, CSoundFile &sndFile, SNDMIXPLUGIN *mixStruct){	return new (std::nothrow) Flanger(factory, sndFile, mixStruct, false);}IMixPlugin* Flanger::CreateLegacy(VSTPluginLib &factory, CSoundFile &sndFile, SNDMIXPLUGIN *mixStruct){	return new(std::nothrow) Flanger(factory, sndFile, mixStruct, true);}Flanger::Flanger(VSTPluginLib &factory, CSoundFile &sndFile, SNDMIXPLUGIN *mixStruct, const bool legacy)	: Chorus(factory, sndFile, mixStruct, !legacy){	m_param[kFlangerWetDryMix] = 0.5f;	m_param[kFlangerWaveShape] = 1.0f;	m_param[kFlangerFrequency] = 0.025f;	m_param[kFlangerDepth] = 1.0f;	m_param[kFlangerPhase] = 0.5f;	m_param[kFlangerFeedback] = (-50.0f + 99.0f) / 198.0f;	m_param[kFlangerDelay] = 0.5f;	// Already done in Chorus constructor	//m_mixBuffer.Initialize(2, 2);	//InsertIntoFactoryList();}void Flanger::SetParameter(PlugParamIndex index, PlugParamValue value){	if(index < kFlangerNumParameters)	{		value = mpt::safe_clamp(value, 0.0f, 1.0f);		if(index == kFlangerWaveShape)		{			value = mpt::round(value);			if(m_param[index] != value)			{				m_waveShapeMin = 0.0f;				m_waveShapeMax = 0.5f + value * 0.5f;			}		} else if(index == kFlangerPhase)		{			value = mpt::round(value * 4.0f) / 4.0f;		}		m_param[index] = value;		RecalculateChorusParams();	}}#ifdef MODPLUG_TRACKERCString Flanger::GetParamName(PlugParamIndex param){	switch(param)	{	case kFlangerWetDryMix: return _T("WetDryMix");	case kFlangerWaveShape: return _T("WaveShape");	case kFlangerFrequency: return _T("Frequency");	case kFlangerDepth: return _T("Depth");	case kFlangerPhase: return _T("Phase");	case kFlangerFeedback: return _T("Feedback");	case kFlangerDelay: return _T("Delay");	}	return CString();}CString Flanger::GetParamLabel(PlugParamIndex param){	switch(param)	{	case kFlangerWetDryMix:	case kFlangerDepth:	case kFlangerFeedback:		return _T("%");	case kFlangerFrequency:		return _T("Hz");	case kFlangerPhase:		return mpt::ToCString(MPT_UTF8("\xC2\xB0"));  // U+00B0 DEGREE SIGN	case kFlangerDelay:		return _T("ms");	}	return CString();}CString Flanger::GetParamDisplay(PlugParamIndex param){	CString s;	float value = m_param[param];	switch(param)	{	case kFlangerWetDryMix:	case kFlangerDepth:		value *= 100.0f;		break;	case kFlangerFrequency:		value = FrequencyInHertz();		break;	case kFlangerWaveShape:		return (value < 1) ? _T("Triangle") : _T("Sine");		break;	case kFlangerPhase:		switch(Phase())		{		case 0: return _T("-180");		case 1: return _T("-90");		case 2: return _T("0");		case 3: return _T("90");		case 4: return _T("180");		}		break;	case kFlangerFeedback:		value = Feedback();		break;	case kFlangerDelay:		value = Delay();	}	s.Format(_T("%.2f"), value);	return s;}#endif // MODPLUG_TRACKER} // namespace DMO#elseMPT_MSVC_WORKAROUND_LNK4221(Flanger)#endif // !NO_PLUGINSOPENMPT_NAMESPACE_END
 |