| blocka = receiveWritable(0); | blocka = receiveWritable(0); | ||||
| blockb = receiveReadOnly(1); | blockb = receiveReadOnly(1); | ||||
| if (!blocka) { | if (!blocka) { | ||||
| if (blockb) release(blockb); | |||||
| return; | |||||
| blocka = allocate(); | |||||
| if (!blocka) { | |||||
| if (blockb) release(blockb); | |||||
| return; | |||||
| } | |||||
| // When no data arrives, we must treat it as if zeros had | |||||
| // arrived. Because of resonance, we need to keep computing | |||||
| // output. Perhaps we could examine the filter state here | |||||
| // and just return without any work when it's below some | |||||
| // threshold we know produces no more sound/resonance? | |||||
| for (int i=0; i < AUDIO_BLOCK_SAMPLES; i++) { | |||||
| blocka->data[i] = 0; | |||||
| } | |||||
| } | } | ||||
| if (!blockb) FCmodActive = false; | if (!blockb) FCmodActive = false; | ||||
| for (int i=0; i < AUDIO_BLOCK_SAMPLES; i++) { | for (int i=0; i < AUDIO_BLOCK_SAMPLES; i++) { |