/* * AudioFilterFIR_F32.cpp * * Chip Audette, OpenAudio, Apr 2017 * * MIT License, Use at your own risk. * */ #include "AudioFilterFIR_F32.h" void AudioFilterFIR_F32::update(void) { audio_block_f32_t *block, *block_new; block = AudioStream_F32::receiveReadOnly_f32(); if (!block) return; // If there's no coefficient table, give up. if (coeff_p == NULL) { AudioStream_F32::release(block); return; } // do passthru if (coeff_p == FIR_F32_PASSTHRU) { // Just passthrough AudioStream_F32::transmit(block); AudioStream_F32::release(block); //Serial.println("AudioFilterFIR_F32: update(): PASSTHRU."); return; } // get a block for the FIR output block_new = AudioStream_F32::allocate_f32(); if (block_new) { //check to make sure our FIR instance has the right size if (block->length != configured_block_size) { //doesn't match. re-initialize Serial.println("AudioFilterFIR_F32: block size doesn't match. Re-initializing FIR."); begin(coeff_p, n_coeffs, block->length); //initialize with same coefficients, just a new block length } //apply the FIR arm_fir_f32(&fir_inst, block->data, block_new->data, block->length); block_new->length = block->length; //transmit the data AudioStream_F32::transmit(block_new); // send the FIR output AudioStream_F32::release(block_new); } AudioStream_F32::release(block); }