/// <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(); } } }
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; }
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); }