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; } }
void setup(){ // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 0 bits for preemption, 4 bits for subpriority /* Set up interrupt controller: 2 bits for priority (0-3), * 2 bits for sub-priority (0-3). Priorities control which * interrupts are allowed to preempt one another. */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* Increase SysTick priority to be higher than USB interrupt * priority. USB code stalls inside interrupt and we can't let * this throw off the SysTick timer. */ NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_PriorityGroup_2, SYSTICK_PRIORITY, SYSTICK_SUBPRIORITY)); NVIC_SetPriority(DMA1_Stream3_IRQn, NVIC_EncodePriority(NVIC_PriorityGroup_2, 0, 0)); NVIC_SetPriority(DMA1_Stream4_IRQn, NVIC_EncodePriority(NVIC_PriorityGroup_2, 0, 0)); NVIC_SetPriority(SPI2_IRQn, NVIC_EncodePriority(NVIC_PriorityGroup_2, 1, 0)); NVIC_SetPriority(ADC_IRQn, NVIC_EncodePriority(NVIC_PriorityGroup_2, 2, 0)); ledSetup(); setLed(RED); /* check if we need to DFU boot */ configureDigitalInput(SWITCH_B_PORT, SWITCH_B_PIN, GPIO_PuPd_UP); if(isPushButtonPressed()) jump_to_bootloader(); adcSetup(); clockSetup(); setupSwitchA(footSwitchCallback); setupSwitchB(pushButtonCallback); settings.init(); midi.init(MIDI_CHANNEL); patches.init(); #ifdef EXPRESSION_PEDAL #ifndef OWLMODULAR setupExpressionPedal(); #endif #endif RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); // DEBUG configureDigitalOutput(GPIOB, GPIO_Pin_1); // PB1, DEBUG LED debugClear(); #ifdef DEBUG_AUDIO RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // DEBUG configureDigitalOutput(GPIOA, GPIO_Pin_7); // PA7 DEBUG configureDigitalOutput(GPIOC, GPIO_Pin_5); // PC5 DEBUG clearPin(GPIOC, GPIO_Pin_5); // DEBUG clearPin(GPIOA, GPIO_Pin_7); // DEBUG #endif /* DEBUG_AUDIO */ usb_init(); #if SERIAL_PORT == 1 setupSerialPort1(115200); #elif SERIAL_PORT == 2 setupSerialPort2(115200); // expression pedal #warning expression pedal jack configured as serial port #ifdef EXPRESSION_PEDAL #error invalid configuration #endif #endif #ifdef OWLMODULAR configureDigitalInput(GPIOB, GPIO_Pin_6, GPIO_PuPd_NOPULL); // PB6 OWL Modular digital input configureDigitalOutput(GPIOB, GPIO_Pin_7); // PB7 OWL Modular digital output setPin(GPIOB, GPIO_Pin_7); // PB7 OWL Modular digital output #endif codec.setup(); codec.init(settings); printString("startup\n"); updateBypassMode(); codec.start(); }