Несколько экземпляров одного и того же инструмента VST на хосте воспроизводят одинаковые звуки MIDI

Я сделал инструмент 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
{
...

Я знаю, что это не имеет отношения к уникальному идентификатору.

С уважением, Морган

1

Решение

Проверьте ваши глобальные / статические переменные. Это единственный способ поделиться состоянием между экземплярами (один и тот же dll).

Вы тестировали это с другим хостом / DAW? Может быть ошибка в хосте — хотя не очень вероятно.

Надеюсь, поможет,
Марк

(Автор VST.NET и MIDI.NET)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]