mirror of
https://github.com/radio95-rnt/fm95.git
synced 2026-02-26 19:23:51 +01:00
move constants.h and the oscillator into libfm from libfmdsp
This commit is contained in:
7
lib/constants.h
Normal file
7
lib/constants.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
#ifndef M_2PI
|
||||
#define M_2PI (M_PI * 2.0)
|
||||
#endif
|
||||
40
lib/oscillator.c
Normal file
40
lib/oscillator.c
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "oscillator.h"
|
||||
|
||||
void init_oscillator(Oscillator *osc, float frequency, float sample_rate) {
|
||||
osc->phase = 0.0f;
|
||||
osc->phase_increment = (M_2PI * frequency) / sample_rate;
|
||||
osc->sample_rate = sample_rate;
|
||||
}
|
||||
|
||||
inline void change_oscillator_frequency(Oscillator *osc, float frequency) {
|
||||
osc->phase_increment = (M_2PI * frequency) / osc->sample_rate;
|
||||
}
|
||||
|
||||
float get_oscillator_sin_sample(Oscillator *osc) {
|
||||
float sample = sinf(osc->phase);
|
||||
advance_oscillator(osc);
|
||||
return sample;
|
||||
}
|
||||
|
||||
float get_oscillator_cos_sample(Oscillator *osc) {
|
||||
float sample = cosf(osc->phase);
|
||||
advance_oscillator(osc);
|
||||
return sample;
|
||||
}
|
||||
|
||||
float get_oscillator_sin_multiplier_ni(Oscillator *osc, float multiplier) {
|
||||
float new_phase = osc->phase * multiplier;
|
||||
new_phase -= (new_phase >= M_2PI) ? M_2PI : 0.0f;
|
||||
return sinf(new_phase);
|
||||
}
|
||||
|
||||
float get_oscillator_cos_multiplier_ni(Oscillator *osc, float multiplier) {
|
||||
float new_phase = osc->phase * multiplier;
|
||||
new_phase -= (new_phase >= M_2PI) ? M_2PI : 0.0f;
|
||||
return cosf(new_phase);
|
||||
}
|
||||
|
||||
inline void advance_oscillator(Oscillator *osc) {
|
||||
osc->phase += osc->phase_increment;
|
||||
if (osc->phase >= M_2PI) osc->phase -= M_2PI;
|
||||
}
|
||||
18
lib/oscillator.h
Normal file
18
lib/oscillator.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "constants.h"
|
||||
#include <math.h>
|
||||
|
||||
typedef struct {
|
||||
float phase;
|
||||
float phase_increment;
|
||||
float sample_rate;
|
||||
} Oscillator;
|
||||
|
||||
void init_oscillator(Oscillator *osc, float frequency, float sample_rate);
|
||||
void change_oscillator_frequency(Oscillator *osc, float frequency);
|
||||
float get_oscillator_sin_sample(Oscillator *osc);
|
||||
float get_oscillator_cos_sample(Oscillator *osc);
|
||||
float get_oscillator_sin_multiplier_ni(Oscillator *osc, float multiplier);
|
||||
float get_oscillator_cos_multiplier_ni(Oscillator *osc, float multiplier);
|
||||
void advance_oscillator(Oscillator *osc);
|
||||
Reference in New Issue
Block a user