fix: oscillator
This commit is contained in:
@@ -2,11 +2,11 @@
|
|||||||
#include<vector>
|
#include<vector>
|
||||||
#include "OscillatorType.h"
|
#include "OscillatorType.h"
|
||||||
|
|
||||||
typedef float (Oscillator::*OscFunction)(void);
|
|
||||||
typedef float (Oscillator::*DtFunction)(float);
|
|
||||||
|
|
||||||
class Oscillator
|
class Oscillator
|
||||||
{
|
{
|
||||||
|
//typedef float (Oscillator::*OscFunction)(void);
|
||||||
|
//typedef float (Oscillator::*DtFunction)(float);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OscillatorType m_osc;
|
OscillatorType m_osc;
|
||||||
@@ -14,8 +14,9 @@ class Oscillator
|
|||||||
float m_volume;
|
float m_volume;
|
||||||
float m_phase;
|
float m_phase;
|
||||||
float m_phase_dt;
|
float m_phase_dt;
|
||||||
OscFunction m_osc_function;
|
//значение типа "float (Oscillator::*)()" нельзя присвоить сущности типа "float (*)()"
|
||||||
DtFunction m_dt_function;
|
float (Oscillator::*m_osc_function)(void);
|
||||||
|
float (Oscillator::*m_dt_function)(float freq);
|
||||||
void sine_osc_phase_incr();
|
void sine_osc_phase_incr();
|
||||||
void saw_osc_phase_incr();
|
void saw_osc_phase_incr();
|
||||||
float calc_saw_phase_delta(float freq);
|
float calc_saw_phase_delta(float freq);
|
||||||
|
|||||||
@@ -26,20 +26,20 @@ void Oscillator::SetType(OscillatorType osc)
|
|||||||
m_osc = osc;
|
m_osc = osc;
|
||||||
switch (m_osc) {
|
switch (m_osc) {
|
||||||
case Sine:
|
case Sine:
|
||||||
m_osc_function = &sineosc;
|
m_osc_function = &Oscillator::sineosc;
|
||||||
m_dt_function = &calc_sine_phase_delta;
|
m_dt_function = &Oscillator::calc_sine_phase_delta;
|
||||||
break;
|
break;
|
||||||
case Triangle:
|
case Triangle:
|
||||||
m_osc_function = &triangleosc;
|
m_osc_function = &Oscillator::triangleosc;
|
||||||
m_dt_function = &calc_saw_phase_delta;
|
m_dt_function = &Oscillator::calc_saw_phase_delta;
|
||||||
break;
|
break;
|
||||||
case Square:
|
case Square:
|
||||||
m_osc_function = &squareosc;
|
m_osc_function = &Oscillator::squareosc;
|
||||||
m_dt_function = &calc_sine_phase_delta;
|
m_dt_function = &Oscillator::calc_sine_phase_delta;
|
||||||
break;
|
break;
|
||||||
case Saw:
|
case Saw:
|
||||||
m_osc_function = &sawosc;
|
m_osc_function = &Oscillator::sawosc;
|
||||||
m_dt_function = &calc_saw_phase_delta;
|
m_dt_function = &Oscillator::calc_saw_phase_delta;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -48,12 +48,12 @@ void Oscillator::SetFreq(float freq)
|
|||||||
{
|
{
|
||||||
m_freq = freq;
|
m_freq = freq;
|
||||||
m_phase = 0;
|
m_phase = 0;
|
||||||
m_phase_dt = m_dt_function(freq);
|
m_phase_dt = (this->*m_dt_function)(freq);
|
||||||
}
|
}
|
||||||
|
|
||||||
float Oscillator::GenerateSample(float duration)
|
float Oscillator::GenerateSample(float duration)
|
||||||
{
|
{
|
||||||
return m_osc_function() * m_volume;
|
return (this->*m_osc_function)() * m_volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Oscillator::sine_osc_phase_incr()
|
void Oscillator::sine_osc_phase_incr()
|
||||||
|
|||||||
Reference in New Issue
Block a user