我正在创建一个音频应用程序,它有4个looper轨道和一个带播放按钮的传输栏。我想点击播放按钮同时播放所有4个弯曲。
在我的TranportBarGui类中,在.h文件中,我已经看到了对Looper实例的引用,如你所见:
class TransportBarGui : public Component,
public Button::Listener,
public Timer
{
public:
TransportBarGui(Looper& looperRef_);
~TransportBarGui();
private:
TextButton playButton;
Looper& looperRef; //reference to looper
并且在TransportBarGui.cpp文件中,当按下按钮时,使用looper引用播放looper:
void TransportBarGui::buttonClicked (Button* button)
{
if (button == &playButton)
{
if (looperRef.getPlayState() == 0)
{
looperRef.setPlayState(!looperRef.getPlayState()); //turn on looper
playButton.setButtonText("Stop");
playButton.setToggleState(looperRef.getPlayState(), dontSendNotification);
DBG(looperRef.getPlayState());
}
}
}
我遇到的问题是我已经在audio.h文件中声明了4个Loopers(这是进行音频处理的类),你可以在这里看到:
private:
AudioDeviceManager audioDeviceManager;
Looper looper;
Looper looper2;
Looper looper3;
Looper looper4;
当我按下传输栏上的播放按钮时,它只播放第一个弯针。
有没有办法可以让它玩所有的游戏而不仅仅是第一个?
答案 0 :(得分:1)
你需要让TransportBarGui
知道所有 lolors的存在。最小的改变看起来像是:
class TransportBarGui : public Component,
public Button::Listener,
public Timer
{
public:
TransportBarGui(Looper& l1_, Looper& l2_, Looper& l3_, Looper& l4_);
~TransportBarGui();
private:
TextButton playButton;
Looper& looperRef1; //reference to looper
Looper& looperRef2;
Looper& looperRef3;
Looper& looperRef4;
然后,您重复所有四个弯曲者的现有逻辑。但这有点令人讨厌 - 那里有很多重复。 (特别是如果你想在某个时候添加第五个弯针。)
我切换到指向loopers的指针向量:
class TransportBarGui : public Component,
public Button::Listener,
public Timer
{
public:
TransportBarGui(const std::vector<Looper*>& loopers_);
~TransportBarGui();
private:
TextButton playButton;
const std::vector<Looper*>& loopers; // The loopers we care about.
然后播放按钮看起来像:
void TransportBarGui::buttonClicked (Button* button)
{
if (button == &playButton)
{
for (const auto pLooper : loopers)
{
auto& looperRef = *pLooper;
if (looperRef.getPlayState() == 0)
{
looperRef.setPlayState(1); //turn on looper
DBG(looperRef.getPlayState());
playButton.setToggleState(looperRef.getPlayState(), dontSendNotification);
}
playButton.setButtonText("Stop");
}
}
这有点俗气,因为它将playButton切换状态设置了四次 - 但是你想要考虑如何处理一些loopers开始的情况,有些人不会。