Пример #1
0
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposeEvenManagedStuff">true to dispose managed and unmanaged resources; false to dispose unmanaged resources</param>
        protected void Dispose(bool disposeEvenManagedStuff)
        {
            // prevent double disposing
            if (Interlocked.Exchange(ref m_disposed, 1) != 0)
            {
                return;
            }

            if ((Arguments != null) && Arguments.RepeatingScanTest && repeatingScanStarted && (InstrumentInstance != null))
            {
                ScansTest.CancelRepeatingScan(InstrumentInstance);
            }

            if (disposeEvenManagedStuff)
            {
                if (m_scansOutput != null)
                {
                    m_scansOutput.CloseDown();
                    m_scansOutput = null;
                }
                if (m_analogOutput != null)
                {
                    m_analogOutput.CloseDown();
                    m_analogOutput = null;
                }
                if (m_valuesTest != null)
                {
                    m_valuesTest.CloseDown();
                    m_valuesTest = null;
                }
                if (m_scansTest != null)
                {
                    m_scansTest.Dispose();
                    m_scansTest = null;
                }
                if (m_methodsTest != null)
                {
                    m_methodsTest.CloseDown();
                    m_methodsTest = null;
                }
                if (InstrumentInstance != null)
                {
                    InstrumentInstance.Dispose();
                    InstrumentInstance = null;
                }
            }


            IInstrumentAccessContainer container = Container;

            Container = null;
            if (container != null)
            {
                IDisposable disp = container as IDisposable;
                if (disp != null)
                {
                    disp.Dispose();
                }
            }
        }
Пример #2
0
        public void SetAutoPortamento(InstrumentInstance prev, int speed)
        {
            if (speed == 0 || prev.note == VirtualKeyboard.Note.None || prev.note == VirtualKeyboard.Note.NoteOff)
            {
                return;
            }

            float prevFreq = PSGWrapper.CalculateNoteFreq((int)prev.note, prev.octave);
            float currFreq = PSGWrapper.CalculateNoteFreq((int)note, octave);
            int   relFreq  = (int)(prevFreq - currFreq);

            m_PortamentoTimer = System.Math.Abs(relFreq) / speed;
            portamentoSpeed   = speed * System.Math.Sign(relFreq);
            m_AutoPortamento  = true;
        }
Пример #3
0
        public InstrumentInstance GetDeepCopy()
        {
            InstrumentInstance ins = this;

            ins.volumeTable = new int [volumeTable.Length];
            ins.arpeggio    = new int [arpeggio.Length];
            Array.Copy(volumeTable, ins.volumeTable, volumeTable.Length);
            Array.Copy(arpeggio, ins.arpeggio, arpeggio.Length);

            if (waveTable != null)
            {
                ins.waveTable = new int [waveTable.Length];
                Array.Copy(waveTable, ins.waveTable, waveTable.Length);
            }

            return(ins);
        }