コード例 #1
0
 public static void PutNLProcIndexAccent(
     NonlinProcSpecRec NLProc,
     double Value,
     int AccentNum)
 {
     SetAccentMemberValue(ref NLProc.WaveTableIndexAccent, AccentNum, Value);
 }
コード例 #2
0
 /* add a nonlinear processor to the spec list */
 public static void AddNLProcToEffectSpecList(
     EffectSpecListRec EffectSpecList,
     NonlinProcSpecRec NLProcSpec,
     bool EnabledFlag)
 {
     AddGenericToEffectSpecList(EffectSpecList, EffectTypes.eNLProcEffect, NLProcSpec, EnabledFlag);
 }
コード例 #3
0
 public static void PutNLProcOutputAccent(
     NonlinProcSpecRec NLProc,
     double Value,
     int AccentNum)
 {
     SetAccentMemberValue(ref NLProc.OutputScalingAccent, AccentNum, Value);
 }
コード例 #4
0
            /* initialize common parts of nlproc structure */
            private static NLProcUnifiedRec CommonNLStructAlloc(
                NonlinProcSpecRec Template,
                SynthParamRec SynthParams)
            {
                NLProcUnifiedRec NLProc = new NLProcUnifiedRec();

                /* get the wave table to use for this instance */
                string Name = GetNLProcSpecWaveTableName(Template);

                if (!WaveSampDictGetWaveTableInfo(
                        SynthParams.Dictionary,
                        Name,
                        out NLProc.WaveTableMatrix,
                        out NLProc.FramesPerTable,
                        out NLProc.NumberOfTables))
                {
                    Debug.Assert(false);
                    throw new InvalidOperationException();
                }
                NLProc.NumberOfTablesMinus1 = NLProc.NumberOfTables - 1;

                NLProc.clampOverflow = GetNLProcOverflowMode(Template) == NonlinProcOverflowMode.Clamp;

                return(NLProc);
            }
コード例 #5
0
 public static void GetNLProcWaveTableIndexAgg(
     NonlinProcSpecRec NLProc,
     out ScalarParamEvalRec ParamsOut)
 {
     InitScalarParamEval(
         NLProc.WaveTableIndex,
         ref NLProc.WaveTableIndexAccent,
         NLProc.WaveTableIndexFormula,
         out ParamsOut);
 }
コード例 #6
0
 public static void GetNLProcOutputScalingAgg(
     NonlinProcSpecRec NLProc,
     out ScalarParamEvalRec ParamsOut)
 {
     InitScalarParamEval(
         NLProc.OutputScaling,
         ref NLProc.OutputScalingAccent,
         NLProc.OutputScalingFormula,
         out ParamsOut);
 }
コード例 #7
0
        public static void PutNLProcInputScaling(
            NonlinProcSpecRec NLProc,
            double InputScaling,
            PcodeRec Formula)
        {
#if DEBUG
            if (NLProc.InputScalingFormula != null)
            {
                Debug.Assert(false);
                throw new ArgumentException();
            }
#endif
            NLProc.InputScalingFormula = Formula;
            NLProc.InputScaling        = InputScaling;
        }
コード例 #8
0
        public static void PutNLProcWaveTableIndex(
            NonlinProcSpecRec NLProc,
            double WaveTableIndex,
            PcodeRec Formula)
        {
#if DEBUG
            if (NLProc.WaveTableIndexFormula != null)
            {
                Debug.Assert(false);
                throw new ArgumentException();
            }
#endif
            NLProc.WaveTableIndexFormula = Formula;
            NLProc.WaveTableIndex        = WaveTableIndex;
        }
コード例 #9
0
            /* create a new track nonlinear processor */
            public static NLProcUnifiedRec NewTrackNLProcProcessor(
                NonlinProcSpecRec Template,
                SynthParamRec SynthParams)
            {
                /* initialize common portion of structure */
                NLProcUnifiedRec NLProc = CommonNLStructAlloc(
                    Template,
                    SynthParams);

                NLProc.Track = new NLTrackRec();

                /* initialize variant portion */
                GetNLProcInputScalingAgg(
                    Template,
                    out NLProc.Track.InputScaling);
                GetNLProcOutputScalingAgg(
                    Template,
                    out NLProc.Track.OutputScaling);
                GetNLProcWaveTableIndexAgg(
                    Template,
                    out NLProc.Track.WaveTableIndex);

                return(NLProc);
            }
コード例 #10
0
        /* create a new nonlinear processor specifier.  name block is deleted */
        public static NonlinProcSpecRec NewNonlinProcSpec(string WaveTableName)
        {
            NonlinProcSpecRec NLProc = new NonlinProcSpecRec();

            NLProc.WaveTableName = WaveTableName;

            NLProc.InputEnvelope = NewEnvelope();
            NLProc.OutputEvelope = NewEnvelope();
            NLProc.IndexEnvelope = NewEnvelope();
            NLProc.InputLFO      = NewLFOListSpecifier();
            NLProc.OutputLFO     = NewLFOListSpecifier();
            NLProc.IndexLFO      = NewLFOListSpecifier();
            //InitializeAccentZero(out NLProc.InputScalingAccent);
            //InitializeAccentZero(out NLProc.OutputScalingAccent);
            //InitializeAccentZero(out NLProc.WaveTableIndexAccent);
            NLProc.InputScaling  = 1;
            NLProc.OutputScaling = 1;
            //NLProc.WaveTableIndex = 0;
            //NLProc.InputScalingFormula = null;
            //NLProc.OutputScalingFormula = null;
            //NLProc.WaveTableIndexFormula = null;

            return(NLProc);
        }
コード例 #11
0
 public static EnvelopeRec GetNLProcIndexEnvelope(NonlinProcSpecRec NLProc)
 {
     return(NLProc.IndexEnvelope);
 }
