Ejemplo n.º 1
0
        private void SoundBase_SoundPitchUpdated(object sender, SoundUpdatedEventArgs e)
        {
            if (!IsHandleCreated || IsDisposed)
            {
                return;
            }

            SoundBase snd = (SoundBase)sender;

            if (snd.IsKeyOff)
            {
                return;
            }

            this.BeginInvoke(new MethodInvoker(() =>
            {
                if (IsDisposed)
                {
                    return;
                }

                bool fill;

                if (TargetTimbres != null)
                {
                    bool found = false;
                    foreach (var tt in TargetTimbres)
                    {
                        if (snd.Timbre == tt)
                        {
                            found = true;
                            break;
                        }
                    }
                    if (!found)
                    {
                        return;
                    }
                }

                if (!receiveChs[snd.NoteOnEvent.Channel])
                {
                    return;
                }

                int nn = (int)Math.Round(e.NoteNumber + e.Pitch);
                if (!soundKeyOn.ContainsKey(snd))
                {
                    soundKeyOn.Add(snd, new SoundUpdatedEventArgs(nn, e.Velocity, 0));
                }
                else
                {
                    Invalidate(new Region(getKeyPath(soundKeyOn[snd].NoteNumber, out fill)));
                    soundKeyOn[snd] = new SoundUpdatedEventArgs(nn, e.Velocity, 0);
                }
                Invalidate(new Region(getKeyPath(soundKeyOn[snd].NoteNumber, out fill)));
            }));
        }
Ejemplo n.º 2
0
        private void SoundBase_SoundKeyOff(object sender, SoundUpdatedEventArgs e)
        {
            if (!IsHandleCreated || IsDisposed)
            {
                return;
            }

            this.BeginInvoke(new MethodInvoker(() =>
            {
                if (IsDisposed)
                {
                    return;
                }

                bool fill;
                SoundBase snd = (SoundBase)sender;
                if (soundKeyOn.ContainsKey(snd))
                {
                    Invalidate(new Region(getKeyPath(soundKeyOn[snd].NoteNumber, out fill)));
                    soundKeyOn.Remove(snd);
                }
            }));
        }