コード例 #1
0
 public void CueOutWithRelease(float release, EnvelopeMode mode)
 {
     if (cueHandles != null)
     {
         for (int i = 0, n = cueHandles.Length; i < n; ++i)
         {
             Sequencer.CueOut(cueHandles[i], release, mode);
             cueHandles[i] = 0;
         }
     }
 }
コード例 #2
0
ファイル: Sequencer.cs プロジェクト: nedma/BookOfTheDead_Env
        public void KeyOff(float release, EnvelopeMode mode)
        {
#if SEQUENCER_PARANOIA
            Debug.LogFormat(
                Time.frameCount.ToString("X4") +
                " Sequencer.KeyOff: {0} {1} : {2} {3}",
                emitter.name, emitter.patches[index] ? emitter.patches[index].name : "???",
                release, mode);
#endif
            if (keyHandle != 0)
            {
                Synthesizer.KeyOff(keyHandle, release, mode);
            }
            Reset();
        }
コード例 #3
0
        internal void TriggerOff(EnvelopeMode envMode)
        {
            if (envMode != EnvelopeMode.Trigger && CurrentState != State.InActive && CurrentState != State.Release)
            {
                if (CurrentState == State.Attack)
                {
                    DecayStart = Value;
                }
                CurrentState = State.Release;

                ReleaseStart = Value;
                StateTime    = 0;
            }
            Trigger = false;
        }
コード例 #4
0
ファイル: Sequencer.cs プロジェクト: nedma/BookOfTheDead_Env
 public static void CueOut(uint handle, float release = 0f, EnvelopeMode mode = EnvelopeMode.None)
 {
     for (var x = activeCues0.GetEnumerator(); x.MoveNext();)
     {
         var z = x.Current;
         if (z.cueHandle == handle)
         {
             z.KeyOff(release, mode);
         }
         else
         {
             activeCues1.Add(z);
         }
     }
     Swap(ref activeCues0, ref activeCues1);
     activeCues1.Clear();
 }
コード例 #5
0
        public static void KeyOff(uint handle, float release = 0f, EnvelopeMode mode = EnvelopeMode.None)
        {
            if (handle == 0)
            {
                Debug.LogErrorFormat("AxelF.Synthesizer KeyOff: bad handle");
                return;
            }
            for (var x = activeSources0.GetEnumerator(); x.MoveNext();)
            {
                var z = x.Current;
                if (z.handle == handle)
                {
#if SYNTHESIZER_PARANOIA
                    Debug.LogFormat(
                        Time.frameCount.ToString("X4") +
                        " Synthesizer.KeyOff: {0} ({1}) : {2} {3}",
                        z.info.audioSource.clip.name, z.info.audioSource.name,
                        release, mode);
#endif
                    switch (mode)
                    {
                    case EnvelopeMode.Exact:
                        z.envelope.SetRelease(release);
                        break;

                    case EnvelopeMode.Min:
                        z.envelope.SetRelease(Mathf.Min(z.envelope.releaseTime, release));
                        break;

                    case EnvelopeMode.Max:
                        z.envelope.SetRelease(Mathf.Max(z.envelope.releaseTime, release));
                        break;
                    }
                    z.keyOff = true;
                }
                activeSources1.Add(z);
            }
            Swap(ref activeSources0, ref activeSources1);
            activeSources1.Clear();
        }
コード例 #6
0
        public double Get(out double linear, double attack, double decay, double sustain, double release, double curvature, EnvelopeTimeScale timeScale, EnvelopeMode envMode)
        {
            if (CurrentState != State.InActive)
            {
                StateTime++;
            }
            switch (CurrentState)
            {
            case State.Attack:
            {
                double L = GetStateLength(attack, timeScale);
                double P = StateTime / L;

                Value += 1.0 / L;
                if (Value >= 1)
                {
                    Value        = 1.0;
                    DecayStart   = 1.0;
                    CurrentState = State.Decay;
                    StateTime    = 0;
                }
                linear = Value;
                return(Curved(Value, curvature));
            }

            case State.Decay:
            {
                double L = GetStateLength(decay, timeScale);
                double P = StateTime / L;

                Value -= 1.0 / L;
                if (Value <= sustain)
                {
                    Value = sustain;

                    if (envMode == EnvelopeMode.Trigger || envMode == EnvelopeMode.Loop)
                    {
                        ReleaseStart = Value;
                        CurrentState = State.Release;
                        StateTime    = 0;
                    }
                    else
                    {
                        CurrentState = State.Sustain;
                        StateTime    = 0;
                    }
                }
                linear = Value;
                return(sustain + Curved((Value - sustain) / (DecayStart - sustain), curvature) * (1 - sustain));
            }

            case State.Sustain:
            {
                StateTime = 0;
                linear    = sustain;
                return(sustain);
            }

            case State.Release:
            {
                double L = GetStateLength(release, timeScale);
                double P = StateTime / L;

                Value -= 1.0 / L;

                if (Value <= 0)
                {
                    Value = 0;

                    if (envMode == EnvelopeMode.Loop && Trigger)
                    {
                        CurrentState = State.Attack;
                        StateTime    = 0;
                    }
                    else
                    {
                        CurrentState = State.InActive;
                        StateTime    = 0;
                    }
                }
                linear = Value;
                return(Curved(Value / (1 - sustain), curvature) * sustain);
            }

            case State.InActive: linear = 0; return(0);
            }
            linear = 0;
            return(0);
        }
