mirror of
https://github.com/radio95-rnt/fm95.git
synced 2026-02-27 03:23:54 +01:00
nug fixes and small tweaks
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#ifndef PI
|
||||
#define PI 3.14159265358979323846
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
#ifndef M_2PI
|
||||
#define M_2PI (3.14159265358979323846 * 2.0)
|
||||
#define M_2PI (M_PI * 2.0)
|
||||
#endif
|
||||
@@ -25,11 +25,11 @@ void init_lpf(FrequencyFilter* filter, float cutoffFreq, float sampleRate) {
|
||||
float m = n - (FILTER_TAPS - 1.0f) / 2.0f;
|
||||
|
||||
// Sinc function
|
||||
float sinc = (m == 0) ? 1.0f : sinf(PI * m * fc) / (PI * m);
|
||||
float sinc = (m == 0) ? 1.0f : sinf(M_PI * m * fc) / (M_PI * m);
|
||||
|
||||
// Blackman window
|
||||
float window = 0.42f - 0.5f * cosf(2.0f * PI * n / (FILTER_TAPS - 1))
|
||||
+ 0.08f * cosf(4.0f * PI * n / (FILTER_TAPS - 1));
|
||||
float window = 0.42f - 0.5f * cosf(2.0f * M_PI * n / (FILTER_TAPS - 1))
|
||||
+ 0.08f * cosf(4.0f * M_PI * n / (FILTER_TAPS - 1));
|
||||
|
||||
filter->coeffs[n] = sinc * window;
|
||||
}
|
||||
@@ -53,11 +53,11 @@ void init_hpf(FrequencyFilter* filter, float cutoffFreq, float sampleRate) {
|
||||
float m = n - (FILTER_TAPS - 1.0f) / 2.0f;
|
||||
|
||||
// Sinc function
|
||||
float sinc = (m == 0) ? -1.0f : sinf(PI * m * fc) / (PI * m);
|
||||
float sinc = (m == 0) ? 1.0f : -sinf(M_PI * m * fc) / (M_PI * m);
|
||||
|
||||
// Blackman window
|
||||
float window = 0.42f - 0.5f * cosf(2.0f * PI * n / (FILTER_TAPS - 1))
|
||||
+ 0.08f * cosf(4.0f * PI * n / (FILTER_TAPS - 1));
|
||||
float window = 0.42f - 0.5f * cosf(2.0f * M_PI * n / (FILTER_TAPS - 1))
|
||||
+ 0.08f * cosf(4.0f * M_PI * n / (FILTER_TAPS - 1));
|
||||
|
||||
filter->coeffs[n] = sinc * window;
|
||||
}
|
||||
@@ -148,4 +148,5 @@ float delay_line(DelayLine *delay_line, float in) {
|
||||
|
||||
void exit_delay_line(DelayLine *delay_line) {
|
||||
free(delay_line->buffer);
|
||||
delay_line->buffer = NULL;
|
||||
}
|
||||
@@ -8,6 +8,7 @@ void init_fm_modulator(FMModulator *fm, float frequency, float deviation, float
|
||||
|
||||
float modulate_fm(FMModulator *fm, float sample) {
|
||||
float inst_freq = fm->frequency+(sample*fm->deviation);
|
||||
if (inst_freq < 0.0f) inst_freq = 0.0f;
|
||||
change_oscillator_frequency(&fm->osc, inst_freq);
|
||||
return get_oscillator_sin_sample(&fm->osc);
|
||||
}
|
||||
@@ -6,7 +6,7 @@ void compute_hilbert_coeffs(float* coeffs, int taps) {
|
||||
if ((i - mid) % 2 == 0) {
|
||||
coeffs[i] = 0.0f;
|
||||
} else {
|
||||
coeffs[i] = 2.0f / (PI * (i - mid));
|
||||
coeffs[i] = 2.0f / (M_PI * (i - mid));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,25 +12,23 @@ void change_oscillator_frequency(Oscillator *osc, float frequency) {
|
||||
|
||||
float get_oscillator_sin_sample(Oscillator *osc) {
|
||||
float sample = sinf(osc->phase);
|
||||
osc->phase += osc->phase_increment;
|
||||
if (osc->phase >= M_2PI) {
|
||||
osc->phase -= M_2PI;
|
||||
}
|
||||
advance_oscillator(osc);
|
||||
return sample;
|
||||
}
|
||||
|
||||
float get_oscillator_cos_sample(Oscillator *osc) {
|
||||
float sample = cosf(osc->phase);
|
||||
osc->phase += osc->phase_increment;
|
||||
if (osc->phase >= M_2PI) {
|
||||
osc->phase -= M_2PI;
|
||||
}
|
||||
advance_oscillator(osc);
|
||||
return sample;
|
||||
}
|
||||
|
||||
float get_oscillator_sin_multiplier_ni(Oscillator *osc, float multiplier) {
|
||||
float get_oscillator_sin_multiplier_ni(Oscillator *osc, float multiplier) { // ni = No Increment
|
||||
return sinf(osc->phase*multiplier);
|
||||
}
|
||||
float get_oscillator_cos_multiplier_ni(Oscillator *osc, float multiplier) {
|
||||
return cosf(osc->phase*multiplier);
|
||||
}
|
||||
|
||||
void advance_oscillator(Oscillator *osc) {
|
||||
osc->phase = fmodf(osc->phase + osc->phase_increment, M_2PI);
|
||||
}
|
||||
@@ -14,4 +14,5 @@ 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);
|
||||
float get_oscillator_cos_multiplier_ni(Oscillator *osc, float multiplier);
|
||||
void advance_oscillator(Oscillator *osc);
|
||||
Reference in New Issue
Block a user