在juce音频应用程序中打印midi音符编号

时间:2015-11-09 13:39:25

标签: c++ midi juce

我正在尝试将midi音符编号打印到Juce音频应用程序中的标签,因为它们被按下了。这是我目前的代码:

MainComponent头文件中的

class MainComponent   : public Component,
                        public MidiInputCallback

{
public:
    //==============================================================================
    MainComponent();
    ~MainComponent();

    void resized() override;
    void handleIncomingMidiMessage (MidiInput*, const MidiMessage&);


private:
    //==============================================================================
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
    AudioDeviceManager audioDeviceManager;
    Label midiLabel;
};

在MainComponent.cpp构造函数中:

MainComponent::MainComponent()
{
    setSize (500, 400);

    audioDeviceManager.setMidiInputEnabled("USB Axiom 49 Port 1", true);
    audioDeviceManager.addMidiInputCallback (String::empty, this);

    //midiLabel
    midiLabel.setText("midiText", sendNotification);
    addAndMakeVisible(midiLabel);
}

最后在handleIncomingMidiMessage函数中:

void MainComponent::handleIncomingMidiMessage(MidiInput*, const MidiMessage&)
{
    DBG("MIDI Message Recieved\n");


    //display label text
    String midiText;
    MidiMessage message;
    if (message.isNoteOnOrOff()) {
        midiText << "NoteOn: Channel " << message.getChannel();
        midiText << ":Number" << message.getNoteNumber();
        midiText << ":Velocity" << message.getVelocity();
    }
    midiLabel.getTextValue() = midiText;

}

当我运行此标签时,标签上写着&#34; midiText&#34;是可见的,当我按下midi键盘上的键时,文本消失。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您在循环中创建新的MidiMessage,而不是使用传递给回调的MidiMessage。因此,midiTest为空,然后用于设置标签(因此它变为空白)。

您需要将功能签名更改为:

void MainComponent::handleIncomingMidiMessage(MidiInput*, const MidiMessage& message)

然后删除该行:

MidiMessage message;