|
|
@@ -37,10 +37,10 @@ void AudioFilterBiquad::update(void) |
|
|
|
|
|
|
|
block = receiveWritable(); |
|
|
|
if (!block) return; |
|
|
|
data = (uint32_t *)(block->data); |
|
|
|
end = data + AUDIO_BLOCK_SAMPLES/2; |
|
|
|
state = (int32_t *)definition; |
|
|
|
do { |
|
|
|
data = (uint32_t *)(block->data); // needs to be done inside the loop, end need not be reset. |
|
|
|
a0 = *state++; |
|
|
|
a1 = *state++; |
|
|
|
a2 = *state++; |
|
|
@@ -78,14 +78,20 @@ void AudioFilterBiquad::update(void) |
|
|
|
release(block); |
|
|
|
} |
|
|
|
|
|
|
|
void AudioFilterBiquad::updateCoefs(int *source, bool doReset) |
|
|
|
void AudioFilterBiquad::updateCoefs(uint8_t set,int *source, bool doReset) |
|
|
|
{ |
|
|
|
int32_t *dest=(int32_t *)definition; |
|
|
|
int32_t *src=(int32_t *)source; |
|
|
|
while(set) |
|
|
|
{ |
|
|
|
*dest+=7; |
|
|
|
if(!(*dest&0x80000000)) return; |
|
|
|
*dest++; |
|
|
|
set--; |
|
|
|
} |
|
|
|
__disable_irq(); |
|
|
|
for(uint8_t index=0;index<5;index++) |
|
|
|
{ |
|
|
|
*dest++=*src++; |
|
|
|
*dest++=*source++; |
|
|
|
} |
|
|
|
if(doReset) |
|
|
|
{ |
|
|
@@ -96,8 +102,3 @@ void AudioFilterBiquad::updateCoefs(int *source, bool doReset) |
|
|
|
__enable_irq(); |
|
|
|
} |
|
|
|
|
|
|
|
void AudioFilterBiquad::updateCoefs(int *source) |
|
|
|
{ |
|
|
|
updateCoefs(source,false); |
|
|
|
} |
|
|
|
|