コード例 #12
0
 /* get the actual wave table name heap block */
 public static string GetNLProcSpecWaveTableName(NonlinProcSpecRec NLProc)
 {
     return(NLProc.WaveTableName);
 }
コード例 #13
0
 public static EnvelopeRec GetNLProcOutputEnvelope(NonlinProcSpecRec NLProc)
 {
     return(NLProc.OutputEvelope);
 }
コード例 #14
0
 public static NonlinProcOverflowMode GetNLProcOverflowMode(NonlinProcSpecRec NLProc)
 {
     return(NLProc.OverflowMode);
 }
コード例 #15
0
 public static void SetNLProcOverflowMode(NonlinProcSpecRec NLProc, NonlinProcOverflowMode OverflowMode)
 {
     NLProc.OverflowMode = OverflowMode;
 }
コード例 #16
0
 public static LFOListSpecRec GetNLProcIndexLFO(NonlinProcSpecRec NLProc)
 {
     return(NLProc.IndexLFO);
 }
コード例 #17
0
            /* create a new oscillator nonlinear processor */
            public static NLProcUnifiedRec NewOscNLProcProcessor(
                NonlinProcSpecRec Template,
                ref AccentRec Accents,
                double HurryUp,
                double InitialFrequency,
                double FreqForMultisampling,
                out int PreOriginTimeOut,
                PlayTrackInfoRec TrackInfo,
                SynthParamRec SynthParams)
            {
                int OnePreOrigin;

                /* initialize common portion of structure */
                NLProcUnifiedRec NLProc = CommonNLStructAlloc(
                    Template,
                    SynthParams);

                NLProc.Oscillator = new NLOscRec();

                int MaxPreOrigin = 0;

                NLProc.Oscillator.InputScalingEnvelope = NewEnvelopeStateRecord(
                    GetNLProcInputEnvelope(Template),
                    ref Accents,
                    InitialFrequency,
                    1,
                    HurryUp,
                    out OnePreOrigin,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                NLProc.Oscillator.InputScalingLFO = NewLFOGenerator(
                    GetNLProcInputLFO(Template),
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    1,
                    1,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                NLProc.Oscillator.OutputScalingEnvelope = NewEnvelopeStateRecord(
                    GetNLProcOutputEnvelope(Template),
                    ref Accents,
                    InitialFrequency,
                    1,
                    HurryUp,
                    out OnePreOrigin,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                NLProc.Oscillator.OutputScalingLFO = NewLFOGenerator(
                    GetNLProcOutputLFO(Template),
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    1,
                    1,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                NLProc.Oscillator.WaveTableIndexEnvelope = NewEnvelopeStateRecord(
                    GetNLProcIndexEnvelope(Template),
                    ref Accents,
                    InitialFrequency,
                    1,
                    HurryUp,
                    out OnePreOrigin,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                NLProc.Oscillator.WaveTableIndexLFO = NewLFOGenerator(
                    GetNLProcIndexLFO(Template),
                    out OnePreOrigin,
                    ref Accents,
                    InitialFrequency,
                    HurryUp,
                    1,
                    1,
                    FreqForMultisampling,
                    _PlayTrackParamGetter,
                    TrackInfo,
                    SynthParams);
                if (OnePreOrigin > MaxPreOrigin)
                {
                    MaxPreOrigin = OnePreOrigin;
                }

                PreOriginTimeOut = MaxPreOrigin;

                return(NLProc);
            }
コード例 #18
0
 public static LFOListSpecRec GetNLProcOutputLFO(NonlinProcSpecRec NLProc)
 {
     return(NLProc.OutputLFO);
 }
コード例 #19
0
        /* check nonlinear processor effect */
        public static SynthErrorCodes CheckNonlinearEffectForUnreferencedSamples(
            NonlinProcSpecRec NonlinearEffect,
            CheckUnrefParamRec Param)
        {
            SynthErrorCodes Error;

            string Name = GetNLProcSpecWaveTableName(NonlinearEffect);

            if (!WaveSampDictDoesWaveTableExist(
                    Param.Dictionary,
                    Name))
            {
                Param.ErrorInfo.ErrorEx       = SynthErrorSubCodes.eSynthErrorExUndefinedWaveTable;
                Param.ErrorInfo.WaveTableName = Name;
                return(SynthErrorCodes.eSynthErrorEx);
            }

            Error = CheckEnvelopeForUnreferencedSamples(
                GetNLProcInputEnvelope(NonlinearEffect),
                Param);
            if (Error != SynthErrorCodes.eSynthDone)
            {
                return(Error);
            }

            Error = CheckEnvelopeForUnreferencedSamples(
                GetNLProcOutputEnvelope(NonlinearEffect),
                Param);
            if (Error != SynthErrorCodes.eSynthDone)
            {
                return(Error);
            }

            Error = CheckEnvelopeForUnreferencedSamples(
                GetNLProcIndexEnvelope(NonlinearEffect),
                Param);
            if (Error != SynthErrorCodes.eSynthDone)
            {
                return(Error);
            }

            Error = CheckLFOListForUnreferencedSamples(
                GetNLProcInputLFO(NonlinearEffect),
                Param);
            if (Error != SynthErrorCodes.eSynthDone)
            {
                return(Error);
            }

            Error = CheckLFOListForUnreferencedSamples(
                GetNLProcOutputLFO(NonlinearEffect),
                Param);
            if (Error != SynthErrorCodes.eSynthDone)
            {
                return(Error);
            }

            Error = CheckLFOListForUnreferencedSamples(
                GetNLProcIndexLFO(NonlinearEffect),
                Param);
            if (Error != SynthErrorCodes.eSynthDone)
            {
                return(Error);
            }

            return(SynthErrorCodes.eSynthDone);
        }