Exemplo n.º 1
0
float const* patch_mod_id_to_pointer(int id, Patch* p, PatchVoice* v)
{
    switch(id)
    {
    case MOD_SRC_NONE:      return NULL;
    case MOD_SRC_ONE:       return &one;
    case MOD_SRC_VELOCITY:  return (v) ? &v->vel :          NULL;
    case MOD_SRC_KEY:       return (v) ? &v->key_track :    NULL;
    case MOD_SRC_PITCH_WHEEL:
        return &((*cc_arr)[p->channel][0]);
    }

    if ((id & MOD_SRC_EG) && v)
    {
        id &= ~MOD_SRC_EG;

        if (id < VOICE_MAX_ENVS)
            return adsr_output(v->env[id]);
    }

    if ((id & MOD_SRC_VLFO) && v)
    {
        id &= ~MOD_SRC_VLFO;

        if (id < VOICE_MAX_LFOS)
            return lfo_output(v->lfo[id]);
    }

    if (id & MOD_SRC_GLFO)
    {
        id &= ~MOD_SRC_GLFO;

        if (id < PATCH_MAX_LFOS)
            return lfo_output(p->glfo[id]);
    }

    if (id & MOD_SRC_MIDI_CC)
    {
        id &= ~MOD_SRC_MIDI_CC;
        return &((*cc_arr)[p->channel][id + 1]);
    }

    debug("unknown modulation source:%d\n", id);

    return 0;
}
Exemplo n.º 2
0
int sample_default(Sample* sample, int rate)
{
    int         frames = rate / 8;
    float*      tmp;
    LFO*        lfo;
    LFOParams   lfopar;
    int         i;
    double      v;

    float const*    lfo_out;

    debug("Creating default sample\n");

    if (!(tmp = malloc(frames * 2 * sizeof(*tmp))))
    {
        pf_error(PF_ERR_SAMPLE_DEFAULT_ALLOC);
        return -1;
    }

    sample->frames = frames;
    sample->sp = tmp;

    lfo = lfo_new();
    lfo_init(lfo);
    lfo_params_init(&lfopar, 523.251, LFO_SHAPE_SAW);
    lfo_trigger(lfo, &lfopar);

    lfo_out = lfo_output(lfo);

    for (i = 0; i < frames; ++i)
    {
        lfo_tick(lfo);

        v = *lfo_out * 0.9;

        *tmp++ = v;
        *tmp++ = v;
    }

    lfo_free(lfo);

    sample->filename = strdup("Default");
    sample->default_sample = true;

    return 0;
}