Skip to content

Envelope timings incorrect #185

Description

@fhoenig

Looks like attack is in seconds but decay and release are off by a factor of ~5 w.r.t. them being seconds.
Is this a know issue / intended?

#include <daisysp.h>
#include <chrono>
#include <thread>
 

daisysp::Oscillator osc;
daisysp::Metro      tick;
daisysp::Adsr       env;
bool gate = false;

void testaudio(void *userData, Uint8 *buffer, int length)
{
    memset(buffer, 0, length);
    int numToWrite = length / (sizeof(float) * 2);
    float *sampleBuffer = (float*)buffer;
    float osc_out, env_out;
    for (int sample = 0; sample < numToWrite; sample++)
    {
        // When the metro ticks, trigger the envelope to start.
        //if (tick.Process())
        //{
        //    gate = !gate;
        //}

        // Use envelope to control the amplitude of the oscillator.
        env_out = env.Process(true);
        osc.SetAmp(env_out);
        osc_out = osc.Process();


        *sampleBuffer++ = osc_out; // Left channel value
        *sampleBuffer++ = osc_out; // Right channel value
    }
}

int main(int argc, char* argv[])
{
    SDL_Init(SDL_INIT_AUDIO);
    SDL_AudioSpec requested = {};
    requested.freq = 48000;
    requested.samples = 2048;
    requested.format = AUDIO_F32;
    requested.channels = 2;
    requested.callback = testaudio;

    SDL_AudioSpec obtained = {};
    int deviceId = SDL_OpenAudioDevice(nullptr, 0, &requested, &obtained, 0);
    
    osc.Init(obtained.freq);
    osc.SetFreq(440);
    tick.Init(1.0f, obtained.freq);
    env.Init(obtained.freq);
    env.SetTime(daisysp::ADSR_SEG_ATTACK, 0.0);
    env.SetTime(daisysp::ADSR_SEG_DECAY, 1.0);
    env.SetTime(daisysp::ADSR_SEG_RELEASE, 1.0);
    env.SetSustainLevel(0);
    
    SDL_PauseAudioDevice(deviceId, false);
    while (true)
    {
        std::this_thread::sleep_for(std::chrono::microseconds(100));
    }
    return 0;
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions