Пример #1
0
        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);
            }
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
 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);
 }
Пример #5
0
        /// <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);
        }
Пример #6
0
        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;
                }
            }
        }