Я пытаюсь выучить C ++ у Джуса и создаю звуковой синтезатор.
У меня есть синтезатор, который может выводить звук из класса генератора (MaxiOsc
) вкратце так:
class SynthVoice : public SynthesiserVoice
{
private:
MaxiOsc testOsc;
double frequency = 0; // frequency is then changed by another function by new notes from the keyboard of course ...
public:
double oscOutput()
{
return testOsc.sinewave(frequency);
}
void renderNextBlock (AudioBuffer <float> &outputBuffer, int startSample, int numSamples) override
{
for (int sample = 0; sample < numSamples; ++sample)
{
for (int channel = 0; channel < outputBuffer.getNumChannels(); ++channel)
{
outputBuffer.addSample(channel, startSample, oscOutput() //MAIN OUTPUT HERE
}
++startSample;
}
}
Я пытаюсь создать новый класс с именем ModalUnit
, который наследуется от MaxiOsc
и создает в нем объект MaxiOsc
.Идея состоит в том, чтобы использовать ModalUnit
вместо MaxiOsc
в приведенном выше коде синтезатора и в конечном итоге добавить дополнительную обработку к коду класса ModalUnit
.
Вот что я имею для класса ModalUnit
:
class ModalUnit : public MaxiOsc
{
public:
ModalUnit()
{
}
double getOutput(double frequency)
{
output = testOsc.sinewave(frequency);
return output;
}
private:
MaxiOsc testOsc;
double output = 0.0;
};
Но когда я пытаюсь реализовать это в коде синтезатора, он не выводит никакого звука:
class SynthVoice : public SynthesiserVoice
{
private:
ModalUnit testModalUnit;
double frequency = 0; // frequency is then changed by another function by new notes from the keyboard of course ...
public:
double modalUnitOutput()
{
return testModalUnit.getOutput(frequency);
}
void renderNextBlock (AudioBuffer <float> &outputBuffer, int startSample, int numSamples) override
{
for (int sample = 0; sample < numSamples; ++sample)
{
for (int channel = 0; channel < outputBuffer.getNumChannels(); ++channel)
{
outputBuffer.addSample(channel, startSample, modalUnitOutput() //MAIN OUTPUT HERE
}
++startSample;
}
}
Что я делаю не так в создании нового класса?Я просто хочу, чтобы класс ModalUnit
создал внутри него MaxiOsc
, а затем начал выводить его.
Как мне это сделать или исправить?Спасибо.