#ifndef config_HEADER_ #define config_HEADER_ #include #include "const.h" #include "sample.h" #include "soundconfig.h" // Playing sample states. #define PS_ON 0 // Undamped. #define PS_OFF 1 // Damped because key off and sustain off. #define PS_CUT 2 // Damped because cut by other key. typedef struct { Sample *sample; int state; int idx; double amp; double tau; } PlayingSample; typedef struct { // Configuration SoundConfig conf; // Whether or not the key is depressed. bool key_down; // Samples uint8_t num_layers; uint8_t num_vars[MAX_LAYERS]; uint8_t rr_idx[MAX_LAYERS]; Sample samples[MAX_LAYERS][MAX_VARS]; // Playing samples int32_t buf_size; int32_t num_free; PlayingSample *ps_free[MAX_PLAYING]; float *amp_buf; int32_t num_playing; PlayingSample *ps_playing[MAX_PLAYING]; } Sound; void sound_init(Sound *sound); void sound_load_samples(Sound *sound, int32_t buf_size); void sound_trigger(Sound *sound, double velocity); void sound_cut(Sound *sound); void sound_write_buffer(Sound *sound, float *L, float *R); void sound_free(Sound *sound); #endif