2015-11-09 5 views
4

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

} 

Когда я запускаю это, отображается надпись «midiText», и когда я нажимаю ak ey на midi клавиатуре, текст исчезает. Есть идеи?

+2

Не зная о Juce, [ 'SetText()'] (Http: // учиться. juce.com/doc/classLabel.php#a3f0ca22cb63e924d3db23da48c210790) может быть лучшим способом установить текст, чем 'getTextValue()'. – MikeCAT

+0

Когда вы говорите, что текст исчезает, вы имеете в виду все это, или просто видите вместо этого «Сообщение MIDI»? – OMGtechy

+0

Полученное MIDI-сообщение выводится только на консоль, поэтому его можно игнорировать (но да, это нормально, если это то, о чем вы просите.) Проблема здесь в том, что печатается в окне приложения. Он начинается с «midiText», затем, когда нажата клавиша, должен отображаться номер ноты и т. Д. Однако весь текст в окне просто исчезает. – willfo

ответ

3

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

Вы должны изменить функцию подписи:

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

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

MidiMessage message; 

 Смежные вопросы

  • Нет связанных вопросов^_^