using System; using System.Collections; using System.Collections.Generic; namespace Wavelet_Tracker { public class MixingDeskMachine : MachineParameterisedBase { private const string type = "Mixing Desk"; private const string author = "Internal"; private const int version = 1; // For wavelet test mode. private bool testMode = false; private long nextBeep = 0; // For PCM test mode. private int counter = 0; public MixingDeskMachine(string name) : base(type, author, version, name) { machineLimitations = MachineLimitations.ProcessWaveletsAndPCM; } protected unsafe override void endProductionImpl(long interval) { if (testMode) { // PCM Test PCMEvent evt = new PCMEvent(playTime, playTime+interval, 1); for (int x = 0; x < evt.bufferLength; x++) { *(evt.data[0] + x) = (float) Math.Sin((double) counter * 0.04)*0.5f; counter++; } outputs[0].buffer.addEvent(evt); // Wavelet Test //while (playTime+interval > nextBeep) //{ // WaveletEvent evt = new WaveletEvent(1000, 0.707, 100, 0, nextBeep); // outputs[0].buffer.addEvent(evt); //onsole.WriteLine("Creating " + evt); // nextBeep += (int)(App.TIME_RES * 0.5); //} } else { for (int x = 0; x < 8; x++) { MachineConnection buff = (MachineConnection) inputs[x]; List events = buff.buffer.getForProcessing(playTime, playTime + interval, true); float fVol = (float)(parameters[x].parameterValue); //float fVol = (float) dVol; foreach (SoundEvent evt in events) { if (evt.eventType == EventType.AUDIO_WAVELETS) { ((WaveletEvent) evt).amplitude *= fVol; //outputs[0].buffer.addEvent(evt); } if (evt.eventType == EventType.AUDIO_PCM) { // Volume PCMEvent pcm = (PCMEvent) evt; int len = pcm.bufferLength; if (pcm.numChannels == 1) { /*int mlen = len - len % 8; for (int y = 0; y < mlen; y++) { pcm.data[0, y] *= fVol; y++; pcm.data[0, y] *= fVol; y++; pcm.data[0, y] *= fVol; y++; pcm.data[0, y] *= fVol; y++; pcm.data[0, y] *= fVol; y++; pcm.data[0, y] *= fVol; y++; pcm.data[0, y] *= fVol; y++; pcm.data[0, y] *= fVol; } for (int y = mlen; y < len; y++) { pcm.data[0, y] *= fVol; }*/ for (int y = 0; y < len; y++) { *(pcm.data[0] + y) *= fVol; } } else if (pcm.numChannels == 2) { /* int mlen = len - len % 4; for (int y = 0; y < mlen; y++) { pcm.data[0, y] *= fVol; pcm.data[1, y] *= fVol; y++; pcm.data[0, y] *= fVol; pcm.data[1, y] *= fVol; y++; pcm.data[0, y] *= fVol; pcm.data[1, y] *= fVol; y++; pcm.data[0, y] *= fVol; pcm.data[1, y] *= fVol; } for (int y = mlen; y < len; y++) { pcm.data[0, y] *= fVol; pcm.data[1, y] *= fVol; }*/ for (int y = 0; y < len; y++) { *(pcm.data[0] + y) *= fVol; *(pcm.data[1] + y) *= fVol; } } else if (pcm.numChannels == 4) { for (int y = 0; y < len; y++) { *(pcm.data[0] + y) *= fVol; *(pcm.data[1] + y) *= fVol; *(pcm.data[2] + y) *= fVol; *(pcm.data[3] + y) *= fVol; } } else if (pcm.numChannels == 8) { for (int y = 0; y < len; y++) { *(pcm.data[0] + y) *= fVol; *(pcm.data[1] + y) *= fVol; *(pcm.data[2] + y) *= fVol; *(pcm.data[3] + y) *= fVol; *(pcm.data[4] + y) *= fVol; *(pcm.data[5] + y) *= fVol; *(pcm.data[6] + y) *= fVol; *(pcm.data[7] + y) *= fVol; } } //outputs[0].buffer.addEvent(evt); } } outputs[0].buffer.addAllEvents(events); } } } protected override void endSeekImpl(long seekTime) { nextBeep = seekTime; } protected override void endSetupParametersImpl() { //onsole.WriteLine("Setting up params"); parameters = new MachineParameter[8]; MachineParameterContinuous temp = new MachineParameterContinuous("Line 1 Volume", 0, 0.7f); temp.label = "%"; temp.multiplier = 100; parameters[0] = temp; temp = new MachineParameterContinuous ("Line 2 Volume", 0, 0.7f); temp.label = "%"; temp.multiplier = 100; parameters[1] = temp; temp = new MachineParameterContinuous ("Line 3 Volume", 0, 0.7f); temp.label = "%"; temp.multiplier = 100; parameters[2] = temp; temp = new MachineParameterContinuous ("Line 4 Volume", 0, 0.7f); temp.label = "%"; temp.multiplier = 100; parameters[3] = temp; temp = new MachineParameterContinuous ("Line 5 Volume", 0, 0.7f); temp.label = "%"; temp.multiplier = 100; parameters[4] = temp; temp = new MachineParameterContinuous ("Line 6 Volume", 0, 0.7f); temp.label = "%"; temp.multiplier = 100; parameters[5] = temp; temp = new MachineParameterContinuous ("Line 7 Volume", 0, 0.7f); temp.label = "%"; temp.multiplier = 100; parameters[6] = temp; temp = new MachineParameterContinuous ("Line 8 Volume", 0, 0.7f); temp.label = "%"; temp.multiplier = 100; parameters[7] = temp; } protected override void endSetupInputOutputImpl() { outputs = new MachineConnection[1]; outputs[0] = new MachineConnection("Output"); inputs = new MachineConnection[8]; inputs[0] = new MachineConnection("Line 1"); inputs[1] = new MachineConnection("Line 2"); inputs[2] = new MachineConnection("Line 3"); inputs[3] = new MachineConnection("Line 4"); inputs[4] = new MachineConnection("Line 5"); inputs[5] = new MachineConnection("Line 6"); inputs[6] = new MachineConnection("Line 7"); inputs[7] = new MachineConnection("Line 8"); } protected override void endTickImpl(ArrayList parameterChanges) { } } }