2017-09-25 9 views
2

Je fais un petit outil en C++ en utilisant le framework JUCE. Son envoi MIDI mais j'ai un problème. Je voudrais envoyer des accords à mon DAW, en envoyant une note sur le message suivi d'un message de note off. Le code NOTEON ressemble à ceci:Délai entre le message de note et le message de désactivation dans le cadre JUCE

 void MainContentComponent::handleNoteOn (MidiKeyboardState*, int 
     midiChannel, int midiNoteNumber, float velocity) 
     { 
      timestamp = (Time::getMillisecondCounterHiRes() * 0.001); 
      MidiMessage m (MidiMessage::noteOn (midiChannel, midiNoteNumber , velocity)); 
      MidiMessage m2 (MidiMessage::noteOn (midiChannel, midiNoteNumber + 3, velocity)); 
      MidiMessage m3 (MidiMessage::noteOn (midiChannel, midiNoteNumber + 7, velocity)); 
      m.setTimeStamp (timestamp); 
      m2.setTimeStamp (timestamp); 
      m3.setTimeStamp (timestamp); 
      sendToOutputs (m); 
      sendToOutputs (m2); 
      sendToOutputs (m3); 

      handleNoteOff(midiChannel, midiNoteNumber, velocity) 
     } 

Le problème est que le message note off suit directement après la note sur le message. Je voudrais un délai entre la note sur et le message de note hors. Une idée est sur la façon de faire cela? Je pensais à des options de retard, mais pour autant que je sache, elles vont geler tout le programme. Est-ce que JUCE a quelque chose de construit qui puisse m'aider? Je n'ai pas réussi à le trouver en ligne.

Répondre

3

Tutorial: The MidiMessage class de JUCE montre comment envoyer des messages avec un retard:

La classe MidiBuffer fournit des fonctions pour itérer sur les tampons de messages MIDI en fonction de leurs horodateurs. Pour illustrer cela, nous allons mettre en place un système de planification simple où nous ajoutons MidiMessage objets avec des horodatages spécifiques à un objet MidiBuffer. Ensuite, nous utilisons un objet Timer qui vérifie régulièrement si des messages MIDI doivent être envoyés.

Avertissement

La classe Timer ne convient pas pour la synchronisation de haute précision. Ceci est utilisé pour garder l'exemple simple en gardant tous les appels de fonction sur le thread de message. Pour un timing plus robuste, vous devez utiliser un autre thread (dans la plupart des cas, le thread audio est approprié pour rendre les objets MidiBuffer dans audio).

+0

vous êtes un héros, vous l'avez manqué. Merci beaucoup! – Jurze