Привет, я кодирую синтезатор в рамках Juce.
Когда мой adsr работает, мне нужно переопределить isVoiceActive() и установить для него значение true внутри голоса. Это общедоступная функция-член класса SynthesiserVoice.
virtual bool SynthesiserVoice::isVoiceActive ( ) const
Возвращает true, если этот голос в настоящее время занят воспроизведением звука.
По умолчанию это просто проверяет значение getCurrentlyPlayingNote(), но его можно переопределить для более сложной проверки.
Итак, в голосе у меня есть еще одна функция-член virtual void renderNextBlock()
, и внутри нее я хочу переопределить isVoiceActive.
class SynthVoice : public SynthesiserVoice
{
public:
void renderNextBlock (AudioBuffer <float> &outputBuffer, int startSample, int numSamples) override
{
for (int sample = startSample; sample < (startSample + numSamples); ++sample)
{
float env_value = adsr.getNextSample();
if(env_value > 0)
isVoiceActive = true; //???????
...