Example #1
0
 public void AttachListener(IMidiListener listener)
 {
     if (listener != null)
     {
         _listeners.Add(new WeakReference <IMidiListener>(listener));
     }
 }
Example #2
0
        public Midi(IMidiListener midiListener)
        {
            this.midiListener = midiListener;

            midiInProc = new NativeMethods.MidiInProc(MidiProc);
            midiInHandle = IntPtr.Zero;
            midiOutHandle = IntPtr.Zero;
        }
Example #3
0
        public Midi(IMidiListener midiListener)
        {
            this.midiListener = midiListener;

            midiInProc    = new NativeMethods.MidiInProc(MidiProc);
            midiInHandle  = IntPtr.Zero;
            midiOutHandle = IntPtr.Zero;
        }
Example #4
0
 public void DetachListener(IMidiListener listener)
 {
     foreach (WeakReference <IMidiListener> wr in _listeners.ToArray())
     {
         IMidiListener candidate;
         if (!wr.TryGetTarget(out candidate))
         {
             _listeners.Remove(wr);
         }
         else if (candidate == listener)
         {
             _listeners.Remove(wr);
         }
     }
 }
Example #5
0
        public void RepublishState(IMidiListener toListener = null)
        {
            // This does not include active notes

            // Messages that came in on the OMNI channel have already been distributed to each cache
            // Messages that came in on individual channels have all been distributed to the omni cache as well.

            IEnumerable <IMidiListener> listeners;

            if (toListener == null)
            {
                listeners = GetListeners();
            }
            else
            {
                listeners = new[] { toListener }
            };

            foreach (IMidiListener listener in listeners)
            {
                MidiPerformance cache;
                if (_localPerformanceCache.TryGetValue(listener.Channel, out cache))
                {
                    listener.HandleChannelPressure((int)cache.Pressure, cache.Channel);
                    listener.HandlePitchWheel((int)cache.PitchBend, cache.Channel);
                    listener.HandleControlChange((int)MidiController.Modulation, (int)cache.Modulation, cache.Channel);

                    listener.HandleControlChange((int)MidiController.Modulation, (int)cache.Modulation, cache.Channel);
                    listener.HandleControlChange((int)MidiController.BreathController, (int)cache.BreathController, cache.Channel);
                    listener.HandleControlChange((int)MidiController.MainVolume, (int)cache.Volume, cache.Channel);
                    listener.HandleControlChange((int)MidiController.Pan, (int)cache.Pan, cache.Channel);
                    listener.HandleControlChange((int)MidiController.Expression, (int)cache.Expression, cache.Channel);

                    listener.HandleControlChange((int)MidiController.Sustain, cache.HoldPedal ? 127 : 0, cache.Channel);
                    listener.HandleControlChange((int)MidiController.Portamento, cache.Portamento ? 127 : 0, cache.Channel);
                    listener.HandleControlChange((int)MidiController.Sostenuto, cache.SustenutoPedal ? 127 : 0, cache.Channel);
                    listener.HandleControlChange((int)MidiController.SoftPedal, cache.SoftPedal ? 127 : 0, cache.Channel);
                    listener.HandleControlChange((int)MidiController.LegatoFootswitch, cache.Legato ? 127 : 0, cache.Channel);
                }
            }
        }