主机中同一VST乐器的多个实例播放相同的MIDI声音

时间:2013-09-15 08:00:21

标签: c++ multiple-instances vst midi-instrument

我用C ++制作了一台VST2.4乐器,一切正常,但是如果我将乐器加载到主机的几个通道中,它们都会播放midi文件。如果我复制我的DLL并更改dll副本的名称,那么我可以加载两个实例并按照它们应该单独播放它们。但只要加载多个相同的dll,它们就会播放相同的midi。

在我处理midi事件的dll中,我忽略了通道而我只是处理笔记,而这是我能想到的代码中唯一可能导致这种情况的部分。是否有一些我需要知道的东西才能使它与同一个VST仪器的多个实例一起工作?

我正在使用的midi事件函数来自VST.SDK V2.4附带的合成示例

for (VstInt32 i = 0; i < ev->numEvents; i++)
{
if ((ev->events[i])->type != kVstMidiType)
 continue;

VstMidiEvent* event = (VstMidiEvent*)ev->events[i];
char* midiData = event->midiData;
VstInt32 status = midiData[0] & 0xf0;   // ignoring channel
if (status == 0x90 || status == 0x80)   // we only look at notes
{
  ...

我知道它与唯一ID无关。

问候,摩根

1 个答案:

答案 0 :(得分:2)

检查全局/静态变量。这是您可以在实例之间共享状态的唯一方法(相同的dll)。

您是否使用其他主机/ DAW进行测试?可能是主持人的错误 - 尽管不太可能。

希望它有所帮助, 马克

(VST.NET和MIDI.NET的作者)