我使用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有什么内置可以帮助我吗?我无法在网上找到它。
答案 0 :(得分:3)
JUCE的Tutorial: The MidiMessage class显示了如何延迟发送消息:
MidiBuffer
类提供基于时间戳迭代MIDI消息缓冲区的函数。为了说明这一点,我们将建立一个简单的调度系统,我们将MidiMessage
具有特定时间戳的对象添加到MidiBuffer
对象。然后我们使用Timer
对象定期检查是否有任何MIDI消息被传递。警告
Timer
类不适合高精度计时。这用于通过在消息线程上保留所有函数调用来使示例保持简单。为了获得更强大的计时,你应该使用另一个线程(在大多数情况下,音频线程适合于将MidiBuffer
个对象渲染到音频中。)