2015-11-09 1 views
4

J'essaie d'imprimer des numéros de note MIDI dans une étiquette d'une application audio Juce lorsqu'ils sont enfoncés. Voici le code que j'ai actuellement:Impression de numéros de note MIDI dans l'application audio juce

dans le fichier d'en-tête de 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; 
}; 

Dans le constructer 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); 
} 

et enfin dans la fonction 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; 

} 

Quand je lance ceci, une étiquette disant "midiText" est visible, et quand j'appuie sur ak ey sur le clavier midi, le texte disparait. Des idées?

+2

Ne sachant pas à propos Juce, [ 'setText()'] (http: // apprendre. juce.com/doc/classLabel.php#a3f0ca22cb63e924d3db23da48c210790) peut être un meilleur moyen de définir le texte que 'getTextValue()'. – MikeCAT

+0

Quand vous dites que le texte disparaît, voulez-vous dire tout ou vous voyez simplement 'MIDI Message Received' à la place? – OMGtechy

+0

Le message MIDI reçu ne s'imprime que sur la console, ce qui peut être ignoré (mais oui cela fonctionne bien, si c'est ce que vous demandez.) Le problème ici est ce qui est imprimé sur la fenêtre de l'application. Il commence par "midiText", puis quand une touche est pressée, le numéro de note etc. doit être affiché. Cependant tout le texte dans la fenêtre disparaît juste. – willfo

Répondre

3

Vous créez un nouveau MidiMessage à l'intérieur de la boucle, plutôt que d'utiliser le MidiMessage passé dans le rappel. À la suite de cela, midiTest est vide, ce qui est ensuite utilisé pour définir votre étiquette (d'où la raison pour laquelle il devient vide).

Vous devez changer votre signature de fonction:

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

Retirez ensuite la ligne:

MidiMessage message;