Я сделал инструмент VST2.4 на C++, и все работает нормально, но если я загружу свой инструмент в несколько каналов на хосте, все они воспроизводят миди-файлы друг друга. Если я скопирую свою dll и изменю имя копии dll, тогда я смогу загрузить два экземпляра и воспроизвести их отдельно, как и должно быть. Но пока я загружаю несколько одинаковых dll, все они воспроизводят один и тот же миди.
В моей 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
{
...
Я знаю, что это не связано с уникальным идентификатором.
С уважением, Морган