/* create a new LFO specification record */ public static LFOSpecRec NewLFOSpecifier() { LFOSpecRec LFOSpec = new LFOSpecRec(); LFOSpec.FrequencyEnvelope = NewEnvelope(); LFOSpec.AmplitudeEnvelope = NewEnvelope(); LFOSpec.WaveTableIndexEnvelope = NewEnvelope(); LFOSpec.SampleSources = NewSampleSelectorList(0); LFOSpec.FrequencyLFOList = NewLFOListSpecifier(); LFOSpec.AmplitudeLFOList = NewLFOListSpecifier(); LFOSpec.WaveTableIndexLFOList = NewLFOListSpecifier(); LFOSpec.FilterCutoffEnvelope = NewEnvelope(); LFOSpec.FilterCutoffLFOList = NewLFOListSpecifier(); LFOSpec.SampleHoldFreqEnvelope = NewEnvelope(); LFOSpec.SampleHoldFreqLFOList = NewLFOListSpecifier(); LFOSpec.Oscillator = LFOOscTypes.eLFOSignedSine; LFOSpec.ModulationMode = LFOModulationTypes.eLFOAdditive; LFOSpec.AddingMode = LFOAdderMode.eLFOArithmetic; LFOSpec.ExtraValue = 1; LFOSpec.FilterSpecified = false; LFOSpec.SampleHoldSpecified = false; #if LFO_LOOPENV // TODO: experimental - looped-envelope lfo LFOSpec.LoopedEnvelope = NewEnvelope(); #endif LFOSpec.EnableCrossWaveTableInterpolation = true; return(LFOSpec); }
/* indicate that the sample/hold processor has been specified */ public static void LFOSpecSampleHoldHasBeenSpecified(LFOSpecRec LFOSpec) { LFOSpec.SampleHoldSpecified = true; }
public static EnvelopeRec GetLFOSpecLoopedEnvelope(LFOSpecRec LFOSpec) { return(LFOSpec.LoopedEnvelope); }
/* indicate that the filter has been specified */ public static void LFOSpecFilterHasBeenSpecified(LFOSpecRec LFOSpec) { LFOSpec.FilterSpecified = true; }
/* get the sample and hold update frequency */ public static EnvelopeRec GetLFOSpecSampleHoldFreqEnvelope(LFOSpecRec LFOSpec) { return(LFOSpec.SampleHoldFreqEnvelope); }
/* set the extra value */ public static void SetLFOSpecExtraValue(LFOSpecRec LFOSpec, double Value) { LFOSpec.ExtraValue = Value; }
/* get the cutoff envelope for the lowpass filter */ public static EnvelopeRec GetLFOSpecFilterCutoffEnvelope(LFOSpecRec LFOSpec) { return(LFOSpec.FilterCutoffEnvelope); }
/* change the oscillator type */ public static void SetLFOSpecOscillatorType(LFOSpecRec LFOSpec, LFOOscTypes NewType) { LFOSpec.Oscillator = NewType; }
/* get the oscillator modulation mode */ public static LFOModulationTypes LFOSpecGetModulationMode(LFOSpecRec LFOSpec) { return(LFOSpec.ModulationMode); }
/* get the amplitude lfo list */ public static LFOListSpecRec GetLFOSpecAmplitudeLFOList(LFOSpecRec LFOSpec) { return(LFOSpec.AmplitudeLFOList); }
/* get the oscillator type for this LFO specifier */ public static LFOOscTypes LFOSpecGetOscillatorType(LFOSpecRec LFOSpec) { return(LFOSpec.Oscillator); }
/* get the amplitude envelope record */ public static EnvelopeRec GetLFOSpecAmplitudeEnvelope(LFOSpecRec LFOSpec) { return(LFOSpec.AmplitudeEnvelope); }
/* get the frequency lfo list */ public static LFOListSpecRec GetLFOSpecFrequencyLFOList(LFOSpecRec LFOSpec) { return(LFOSpec.FrequencyLFOList); }
/* get the frequency envelope record */ public static EnvelopeRec GetLFOSpecFrequencyEnvelope(LFOSpecRec LFOSpec) { return(LFOSpec.FrequencyEnvelope); }
public static bool LFOSpecGetEnableCrossWaveTableInterpolationExplicitlySet(LFOSpecRec LFOSpec) { return(LFOSpec.EnableCrossWaveTableInterpolationExplicitlySet); }
/* change the oscillator modulation mode */ public static void SetLFOSpecModulationMode(LFOSpecRec LFOSpec, LFOModulationTypes NewType) { LFOSpec.ModulationMode = NewType; }
public static void LFOSpecSetEnableCrossWaveTableInterpolation(LFOSpecRec LFOSpec, bool enable) { LFOSpec.EnableCrossWaveTableInterpolation = enable; LFOSpec.EnableCrossWaveTableInterpolationExplicitlySet = true; }
/* find out what the adding mode of the LFO is */ public static LFOAdderMode LFOSpecGetAddingMode(LFOSpecRec LFOSpec) { return(LFOSpec.AddingMode); }
/* get the extra value */ public static double GetLFOSpecExtraValue(LFOSpecRec LFOSpec) { return(LFOSpec.ExtraValue); }
/* set a new adding mode for the LFO */ public static void SetLFOSpecAddingMode(LFOSpecRec LFOSpec, LFOAdderMode NewAddingMode) { LFOSpec.AddingMode = NewAddingMode; }
/* get the cutoff lfo generator for the lowpass filter */ public static LFOListSpecRec GetLFOSpecFilterCutoffLFOList(LFOSpecRec LFOSpec) { return(LFOSpec.FilterCutoffLFOList); }
/* for wave table lfo oscillators only */ public static EnvelopeRec GetLFOSpecWaveTableIndexEnvelope(LFOSpecRec LFOSpec) { return(LFOSpec.WaveTableIndexEnvelope); }
/* inquire as to whether the filter has been specified */ public static bool HasLFOSpecFilterBeenSpecified(LFOSpecRec LFOSpec) { return(LFOSpec.FilterSpecified); }
/* get wave table index lfo list, for wave table lfos only */ public static LFOListSpecRec GetLFOSpecWaveTableIndexLFOList(LFOSpecRec LFOSpec) { return(LFOSpec.WaveTableIndexLFOList); }
/* get the sample and hold frequency LFO modulation list */ public static LFOListSpecRec GetLFOSpecSampleHoldFreqLFOList(LFOSpecRec LFOSpec) { return(LFOSpec.SampleHoldFreqLFOList); }
/* get the sample selector list */ public static SampleSelectorRec GetLFOSpecSampleSelector(LFOSpecRec LFOSpec) { return(LFOSpec.SampleSources); }
/* inquire as to whether the sample/hold processor has been specified */ public static bool HasLFOSpecSampleHoldBeenSpecified(LFOSpecRec LFOSpec) { return(LFOSpec.SampleHoldSpecified); }
public static bool LFOSpecGetEnableCrossWaveTableInterpolation(LFOSpecRec LFOSpec) { return(LFOSpec.EnableCrossWaveTableInterpolation); }
/* create a new LFO spec entry in the list */ public static void LFOListSpecAppendNewEntry(LFOListSpecRec LFOListSpec, LFOSpecRec NewEntry) { LFOListSpec.NumLFOSpecs++; Array.Resize(ref LFOListSpec.Array, LFOListSpec.NumLFOSpecs); LFOListSpec.Array[LFOListSpec.NumLFOSpecs - 1] = NewEntry; }
/* check LFO */ public static SynthErrorCodes CheckLFOForUnreferencedSamples( LFOSpecRec LFO, CheckUnrefParamRec Param) { SynthErrorCodes Error; Error = CheckEnvelopeForUnreferencedSamples( GetLFOSpecFrequencyEnvelope(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckLFOListForUnreferencedSamples( GetLFOSpecFrequencyLFOList(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckEnvelopeForUnreferencedSamples( GetLFOSpecAmplitudeEnvelope(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckLFOListForUnreferencedSamples( GetLFOSpecAmplitudeLFOList(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckEnvelopeForUnreferencedSamples( GetLFOSpecWaveTableIndexEnvelope(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckLFOListForUnreferencedSamples( GetLFOSpecWaveTableIndexLFOList(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckWaveTableSelectorForUnreferencedSamples( GetLFOSpecSampleSelector(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckEnvelopeForUnreferencedSamples( GetLFOSpecFilterCutoffEnvelope(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckLFOListForUnreferencedSamples( GetLFOSpecFilterCutoffLFOList(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckEnvelopeForUnreferencedSamples( GetLFOSpecSampleHoldFreqEnvelope(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } Error = CheckLFOListForUnreferencedSamples( GetLFOSpecSampleHoldFreqLFOList(LFO), Param); if (Error != SynthErrorCodes.eSynthDone) { return(Error); } return(SynthErrorCodes.eSynthDone); }