如何覆盖juce语音的公共成员功能?

问题描述

嗨,我正在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; //???????
               ...

解决方法

您不能执行此操作,因为isVoiceActive不是属性,而是函数,可以将isVoiceActive用作数据成员而不是函数成员,因此可以将其分配为true或false。或者如果要使用函数,则必须添加“&”,以便可以为该函数分配一个值(如果不使用“&”,则您将无法做您想做的事情。 您有2个选择:

1 /将isVoiceActivat用作数据成员,您可以这样:

class SynthesiserVoice
{
public:
    bool isVoiceActive;
};
class SynthVoice :public SynthesiserVoice
{
public:
    oid 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;
            }
     }
};

2 /执行以下操作:

class SynthesiserVoice
{
public:
    bool i = false;
    virtual bool& isVoiceActive() { return i; } // or virtual bool& isVoiceActive()=0;
};
class SynthVoice :public SynthesiserVoice
{
public:
    bool& isVoiceActive()override { return i; }
    void renderNextBlock (AudioBuffer <float> &outputBuffer,int numSamples) override
    {
  for (int sample = startSample; sample < (startSample + numSamples); ++sample)
        {
            float env_value = adsr.getNextSample();
            if(env_value > 0)
               isVoiceActive ()= true;
             }
     }  
};

现在您必须实现此功能以适合您的功能和数据。

希望它清楚且有用

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...