Esempio n. 1
0
skidder::skidder(int argc, t_atom *argv) {

	post("_ ____  ---- :: _______  ___ _____ _ skidder~ ");

	tempoRateTable = new TempoRateTable;
//	m_setup();				// initialize a fresh skid cycle
	
	AddInSignal(2);
	AddInFloat(6);
	AddOutSignal(2);
	SetupInOut();  

	fTempo = tempoUnscaled(120.0f);
	currentTempoBPS = oldTempoBPS = tempoScaled(fTempo) / 60.0f;

	FLEXT_ADDMETHOD( 1, setRate);
	FLEXT_ADDMETHOD_F(0,"temposync",setTempoSync);
	FLEXT_ADDMETHOD( 2, setTempoRate);
	FLEXT_ADDMETHOD_F(0,"rrf",setRateRandFactor);
	FLEXT_ADDMETHOD( 3, setTempo);
	FLEXT_ADDMETHOD( 4, setPulsewidth);
	FLEXT_ADDMETHOD_F(0,"pwrm",setPulsewidthRandMin);
	FLEXT_ADDMETHOD( 5, setSlope);
	FLEXT_ADDMETHOD( 6, setFloor);
	FLEXT_ADDMETHOD_F(0,"frm",setFloorRandMin);
	FLEXT_ADDMETHOD( 7, setPan);
	FLEXT_ADDMETHOD_F(0,"noise",setNoise);

	post("_ ____ ____ _");

	srand((unsigned int)time(NULL));	// sets a seed value for rand() from the system clock
}
Esempio n. 2
0
//-----------------------------------------------------------------------------
void SkidderEditor::valueChanged(CDrawContext* context, CControl* control)
{
  long tag = control->getTag();
  float tempTempo;
  long sscanfReturn;


	switch (tag)
	{
		// process the tempo text input
		case kTempoTextEdit:
			if (tempoTextEdit)
			{
				tempoTextEdit->getText(tempoString);
				sscanfReturn = sscanf(tempoString, "%f", &tempTempo);
				if (strcmp(tempoString, "auto") == 0)
					effect->setParameterAutomated(kTempo, 0.0f);
				else if ( (sscanfReturn != EOF) && (sscanfReturn > 0) )
				{
					// check if the user typed in something that's not a number
					if (tempTempo == 0.0f)
						tempoTextEdit->setText("very bad");
					// the user typed in a number
					else
					{
						// no negative tempos
						if (tempTempo < 0.0f)
							tempTempo = -tempTempo;
						// if the tempo entered is 0, then leave it at 0.0 as the parameter value
						if (tempTempo > 0.0f)
							// scale the value to a 0.0 to 1.0 parameter value
							tempTempo = tempoUnscaled(tempTempo);
						// this updates the display with "bpm" appended & the fader position
						effect->setParameterAutomated(kTempo, tempTempo);
					}
				}
				// there was a sscanf() error
				else
					tempoTextEdit->setText("bad");
			}
			break;

		// clicking on these parts of the GUI takes you to Destroy FX or SE web pages
		case kGoButtonID:
			if (goButton)
			{
				if (goButton->mouseIsDown())
					goError = goButton->getError();
				else
					goError = kNoGoDisplay;
				if (goDisplay)
					goDisplay->setDirty();
			}
		case kDestroyFXlinkID:
		case kSmartElectronixLinkID:
			break;

		case kMidiLearnButtonID:
			chunk->setParameterMidiLearn(control->getValue());
			break;
		case kMidiResetButtonID:
			chunk->setParameterMidiReset(control->getValue());
			break;


		case kPulsewidth:
		case kPulsewidthRandMin:
			if (pulsewidthFader)
			{
				effect->setParameterAutomated(kPulsewidth, pulsewidthFader->getValueTagged(kPulsewidth));
				effect->setParameterAutomated(kPulsewidthRandMin, pulsewidthFader->getValueTagged(kPulsewidthRandMin));
				chunk->setLearner(pulsewidthFader->getTag());
				// set the automation link mode for the pulsewidth range slider
				if (pulsewidthFader->getClickBetween())
					chunk->pulsewidthDoubleAutomate = 1;
				else
					chunk->pulsewidthDoubleAutomate = 0;
				if (chunk->isLearning())
				{
					if ( ((pulsewidthFader->getTag() == kPulsewidthRandMin) || 
								(chunk->pulsewidthDoubleAutomate != 0)) && 
							(pulsewidthFader->getHandle() == gFaderHandleLeft) )
					{
						pulsewidthFader->setHandle(gGlowingFaderHandleLeft);
						pulsewidthFader->setDirty();
					}
					if ( ((pulsewidthFader->getTag() == kPulsewidth) || 
								(chunk->pulsewidthDoubleAutomate != 0)) && 
							(pulsewidthFader->getHandle2() == gFaderHandleRight) )
					{
						pulsewidthFader->setHandle2(gGlowingFaderHandleRight);
						pulsewidthFader->setDirty();
					}
				}
			}
			break;

		case kFloor:
		case kFloorRandMin:
			if (floorFader)
			{
				effect->setParameterAutomated(kFloor, floorFader->getValueTagged(kFloor));
				effect->setParameterAutomated(kFloorRandMin, floorFader->getValueTagged(kFloorRandMin));
				chunk->setLearner(floorFader->getTag());
				// set the automation link mode for the floor range slider
				if (floorFader->getClickBetween())
					chunk->floorDoubleAutomate = 1;
				else
					chunk->floorDoubleAutomate = 0;
				if (chunk->isLearning())
				{
					if ( ((floorFader->getTag() == kFloorRandMin) || 
								(chunk->floorDoubleAutomate != 0)) && 
							(floorFader->getHandle() == gFaderHandleLeft) )
					{
						floorFader->setHandle(gGlowingFaderHandleLeft);
						floorFader->setDirty();
					}
					if ( ((floorFader->getTag() == kFloor) || 
								(chunk->floorDoubleAutomate != 0)) && 
							(floorFader->getHandle2() == gFaderHandleRight) )
					{
						floorFader->setHandle2(gGlowingFaderHandleRight);
						floorFader->setDirty();
					}
				}
			}
			break;

		case kRate:
		case kTempoRate:
			effect->setParameterAutomated(tag, control->getValue());
			chunk->setLearner(tag);
			if (chunk->isLearning())
			{
				if (rateFader != NULL)
				{
					if ( (rateFader->getTag() == tag) && 
							(rateFader->getHandle() == gFaderHandle) )
					{
						rateFader->setHandle(gGlowingFaderHandle);
						rateFader->setDirty();
					}
				}
			}
			break;

		case kTempoSync:
	#ifdef MSKIDDER
		case kVelocity:
	#ifdef HUNGRY
		case kConnect:
	#endif
	#endif
			effect->setParameterAutomated(tag, control->getValue());
			// these are on/off buttons, so use toggle MIDI control
			chunk->setLearner(tag, kEventBehaviourToggle);
			break;

	#ifdef MSKIDDER
		case kMidiMode:
			effect->setParameterAutomated(tag, control->getValue());
			// this is a multi-state switch, so use multi-state toggle MIDI control
			chunk->setLearner(tag, kEventBehaviourToggle, NUM_MIDI_MODES);
			break;
	#endif

		case kRateRandFactor:
		case kTempo:
		case kSlope:
		case kPan:
		case kNoise:
			effect->setParameterAutomated(tag, control->getValue());

			chunk->setLearner(tag);
			if (chunk->isLearning())
			{
				if (faders[tag] != NULL)
				{
					if (faders[tag]->getHandle() == gFaderHandle)
					{
						faders[tag]->setHandle(gGlowingFaderHandle);
						faders[tag]->setDirty();
					}
				}
			}

			break;

		default:
			break;
	}

	control->update(context);
}