void render(BelaContext *context, void *userData) { for(unsigned int n = 0; n < context->audioFrames; n++) { float sample = 0; float out = 0; // If triggered... if(gReadPtr != -1) sample += gSampleData.samples[gReadPtr++]; // ...read each sample... if(gReadPtr >= gSampleData.sampleLen) gReadPtr = -1; out = lb0*sample+lb1*gLastX[0]+lb2*gLastX[1]-la1*gLastY[0]-la2*gLastY[1]; gLastX[1] = gLastX[0]; gLastX[0] = out; gLastY[1] = gLastY[0]; gLastY[0] = out; for(unsigned int channel = 0; channel < context->audioOutChannels; ++channel) // ...and copy it to all the output channels audioWrite(context, n, channel, out); } // Request that the lower-priority tasks run at next opportunity Bela_scheduleAuxiliaryTask(gChangeCoeffTask); Bela_scheduleAuxiliaryTask(gInputTask); }
int Midi::writeTo(const char* port){ objAddrs[kMidiOutput].push_back(this); outputPort = open(port, O_WRONLY, 0); if(outputPort < 0){ return -1; } else { printf("Writing to Midi port %s\n", port); Bela_scheduleAuxiliaryTask(midiOutputTask); return 1; } }
int Midi::readFrom(const char* port){ objAddrs[kMidiInput].push_back(this); inputPort = open(port, O_RDONLY | O_NONBLOCK | O_NOCTTY); if(inputPort < 0){ return -1; } else { printf("Reading from Midi port %s\n", port); Bela_scheduleAuxiliaryTask(midiInputTask); return 1; } }
bool setup(BelaContext *context, void *userData) { // Check that we have the same number of inputs and outputs. if(context->audioInChannels != context->audioOutChannels || context->analogInChannels != context-> analogOutChannels){ printf("Error: for this project, you need the same number of input and output channels.\n"); return false; } updatePll=Bela_createAuxiliaryTask(&updatePllFunction, 91, "update PLL"); for(int n=0; n<delayLength; n++){ delay[n]=0; } Bela_scheduleAuxiliaryTask(updatePll); return true; }
bool setup(BelaContext *context, void *userData) { // Check that we have the same number of inputs and outputs. if(context->audioInChannels != context->audioOutChannels || context->analogInChannels != context-> analogOutChannels){ printf("Error: for this project, you need the same number of input and output channels.\n"); return false; } // Retrieve a parameter passed in from the initAudio() call gSampleData = *(SampleData *)userData; gReadPtr = -1; if(initialise_trigger() == false) return false; // Start the lower-priority task. It will run forever in a loop Bela_scheduleAuxiliaryTask(gTriggerSamplesTask); return true; }
void render(BelaContext *context, void *userData) { static float lfoPhase = 0; float amplitude = lfoAmplitude * 4700; // range of variation around D. D has to be between [0 9999] lfoPhase+=lfoRate * 2.f * (float)M_PI * context->audioFrames/context->audioSampleRate; D=amplitude+amplitude * sinf(lfoPhase); Bela_scheduleAuxiliaryTask(updatePll); for(unsigned int n = 0; n < context->audioFrames; n++) { float input = 0.0; for(unsigned int ch = 0; ch < context->audioInChannels; ch++) { input += audioRead(context, n, ch); } input = input/(float)context->audioInChannels; delay[writePointer++] = input + delay[readPointer]*feedback; float output = dry * input + wet * delay[readPointer++]; for(unsigned int ch = 0; ch < context->audioOutChannels; ch++) audioWrite(context, n, ch, output); if(writePointer>=delayLength) writePointer-=delayLength; if(readPointer>=delayLength) readPointer-=delayLength; } }