在JUCE框架中{midy note on和note off消息之间的延迟

时间:2017-09-25 22:52:46

标签: c++ midi juce

我使用JUCE框架在C ++中创建一个小工具。 它发出MIDI但我遇到了问题。 我想向我的DAW发送和弦,通过发送留言信息,然后发出留言信息。 noteOn代码如下所示:

        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)
        }

问题是,音符关闭消息紧跟在消息上的注释之后。我想在音符和音符关闭消息之间延迟。 有什么想法如何做到这一点?我在考虑延迟选项,但据我所知他们会冻结整个程序。 JUCE有什么内置可以帮助我吗?我无法在网上找到它。

1 个答案:

答案 0 :(得分:3)

JUCE的Tutorial: The MidiMessage class显示了如何延迟发送消息:

  

MidiBuffer类提供基于时间戳迭代MIDI消息缓冲区的函数。为了说明这一点,我们将建立一个简单的调度系统,我们将MidiMessage具有特定时间戳的对象添加到MidiBuffer对象。然后我们使用Timer对象定期检查是否有任何MIDI消息被传递。

     

警告

     
    

Timer类不适合高精度计时。这用于通过在消息线程上保留所有函数调用来使示例保持简单。为了获得更强大的计时,你应该使用另一个线程(在大多数情况下,音频线程适合于将MidiBuffer个对象渲染到音频中。)