Я сделал инструмент VST2.4 на C ++, и все работает нормально, но если я загружаю свой инструмент по нескольким каналам на хосте, они все воспроизводят миди-файлы друг друга. Если я скопирую свою dll и поменяю имя копии dll, то я могу загрузить два экземпляра и воспроизвести их отдельно, как они должны. Но пока я загружаю несколько одинаковых dll, все они играют в одном и том же миди.
В моей dll при обработке событий midi я игнорирую каналы и просто обрабатываю заметки, и это единственная часть моего кода, о которой я могу думать, это может быть причиной. Есть ли что-то, что мне нужно знать, чтобы заставить его работать с несколькими экземплярами одного и того же инструмента 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
{
...
Я знаю, что это не имеет отношения к уникальному идентификатору.
С уважением, Морган
Проверьте ваши глобальные / статические переменные. Это единственный способ поделиться состоянием между экземплярами (один и тот же dll).
Вы тестировали это с другим хостом / DAW? Может быть ошибка в хосте — хотя не очень вероятно.
Надеюсь, поможет,
Марк
(Автор VST.NET и MIDI.NET)
Других решений пока нет …