コード例 #1
0
        /* 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);
        }
コード例 #2
0
 /* indicate that the sample/hold processor has been specified */
 public static void LFOSpecSampleHoldHasBeenSpecified(LFOSpecRec LFOSpec)
 {
     LFOSpec.SampleHoldSpecified = true;
 }
コード例 #3
0
 public static EnvelopeRec GetLFOSpecLoopedEnvelope(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.LoopedEnvelope);
 }
コード例 #4
0
 /* indicate that the filter has been specified */
 public static void LFOSpecFilterHasBeenSpecified(LFOSpecRec LFOSpec)
 {
     LFOSpec.FilterSpecified = true;
 }
コード例 #5
0
 /* get the sample and hold update frequency */
 public static EnvelopeRec GetLFOSpecSampleHoldFreqEnvelope(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.SampleHoldFreqEnvelope);
 }
コード例 #6
0
 /* set the extra value */
 public static void SetLFOSpecExtraValue(LFOSpecRec LFOSpec, double Value)
 {
     LFOSpec.ExtraValue = Value;
 }
コード例 #7
0
 /* get the cutoff envelope for the lowpass filter */
 public static EnvelopeRec GetLFOSpecFilterCutoffEnvelope(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.FilterCutoffEnvelope);
 }
コード例 #8
0
 /* change the oscillator type */
 public static void SetLFOSpecOscillatorType(LFOSpecRec LFOSpec, LFOOscTypes NewType)
 {
     LFOSpec.Oscillator = NewType;
 }
コード例 #9
0
 /* get the oscillator modulation mode */
 public static LFOModulationTypes LFOSpecGetModulationMode(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.ModulationMode);
 }
コード例 #10
0
 /* get the amplitude lfo list */
 public static LFOListSpecRec GetLFOSpecAmplitudeLFOList(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.AmplitudeLFOList);
 }
コード例 #11
0
 /* get the oscillator type for this LFO specifier */
 public static LFOOscTypes LFOSpecGetOscillatorType(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.Oscillator);
 }
コード例 #12
0
 /* get the amplitude envelope record */
 public static EnvelopeRec GetLFOSpecAmplitudeEnvelope(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.AmplitudeEnvelope);
 }
コード例 #13
0
 /* get the frequency lfo list */
 public static LFOListSpecRec GetLFOSpecFrequencyLFOList(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.FrequencyLFOList);
 }
コード例 #14
0
 /* get the frequency envelope record */
 public static EnvelopeRec GetLFOSpecFrequencyEnvelope(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.FrequencyEnvelope);
 }
コード例 #15
0
 public static bool LFOSpecGetEnableCrossWaveTableInterpolationExplicitlySet(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.EnableCrossWaveTableInterpolationExplicitlySet);
 }
コード例 #16
0
 /* change the oscillator modulation mode */
 public static void SetLFOSpecModulationMode(LFOSpecRec LFOSpec, LFOModulationTypes NewType)
 {
     LFOSpec.ModulationMode = NewType;
 }
コード例 #17
0
 public static void LFOSpecSetEnableCrossWaveTableInterpolation(LFOSpecRec LFOSpec, bool enable)
 {
     LFOSpec.EnableCrossWaveTableInterpolation = enable;
     LFOSpec.EnableCrossWaveTableInterpolationExplicitlySet = true;
 }
コード例 #18
0
 /* find out what the adding mode of the LFO is */
 public static LFOAdderMode LFOSpecGetAddingMode(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.AddingMode);
 }
コード例 #19
0
 /* get the extra value */
 public static double GetLFOSpecExtraValue(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.ExtraValue);
 }
コード例 #20
0
 /* set a new adding mode for the LFO */
 public static void SetLFOSpecAddingMode(LFOSpecRec LFOSpec, LFOAdderMode NewAddingMode)
 {
     LFOSpec.AddingMode = NewAddingMode;
 }
コード例 #21
0
 /* get the cutoff lfo generator for the lowpass filter */
 public static LFOListSpecRec GetLFOSpecFilterCutoffLFOList(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.FilterCutoffLFOList);
 }
コード例 #22
0
 /* for wave table lfo oscillators only */
 public static EnvelopeRec GetLFOSpecWaveTableIndexEnvelope(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.WaveTableIndexEnvelope);
 }
コード例 #23
0
 /* inquire as to whether the filter has been specified */
 public static bool HasLFOSpecFilterBeenSpecified(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.FilterSpecified);
 }
コード例 #24
0
 /* get wave table index lfo list, for wave table lfos only */
 public static LFOListSpecRec GetLFOSpecWaveTableIndexLFOList(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.WaveTableIndexLFOList);
 }
コード例 #25
0
 /* get the sample and hold frequency LFO modulation list */
 public static LFOListSpecRec GetLFOSpecSampleHoldFreqLFOList(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.SampleHoldFreqLFOList);
 }
コード例 #26
0
 /* get the sample selector list */
 public static SampleSelectorRec GetLFOSpecSampleSelector(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.SampleSources);
 }
コード例 #27
0
 /* inquire as to whether the sample/hold processor has been specified */
 public static bool HasLFOSpecSampleHoldBeenSpecified(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.SampleHoldSpecified);
 }
コード例 #28
0
 public static bool LFOSpecGetEnableCrossWaveTableInterpolation(LFOSpecRec LFOSpec)
 {
     return(LFOSpec.EnableCrossWaveTableInterpolation);
 }
コード例 #29
0
 /* 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;
 }
コード例 #30
0
        /* 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);
        }