private void SetSingleMidiChordSlider(ChordSliderType chordSliderType, int channel, byte value) { MidiSliderTime midiSliderTime = null; switch (chordSliderType) { case ChordSliderType.Pitchwheel: midiSliderTime = new MidiSliderTime(new PitchWheel(channel, value, ControlContinuation.NoChange), 0); break; case ChordSliderType.Pan: midiSliderTime = new MidiSliderTime(new Pan(channel, value, ControlContinuation.NoChange), 0); break; case ChordSliderType.ModulationWheel: midiSliderTime = new MidiSliderTime(new ModulationWheel(channel, value, ControlContinuation.NoChange), 0); break; case ChordSliderType.Expression: midiSliderTime = new MidiSliderTime(new Expression(channel, value, ControlContinuation.NoChange), 0); break; default: break; } if (midiSliderTime != null) { MidiSliderTimes.Add(midiSliderTime); } }
protected MidiChordSlider(ChordSliderType chordSliderType, List <byte> values, int channel, int noteDurationMilliseconds) : base() { Debug.Assert(values.Count > 0); if (values.Count == 1) { SetSingleMidiChordSlider(chordSliderType, channel, values[0]); } else // args.Count > 1 if (values.Count > 1) { int msTimeBetweenPeaks = noteDurationMilliseconds / (values.Count - 1); // time between peaks int msPosition = 0; byte value = values[0]; // initial value for (int i = 1; i < values.Count; i++) { int msPositionOfNextPeak = msTimeBetweenPeaks * i; byte valueAtNextPeak = values[i]; // value at coming peak SetMidiChordSlider(chordSliderType, channel, msPosition, msPositionOfNextPeak, value, valueAtNextPeak); msPosition = msPositionOfNextPeak; value = valueAtNextPeak; } } }
/// <summary> /// Creates MidiSliderTime objects and adds them to MidiSliderTimes list so as to create a slide from /// currentValue to endValue from msStartPosition up to (but not including) msEndPosition. /// </summary> protected void SetMidiChordSlider(ChordSliderType chordSliderType, int channel, int currentMsPosition, int endMsPosition, byte currentValue, byte endValue) { Debug.Assert(endMsPosition >= currentMsPosition); float slideValueDelta = 0f; float slideDuration = endMsPosition - currentMsPosition; float floatCurrentValue = (float)currentValue; float floatEndValue = (float)endValue; if (slideDuration != 0) { slideValueDelta = (floatEndValue - floatCurrentValue) / (slideDuration / _defaultSleepTime); } do { int sleepTime = endMsPosition - currentMsPosition; sleepTime = (sleepTime > _defaultSleepTime) ? _defaultSleepTime : sleepTime; MidiSliderTime midiSliderTime = null; switch (chordSliderType) { case ChordSliderType.Pitchwheel: midiSliderTime = new MidiSliderTime(new PitchWheel(channel, (byte)floatCurrentValue, ControlContinuation.NoChange), sleepTime); break; case ChordSliderType.Pan: midiSliderTime = new MidiSliderTime(new Pan(channel, (byte)floatCurrentValue, ControlContinuation.NoChange), sleepTime); break; case ChordSliderType.ModulationWheel: midiSliderTime = new MidiSliderTime(new ModulationWheel(channel, (byte)floatCurrentValue, ControlContinuation.NoChange), sleepTime); break; case ChordSliderType.Expression: midiSliderTime = new MidiSliderTime(new Expression(channel, (byte)floatCurrentValue, ControlContinuation.NoChange), sleepTime); break; default: break; } if (midiSliderTime == null) { break; } MidiSliderTimes.Add(midiSliderTime); currentMsPosition += sleepTime; floatCurrentValue += slideValueDelta; } while(currentMsPosition < endMsPosition); }
private void SetSingleMidiChordSlider(ChordSliderType chordSliderType, int channel, byte value) { MidiSliderTime midiSliderTime = null; switch(chordSliderType) { case ChordSliderType.Pitchwheel: midiSliderTime = new MidiSliderTime(new PitchWheel(channel, value, ControlContinuation.NoChange), 0); break; case ChordSliderType.Pan: midiSliderTime = new MidiSliderTime(new Pan(channel, value, ControlContinuation.NoChange), 0); break; case ChordSliderType.ModulationWheel: midiSliderTime = new MidiSliderTime(new ModulationWheel(channel, value, ControlContinuation.NoChange), 0); break; case ChordSliderType.Expression: midiSliderTime = new MidiSliderTime(new Expression(channel, value, ControlContinuation.NoChange), 0); break; default: break; } if(midiSliderTime != null) MidiSliderTimes.Add(midiSliderTime); }
/// <summary> /// Creates MidiSliderTime objects and adds them to MidiSliderTimes list so as to create a slide from /// currentValue to endValue from msStartPosition up to (but not including) msEndPosition. /// </summary> protected void SetMidiChordSlider(ChordSliderType chordSliderType, int channel, int currentMsPosition, int endMsPosition, byte currentValue, byte endValue) { Debug.Assert(endMsPosition >= currentMsPosition); float slideValueDelta = 0f; float slideDuration = endMsPosition - currentMsPosition; float floatCurrentValue = (float)currentValue; float floatEndValue = (float)endValue; if(slideDuration != 0) slideValueDelta = (floatEndValue - floatCurrentValue) / (slideDuration / _defaultSleepTime); do { int sleepTime = endMsPosition - currentMsPosition; sleepTime = (sleepTime > _defaultSleepTime) ? _defaultSleepTime : sleepTime; MidiSliderTime midiSliderTime = null; switch(chordSliderType) { case ChordSliderType.Pitchwheel: midiSliderTime = new MidiSliderTime(new PitchWheel(channel, (byte)floatCurrentValue, ControlContinuation.NoChange), sleepTime); break; case ChordSliderType.Pan: midiSliderTime = new MidiSliderTime(new Pan(channel, (byte)floatCurrentValue, ControlContinuation.NoChange), sleepTime); break; case ChordSliderType.ModulationWheel: midiSliderTime = new MidiSliderTime(new ModulationWheel(channel, (byte)floatCurrentValue, ControlContinuation.NoChange), sleepTime); break; case ChordSliderType.Expression: midiSliderTime = new MidiSliderTime(new Expression(channel, (byte)floatCurrentValue, ControlContinuation.NoChange), sleepTime); break; default: break; } if(midiSliderTime == null) break; MidiSliderTimes.Add(midiSliderTime); currentMsPosition += sleepTime; floatCurrentValue += slideValueDelta; } while(currentMsPosition < endMsPosition); }
protected MidiChordSlider(ChordSliderType chordSliderType, List<byte> values, int channel, int noteDurationMilliseconds) : base() { Debug.Assert(values.Count > 0); if(values.Count == 1) { SetSingleMidiChordSlider(chordSliderType, channel, values[0]); } else // args.Count > 1 if(values.Count > 1) { int msTimeBetweenPeaks = noteDurationMilliseconds / (values.Count - 1); // time between peaks int msPosition = 0; byte value = values[0]; // initial value for(int i = 1; i < values.Count; i++) { int msPositionOfNextPeak = msTimeBetweenPeaks * i; byte valueAtNextPeak = values[i]; // value at coming peak SetMidiChordSlider(chordSliderType, channel, msPosition, msPositionOfNextPeak, value, valueAtNextPeak); msPosition = msPositionOfNextPeak; value = valueAtNextPeak; } } }