コード例 #7
0
ファイル: CulvertView.cs プロジェクト: oozcitak/BoxCulvert
        public CulvertView()
        {
            mCurrentSection = null;

            mViewMode = ViewMode.Section;
            mOutputMode = OutputMode.ServiceCombination;
            mLoadMode = LoadMode.EarthFill;
            mLabelMode = LabelMode.None;
            mEnvelopeMode = EnvelopeMode.Envelope;

            mDrawingPadding = 50;
            mDimensionOffset = 0.2f;
            mTextSize = 0.1f;

            mFormWorkColor = Color.DarkBlue;
            mShadingColor = Color.LightGray;
            mDimensionColor = Color.Black;
            mLoadColor = Color.Black;

            mNegativeForceColor = Color.Red;
            mPositiveForceColor = Color.Blue;
            mEnvelopeForceColor = Color.Purple;
            mFillTransparency = 0.65f;

            mLineThickness = 3.0f;
            mDimensionLineThickness = 1.0f;

            ResizeRedraw = true;
            InitializeComponent();
        }
        /// <summary>
        /// This example illustrates how to use RFSG drivers and envelope tracking APIs to configure envelope tracking.
        /// </summary>
        static void Main(string[] args)
        {
            #region Example Settings
            // Select mode for use in the example
            EnvelopeMode mode         = EnvelopeMode.Detrough;
            string       waveformPath = @"C:\Users\Public\Documents\National Instruments\RFIC Test Software\Waveforms\LTE_FDD_DL_1x20MHz_TM11_OS4.tdms";
            #endregion

            #region Configure RF Generator
            // Initialize instrument sessions
            NIRfsg rfVsg = new NIRfsg("5840", true, false);

            // Load up waveform
            Waveform rfWfm = LoadWaveformFromTDMS(waveformPath);

            // Configure RF generator
            InstrumentConfiguration rfInstrConfig = InstrumentConfiguration.GetDefault();
            ConfigureInstrument(rfVsg, rfInstrConfig);
            DownloadWaveform(rfVsg, rfWfm);
            ConfigureContinuousGeneration(rfVsg, rfWfm);
            #endregion

            #region Configure Tracker Generator
            NIRfsg envVsg = new NIRfsg("5820", true, false);

            // Configure envelope generator
            EnvelopeGeneratorConfiguration envInstrConfig = EnvelopeGeneratorConfiguration.GetDefault();
            TrackerConfiguration           trackerConfig  = TrackerConfiguration.GetDefault();
            ConfigureEnvelopeGenerator(envVsg, envInstrConfig, trackerConfig);

            Waveform envWfm = new Waveform();
            switch (mode)
            {
            case EnvelopeMode.Detrough:
                // Create envelope waveform
                DetroughConfiguration detroughConfig = DetroughConfiguration.GetDefault();
                detroughConfig.MinimumVoltage_V = 1.5;
                detroughConfig.MaximumVoltage_V = 3.5;
                detroughConfig.Exponent         = 1.2;
                detroughConfig.Type             = DetroughType.Exponential;
                envWfm = CreateDetroughEnvelopeWaveform(rfWfm, detroughConfig);
                break;

            case EnvelopeMode.LUT:
                LookUpTableConfiguration lutConfig = new LookUpTableConfiguration
                {
                    DutAverageInputPower_dBm = rfInstrConfig.DutAverageInputPower_dBm
                };
                // Todo - initialize lookup table
                envWfm = CreateLookUpTableEnvelopeWaveform(rfWfm, lutConfig);
                break;
            }

            ScaleAndDownloadEnvelopeWaveform(envVsg, envWfm, trackerConfig);
            ConfigureContinuousGeneration(envVsg, envWfm, "PFI0");
            #endregion

            // Start envelope tracking
            SynchronizationConfiguration syncConfig = SynchronizationConfiguration.GetDefault();
            InitiateSynchronousGeneration(rfVsg, envVsg, syncConfig);

            // Wait until user presses a button to stop
            Console.WriteLine("Press any key to abort envelope tracking..");
            Console.ReadKey();

            AbortGeneration(envVsg);
            AbortGeneration(rfVsg);

            // Close instruments
            rfVsg.Close();
            envVsg.Close();
        }