Пример #1
0
void growl_compute(sp_data *sp, growl_d *form, SPFLOAT *in, SPFLOAT *out)
{
    int i;
    SPFLOAT tmp_in = *in;
    SPFLOAT tmp_out = *in;
    SPFLOAT tf = 0.0;
    SPFLOAT bf = 0.0;
    SPFLOAT freq = 0.0;
    SPFLOAT *x = &form->x;
    SPFLOAT *y = &form->y;
//    *out = 0.0;
//
    for(i = 0; i < 4; i++) {
        tf = (*x) *
            (formants[i + 3] - formants[i]) +
            formants[i];
        bf = (*x) *
            (formants[i + 11] - formants[i + 7]) +
            formants[i + 7];
        freq = (*y) * (bf - tf) + tf;
        form->filt[i]->freq = freq;
        form->filt[i]->bw =
            ((freq * 0.02) + 50);
        sp_reson_compute(sp, form->filt[i], &tmp_in, &tmp_out);
        tmp_in = tmp_out;
    }
    *out = *in;
    sp_bal_compute(sp, form->bal, &tmp_out, in, out);
    tmp_out = *out;
    sp_dcblock_compute(sp, form->dcblk, &tmp_out, out);
}
Пример #2
0
    void process(AUAudioFrameCount frameCount, AUAudioFrameCount bufferOffset) override {
        
        for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {

            int frameOffset = int(frameIndex + bufferOffset);

            for (int channel = 0; channel < channels; ++channel) {
                float *in   = (float *)inBufferListPtr->mBuffers[channel].mData  + frameOffset;
                float *comp = (float *)compBufferListPtr->mBuffers[channel].mData + frameOffset;
                float *out  = (float *)outBufferListPtr->mBuffers[channel].mData + frameOffset;
                
                if (started) {
                    sp_bal_compute(sp, bal, in, comp, out);
                } else {
                    *out = *in;
                }
            }
        }
    }