我正在尝试将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键盘上的键时,文本消失。有什么想法吗?
答案 0 :(得分:3)
您在循环中创建新的MidiMessage
,而不是使用传递给回调的MidiMessage
。因此,midiTest
为空,然后用于设置标签(因此它变为空白)。
您需要将功能签名更改为:
void MainComponent::handleIncomingMidiMessage(MidiInput*, const MidiMessage& message)
然后删除该行:
MidiMessage message;