Несколько экземпляров одного и того же инструмента 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)

Другие вопросы по тегам