2011-05-26 3 views
6

Я хочу создать инструмент VST, который имеет 16 MIDI-входов и не менее 16 аудиовыходов. Подобно тому, как это делают kontakt или halion.VST инструмент многократный вход и выход

Любые идеи?

+1

Но у вас уже есть опыт работы с vst-программированием? Я нахожу удивительным, что 16 каналов должны быть более сложными для реализации, чем 2, это не тот случай, когда вы создаете vst-плагины с таким программным обеспечением, как SynthMaker (что является единственным способом, который я сделал до сих пор). Там вы можете просто добавить произвольное количество входов и выходов. – leftaroundabout

+0

Некоторые опыты, я использовал синтезатор раньше. Но мой новый проект должен быть на C++. –

+2

Другое дело: вам действительно нужны 16 MIDI-входов или всего 16 MIDI _channels_ (это номер, предлагаемый любым MIDI-соединением)? – leftaroundabout

ответ

4

Как отметил @leftaroundabout, маловероятно, что вам нужны 16 входов и выходов, особенно для инструмента. Тем не менее, наличие 16 MIDI-входов и 16 аудиовыходов очень распространено для ударных машин и других многодорожечных инструментов, где пользователь может захотеть обрабатывать каждый голос индивидуально. Аудиовходы вообще не особенно полезны для инструментов в целом.

Тем не менее, вы просто создать экземпляр плагин следующим образом:

MyPlugin::MyPlugin(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, 0, kNumParameters) { 
    if(audioMaster) { 
    setNumInputs(0); 
    setNumOutputs(16); 
    } 
    // other constructor stuff ... 
} 

Это ваша отправная точка. Однако, поскольку подавляющее большинство плагинов - только стерео, есть еще одна работа, которую вам нужно будет сделать, чтобы хост предоставил вам 16 выходных каналов (при условии, что он поддерживает их). Скорее всего, вам нужно будет позвонить getSpeakerArrangement() и setSpeakerArrangement() в некоторый момент, а также переопределить getOutputProperties().

Что касается MIDI-каналов, хост не должен относиться к ним иначе, чем обычно. Вы будете получать обычные MIDI-события в виде VstMidiEvent s, которые будут содержать обычные MIDI-данные (т. Е. Для всех 16 каналов, если пользователь так захочет). Это легкая часть - это настройка выходных данных, это трюк.

+0

Я предполагаю, что вы знаете, как работает Kontakt. Как настроить мой vst так, чтобы каждый MIDI-канал мог быть отправлен на другой канал внутри vst? –

+2

Все события midi отправляются вместе. Вручную отделяйте входящие midi-события в соответствии с номером канала. – Shannon

+1

Что @Shannon сказал. ;) В основном, вы берете нижний полубайт из байт статуса, чтобы получить канал и отправить его соответствующему голосу. Как вы обрабатываете 16 каналов, это часть внутреннего дизайна вашего плагина и не имеет ничего общего с базой VST в целом. –