blob: e35e8fb574fa47e2ad06cf57fe6e1f50d30ced68 (
plain) (
tree)
|
|
#ifndef SYNTH_ENGINE_H
#define SYNTH_ENGINE_H
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <portaudio.h>
#include "notes.h"
#include "filter.h"
#define SAMPLE_RATE (44100)
//#define SAMPLE_RATE (48000)
#define FRAMES_PER_BUFFER (210)
#define WIDTH 1024
#define HEIGHT 600
#ifndef M_PI
#define M_PI (3.14159265)
#endif
typedef struct {
float a;
float d;
float s;
float r;
unsigned long long elapsed;
} adsr_t;
typedef struct {
float freq;
PaTime noteOn;
PaTime noteOff;
int key;
unsigned long long elapsed;
} note_t;
typedef struct {
int sample_rate_divider;
} viz_t;
typedef struct {
float freq_offset;
float gain;
float x;
note_t n;
adsr_t adsr;
int octave;
int multi;
int filter;
float cutoff;
float resonance;
int clamp;
float (*gen[4]) (float freq, unsigned long long phase, float x, unsigned int sample_rate);
int geni;
BWLowPass* fff;
viz_t viz;
} synth_t;
float adsr_amplitude(void *synthData, unsigned long long elapsed);
float make_sample(unsigned long long phase, void *synthData, unsigned int sample_rate, int viz);
void init_synth(synth_t * synth);
int sound_gen(const void *inputBuffer, void *outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void *synthData);
#endif /* SYNTH_ENGINE_H */
|