using System; using System.Collections; using Wavelet_Tracker; using System.Collections.Generic; namespace Wavelet_Tracker { public class TimeDilateMachine : MachineParameterisedBase { private const string type = "Time Dilate"; private const string author = "Internal"; private const int version = 1; private int counter = 0; public TimeDilateMachine(string name) : base(type, author, version, name) { machineLimitations = MachineLimitations.ProcessWavelets; } protected override void endProductionImpl(long interval) { float fSpread = (float)(parameters[0].parameterValue); fSpread *= 9.9f; fSpread += 0.1f; counter++; List list = inputs[0].buffer.getForProcessing(playTime, interval, true); for (int x = 0; x < list.Count; x++) { SoundEvent e = list[x]; if (e.eventType == EventType.AUDIO_WAVELETS) { WaveletEvent w = (WaveletEvent) e; w.length *= fSpread; w.amplitude /= fSpread; w.calcEndpoints(); } } outputs[0].buffer.addAllEvents(list); } protected override void endSeekImpl(long seekTime) { } protected override void endSetupParametersImpl() { parameters = new MachineParameter[1]; MachineParameterContinuous freq = new MachineParameterContinuous("Dilation", 0, 0.1f); freq.multiplier = 9.9f; freq.offset = 0.1f; freq.label = "x"; parameters[0] = freq; } protected override void endSetupInputOutputImpl() { outputs = new MachineConnection[1]; outputs[0] = new MachineConnection("Output"); inputs = new MachineConnection[1]; inputs[0] = new MachineConnection("Input"); } protected override void endTickImpl(ArrayList parameterChanges) { //if (parameterChanges.Count > 0) onsole.WriteLine("Tick " + parameterChanges.Count + " " + parameters[0].parameterValue); } } }