Как определить и установить указатель на двумерный массив, который дважды передается в среднем классе - PullRequest
0 голосов
/ 01 августа 2020

У меня есть массив в моем MainProcessor

float waveforms[2][1080] = { {0}, {0} };

И я передаю его SynthVoice вот так:

osc1Voice->setWavetable(waveforms, 0); //[1]
osc2Voice->setWavetable(waveforms, 1);

Там я читал это вот так в SynthVoice.h:

typedef float array_of_wavetable[1080];
void setWavetable(array_of_wavetable* waveform, int number)
    {
      wavetable = waveform;
      id = number;

}

, поэтому я могу использовать его вот так в моем классе SynthVoice:

wavetable[id][first_sample + int(phase_0)]

Теперь я переместил [1] в новый класс (OscilatorProcessor.h) и хочу установить указатель из MainProcessor -> OscillatorProcessor -> SynthVoice таким образом, чтобы я мог использовать его как wavetable [id] [phase].

Теперь я не знаю, как передать его из моего MainProcessor в OscillatorProcessor в середина. Так что я могу прочитать это таким же образом в классе SynthVoice.

Надеюсь, это имело смысл. Спасибо за ваше время

редактировать: минимальный воспроизводимый пример

#include <iostream>

typedef float array_of_wavetable[1080];

class SynthVoice
{
public:
  void setWavetable(array_of_wavetable* waveform, int number)
  {
    wavetable = waveform;
    id = number;
  }

  void outputWavetable()
  {
    for(int i = 0; i < 1080; i++)
    {
      std::cout << wavetable[id][i];
    }
  }

private:
  array_of_wavetable * wavetable;
  int id;
};

class OscillatorProcessor
{
public:

  void setWavetable(array_of_wavetable * waveform, int number)
  {
    wavetable = waveform;
    id = number;
  }

  void sendWaveToVoice()
  {
    SynthVoice voice;
    voice.setWavetable(wavetable, id);
    voice.outputWavetable();
  }

private:
  array_of_wavetable * wavetable;
  int id;
};

int main() {
  float waveform_templates[4][1080] = { {0}, {0}, {0}, {0} };

  OscillatorProcessor oscillator;
  oscillator.setWavetable(waveform_templates, 2);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...