public void PlayNode() { if (currentStep == endStep) { currentStep = 0; } AdsrSampleProvider sample = sequencer.GenerateSampleProvider(currentStep); mainMixer.AddMixerInput(sample); Timer timer2 = new Timer(sequencer.sequencerNode[currentStep].GateTime) { AutoReset = false, Enabled = true }; timer2.Elapsed += (a, b) => { StopNode(sample); timer2.Dispose(); }; currentStep++; }
public void PlayNode() { if (CurrentStep == endStep) { CurrentStep = 0; } // Loop thru each sequencer and play the node at the current step. for (int i = 0; i < _sequencers.Count(); i++) { if (_sequencers[i].Active == true && _sequencers[i].GetSequencerNode(CurrentStep).Active == true) // Check if sequencer or node is active. { AdsrSampleProvider sample = _sequencers[i].GenerateSampleProvider(CurrentStep); mainMixer.AddMixerInput(sample); Timer timer2 = new Timer(_sequencers[i].sequencerNode[CurrentStep].GateTime) { AutoReset = false, Enabled = true }; timer2.Elapsed += (a, b) => { StopNode(sample); timer2.Dispose(); }; } } CurrentStep++; }
public AdsrSampleProvider GenerateSampleProvider(int i) { SequencerNode node = sequencerNode[i]; SignalGenerator signal = new SignalGenerator(GlobalDef.SampleRate, GlobalDef.Channels); signal.Frequency = node.Frequency; signal.Gain = node.Gain * Gain; signal.Type = SignalGeneratorType; AdsrSampleProvider adsr = new AdsrSampleProvider(signal); adsr.AttackSeconds = _attack; adsr.ReleaseSeconds = _release; return(adsr); }
public void StopNode(AdsrSampleProvider sample) { sample.Stop(); //mainMixer.RemoveMixerInput(sample); }