void PatchController::process(AudioBuffer& buffer){ if(activeSlot == GREEN && green.index != settings.patch_green){ memset(buffer.getSamples(0), 0, buffer.getChannels()*buffer.getSize()*sizeof(float)); // green must be active slot when patch constructor is called green.setPatch(settings.patch_green); codec.softMute(false); debugClear(); return; }else if(activeSlot == RED && red.index != settings.patch_red){ memset(buffer.getSamples(0), 0, buffer.getChannels()*buffer.getSize()*sizeof(float)); // red must be active slot when constructor is called red.setPatch(settings.patch_red); codec.softMute(false); debugClear(); return; } switch(mode){ case SINGLE_MODE: case DUAL_GREEN_MODE: green.setParameterValues(getAnalogValues()); green.patch->processAudio(buffer); break; case DUAL_RED_MODE: red.setParameterValues(getAnalogValues()); red.patch->processAudio(buffer); break; case SERIES_GREEN_MODE: green.setParameterValues(getAnalogValues()); green.patch->processAudio(buffer); red.patch->processAudio(buffer); break; case SERIES_RED_MODE: red.setParameterValues(getAnalogValues()); green.patch->processAudio(buffer); red.patch->processAudio(buffer); break; case PARALLEL_GREEN_MODE: green.setParameterValues(getAnalogValues()); processParallel(buffer); break; case PARALLEL_RED_MODE: red.setParameterValues(getAnalogValues()); processParallel(buffer); break; } }
// __attribute__ ((section (".coderam"))) void PatchController::process(AudioBuffer& buffer){ mode = getPatchMode(); if(isButtonPressed(RED_BUTTON)){ mode |= 1; if(red.index != getRedPatchId()){ initialisePatch(RED, getRedPatchId()); return; } }else{ mode &= ~1; if(green.index != getGreenPatchId()){ initialisePatch(GREEN, getGreenPatchId()); return; } } switch(mode){ case SINGLE_GREEN_MODE: case DUAL_GREEN_MODE: green.setParameterValues(parameterValues); green.patch->processAudio(buffer); break; case SINGLE_RED_MODE: case DUAL_RED_MODE: red.setParameterValues(parameterValues); red.patch->processAudio(buffer); break; case SERIES_GREEN_MODE: green.setParameterValues(parameterValues); green.patch->processAudio(buffer); red.patch->processAudio(buffer); break; case SERIES_RED_MODE: red.setParameterValues(parameterValues); green.patch->processAudio(buffer); red.patch->processAudio(buffer); break; case PARALLEL_GREEN_MODE: green.setParameterValues(parameterValues); processParallel(buffer); break; case PARALLEL_RED_MODE: red.setParameterValues(parameterValues); processParallel(buffer); break; } }
int main() { //set the global ints currentFunction = 1; uniqueVarNum = 1; uniqueStructNum = 1; numThreads = 0; readInput(); processVariables(); //First, handle parallels bool foundConstruct = true; while (foundConstruct) { foundConstruct = processParallel(); } //next, handle parallel for foundConstruct = true; while (foundConstruct) { foundConstruct = processParallelFor(); } //next, handle criticals foundConstruct = true; while (foundConstruct) { foundConstruct = processCritical(); } //next, handle single foundConstruct = true; while (foundConstruct) { foundConstruct = processSingle(); } //last, change all omp_get_thread_num calls to use the paramstruct processGetThreadNum(); //put global vars at the top eliminateDuplicates(globalVars); insertAfterIncludes(globalVars); //put private vars back in main eliminateDuplicates(totalPrivBackup); declarePrivatesInMain(totalPrivBackup); //create and insert the parameter struct strvec newStruct = createStartEndStruct(); insertAfterIncludes(newStruct); //create and add the mutex call strvec synchronization; synchronization.push_back("pthread_mutex_t theMutex = PTHREAD_MUTEX_INITIALIZER;"); insertAfterIncludes(synchronization); //create and add new includes strvec includes; includes.push_back("#include <pthread.h>"); includes.push_back("#include <algorithm>"); includes.push_back("#include <cstring>"); insertAfterIncludes(includes); //print output (to use for file redirection) printVector(input); }