Example #1
0
/* *****************************************************************************
 DecimatorProcess */
Error_t
DecimatorProcess(Decimator      *decimator,
                 float          *outBuffer,
                 const float    *inBuffer,
                 unsigned       n_samples)
{
    if (decimator && outBuffer)
    {
        unsigned declen = n_samples / decimator->factor;
        float temp_buf[declen];
        ClearBuffer(outBuffer, declen);

        for (unsigned filt = 0; filt < decimator->factor; ++filt)
        {
            CopyBufferStride(temp_buf, 1, inBuffer, decimator->factor, declen);
            FIRFilterProcess(decimator->polyphase[filt], temp_buf, temp_buf, declen);
            VectorVectorAdd(outBuffer, (const float*)outBuffer, temp_buf, declen);
        }
        return NOERR;
    }
    else
    {
        return NULL_PTR_ERROR;
    }
}
Example #2
0
TEST(DSPSingle, TestVectorVectorAdd)
{
    float out[10];
    VectorVectorAdd(out, zeros, ramp, 10);
    for (unsigned i = 0; i < 10; ++i)
    {
        ASSERT_FLOAT_EQ(ramp[i], out[i]);
    }
}
Example #3
0
File: Tape.c Project: eriser/FxDSP
/*******************************************************************************
 Set Speed */
Error_t
TapeSetSpeed(Tape* tape, TapeSpeed speed)
{
    
    if (tape)
    {
        // Set speed
        tape->speed = speed;
        
        // Update saturation curve
        PolySaturatorSetN(tape->polysat, calculate_n(tape->saturation, speed));
        
        // Clear old flutter/wow modulation waveform
        ClearBuffer(tape->flutter_mod, tape->flutter_mod_length); // Yes, clear the old length...
        
        // Calculate new modulation waveform length...
        tape->flutter_mod_length = (unsigned)(tape->sample_rate / \
                                              (0.80 * powf(2.0, (float)speed)));
        
        // Generate flutter/wow modulation waveform
        float temp_buffer[tape->flutter_mod_length];
        for (unsigned comp = 0; comp < N_FLUTTER_COMPONENTS; ++comp)
        {
            float phase_step = (2.0 * M_PI * comp * powf(2.0, (float)speed)) / tape->sample_rate;
            ClearBuffer(temp_buffer, tape->flutter_mod_length);
            for (unsigned i = 0; i < tape->flutter_mod_length; ++i)
            {
                temp_buffer[i] = sinf(i * phase_step) / N_FLUTTER_COMPONENTS;
            }
            VectorVectorAdd(tape->flutter_mod, tape->flutter_mod,
                            temp_buffer, tape->flutter_mod_length);
        }
        return NOERR;;
    }
    else
    {
        return NULL_PTR_ERROR;
    }
}