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; } } }
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(); }
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; }
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(); }
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(); }
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); }
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(); }