コード例 #1
0
void BaseAudioEvent::positionEvent( int startMeasure, int subdivisions, int offset )
{
    int samplesPerBar = AudioEngine::samples_per_bar; // will always match current tempo, time sig at right sample rate

    int startOffset = samplesPerBar * startMeasure;
    startOffset    += offset * samplesPerBar / subdivisions;

    setSampleStart( startOffset );
    setSampleEnd  (( startOffset + _sampleLength ) - 1 );
}
コード例 #2
0
void ChannelRenderArea::wheelEvent(QWheelEvent *event)
{
	uint64_t sampleStartNew, sampleEndNew;
	float zoomFactorNew;

	/* FIXME: Make this constant user-configurable. */
	zoomFactorNew = getZoomFactor()
			+ 0.01 * (event->delta() / WHEEL_DELTA);
	if (zoomFactorNew < 0)
		zoomFactorNew = 0;
	if (zoomFactorNew > 2)
		zoomFactorNew = 2; /* FIXME: Don't hardcode. */
	setZoomFactor(zoomFactorNew);

	sampleStartNew = 0; /* FIXME */
	sampleEndNew = getNumSamples() * zoomFactorNew;
	if (sampleEndNew > getNumSamples())
		sampleEndNew = getNumSamples();

	setSampleStart(sampleStartNew);
	setSampleEnd(sampleEndNew);

#if 0
	uint64_t sampleStartNew, sampleEndNew;

	sampleStartNew = getSampleStart() + event->delta() / WHEEL_DELTA;
	sampleEndNew = getSampleEnd() + event->delta() / WHEEL_DELTA;

	/* TODO: More checks. */

#if 1
	if (sampleStartNew < 0 || sampleEndNew < 0)
		return;
	if (sampleStartNew > 512 * 1000 || sampleEndNew > 512 * 1000 /* FIXME */)
		return;
#endif

	setSampleStart(sampleStartNew);
	setSampleEnd(sampleEndNew); /* FIXME: Use len? */
#endif

	repaint();
}
コード例 #3
0
ファイル: ModulatorSamplerSound.cpp プロジェクト: azeteg/HISE
void ModulatorSamplerSound::setPropertyInternal(Property p, int newValue)
{
	switch (p)
	{
	case ID:			jassertfalse; break;
	case FileName:		jassertfalse; break;
	case RootNote:		rootNote = newValue; break;
	case VeloHigh: {	int low = jmin(velocityRange.findNextSetBit(0), newValue, 127);
		velocityRange.clear();
		velocityRange.setRange(low, newValue - low + 1, true); break; }
	case VeloLow: {	int high = jmax(velocityRange.getHighestBit(), newValue, 0);
		velocityRange.clear();
		velocityRange.setRange(newValue, high - newValue + 1, true); break; }
	case KeyHigh: {	int low = jmin(midiNotes.findNextSetBit(0), newValue, 127);
		midiNotes.clear();
		midiNotes.setRange(low, newValue - low + 1, true); break; }
	case KeyLow: {	int high = jmax(midiNotes.getHighestBit(), newValue, 0);
		midiNotes.clear();
		midiNotes.setRange(newValue, high - newValue + 1, true); break; }
	case RRGroup:		rrGroup = newValue; break;
	case Normalized:	isNormalized = newValue == 1;
		if (isNormalized && normalizedPeak < 0.0f) calculateNormalizedPeak();
		break;
	case Volume: {	gain.set(Decibels::decibelsToGain((float)newValue));
		break;
	}
	case Pan: {
		pan = (int)newValue;
		leftBalanceGain = BalanceCalculator::getGainFactorForBalance((float)newValue, true);
		rightBalanceGain = BalanceCalculator::getGainFactorForBalance((float)newValue, false);
		break;
	}
	case Pitch: {	centPitch = newValue;
		pitchFactor.store(powf(2.0f, (float)centPitch / 1200.f));
		break;
	};
	case SampleStart:	FOR_EVERY_SOUND(setSampleStart(newValue)); break;
	case SampleEnd:		FOR_EVERY_SOUND(setSampleEnd(newValue)); break;
	case SampleStartMod: FOR_EVERY_SOUND(setSampleStartModulation(newValue)); break;

	case LoopEnabled:	FOR_EVERY_SOUND(setLoopEnabled(newValue == 1.0f)); break;
	case LoopStart:		FOR_EVERY_SOUND(setLoopStart(newValue)); break;
	case LoopEnd:		FOR_EVERY_SOUND(setLoopEnd(newValue)); break;
	case LoopXFade:		FOR_EVERY_SOUND(setLoopCrossfade(newValue)); break;
	case LowerVelocityXFade: lowerVeloXFadeValue = newValue; break;
	case UpperVelocityXFade: upperVeloXFadeValue = newValue; break;
	case SampleState:	setPurged(newValue == 1.0f); break;
	default:			jassertfalse; break;
	}

}