Печать номеров миди-нот в аудиоприложении juce

Я пытаюсь напечатать номера миди-нот на этикетке в аудиоприложении 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;

}

Когда я запускаю это, отображается метка с надписью «midiText», и когда я нажимаю клавишу на миди-клавиатуре, текст исчезает. Любые идеи?


person willfo    schedule 09.11.2015    source источник
comment
Не зная о Juce, setText() может быть лучшим способом установить текст, чем getTextValue().   -  person MikeCAT    schedule 09.11.2015
comment
Когда вы говорите, что текст исчезает, вы имеете в виду весь текст или вместо этого видите только MIDI Message Received?   -  person OMGtechy    schedule 09.11.2015
comment
Полученное MIDI-сообщение выводится только на консоль, поэтому его можно игнорировать (но да, это работает нормально, если это то, о чем вы спрашиваете). Проблема здесь в том, что печатается в окне приложения. Он начинается с midiText, затем при нажатии клавиши должен отображаться номер ноты и т. д. Однако весь текст в окне просто исчезает.   -  person willfo    schedule 09.11.2015


Ответы (1)


Вы создаете новый MidiMessage внутри цикла, а не используете MidiMessage, переданный в обратный вызов. В результате этого midiTest становится пустым, что затем используется для установки вашей метки (поэтому и становится пустым).

Вам нужно изменить сигнатуру вашей функции на:

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

Затем удалите строку:

MidiMessage message;
person OMGtechy    schedule 28.11.2015