Как отправить события Midi в Software Synth на C ++ - PullRequest
4 голосов
/ 31 августа 2011

Привет, ищу несколько советов. Я пишу программное обеспечение для музыкальной композиции. Я собрал воедино инструменты для чтения, записи и отправки MIDI-данных, они отлично работают. Однако я поставил в тупик следующее: я пытаюсь отправить миди-события на синтезатор SW на компьютере.

Так что я могу управлять синтезатором SW с внешней клавиатуры. Я могу управлять клавиатурой со своего компьютера в компьютере. Но как мне заставить моего sw отправлять миди на sw synth на том же компьютере.

Также я пытаюсь сделать это независимо от платформы, если это возможно.

Спасибо!

VMan


Мой вопрос не был ясен.

Так что я сейчас работаю на Win7. Кроссплатформенность является приоритетом, но не для первого прототипа.

В частности, моя проблема с доступом к kontakt player (v2), он работает в своей среде и с midi IO. Но я не могу получить к нему доступ из своего собственного программного обеспечения.

midiOutGetNumDevs возвращает только одно устройство, и это Microsoft GS Wavetable Synth.

Я запутался, что могу послать MIDI-проигрыватель kontakt через кабель MIDI / USB, но он не отображается как MIDI-устройство.

Что мне не хватает?

Thx

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Какой API / OS вы используете?Какой SoftSynth?

Краткий ответ: вы можете попробовать "PortMidi".

http://portmedia.sourceforge.net/

Длинный (er) ответ:

У меня нетнашел любую кроссплатформенную библиотеку MIDI, способную общаться с любым видом приемника MIDI.Фактически, это зависит от того, какой софтсинт используется для получения событий MIDI.

1) В Linux вы можете использовать ALSA для общения с синтезаторами ALSA.Softsynth может зарегистрироваться как приемник ALSA.Вы можете: * использовать библиотеку ALSA для подключения для отправки MIDI-событий в этот приемник;* или вы можете зарегистрировать свое приложение в качестве источника ALSA MIDI и использовать другую программу (aconnectgui, qjackctl, patchage) для подключения к любому приемнику.

http://www.alsa -project.org / alsa-doc/alsa-lib/rawmidi.html

http://www.alsa -project.org / alsa-doc / alsa-lib / seq.html

Недостатки:Специфично для Linux

2) Вы можете использовать JACK для MIDI.Как и в ALSA MIDI, приложение может регистрировать источники и приемники MIDI.Yhe softsynth может зарегистрироваться как приемник JACK MIDI.Затем вам нужно настроить приложение на источник JACK MIDI и связать его с другой программой (qjackctl, patchage).

http://jackaudio.org/files/docs/html/index.html

Недостаток: требуется установка, настройка, запуск JACK

У вас есть два решения для перемещения приемника / источников ALSA в качестве приемников / источников JACK:

  • либо используйте встроенную функциональность JACK (командная строка -Xseq);

  • или с использованием «a2jmidi»

4) В MacOS вы можете использовать MIDI с CoreAudio.Я ничего об этом не знаю.

5) Я полагаю, что в Windows вы используете функции midi * в

6) Используйте OSS в некоторых других ОС

7) Общайтесь с синтезатором, используя сокет / протоколы

. Вы можете заставить свое программное обеспечение отправлять MIDI-события, используя MIDI / RTP или MIDI / UDP, так что вам нет дела до драйвера / ОС.Большинство softsynth не говорят ни о одном из них напрямую, поэтому вам нужна программа для создания моста (qmidinet или другие).

8) PortMidi - это кроссплатформенная библиотека для MIDI.Однако кажется, что он не может использовать JACK в качестве бэкэнда напрямую (однако вы можете сделать устройства ALSA доступными в JACK, как описано выше).

http://portmedia.sourceforge.net/

Например,в Linux Fluidsynth может использовать ALSA, OSS и JACK для ввода MIDI.Timidity ++ может использовать ALSA и Windows API.

1 голос
/ 19 сентября 2011

ОК. Ответом на эту проблему является использование виртуального MIDI-драйвера. Я нашел бесплатный здесь: http://nerds.de/en/loopbe1.html

Это создает устройство вывода midi, которое обнаруживается с midiOutGetNumDevs, и я могу также передавать свои примечания midi, и другое программное обеспечение Midi на том же компьютере может использовать его как устройство ввода midi.

Работает на Win7 и имеет поддержку Mac. Моя проблема решена.

«LoopBe1 - это внутреннее MIDI-устройство для передачи MIDI-данных между компьютерными программами. По сути, LoopBe1 - это« невидимый кабель »для подключения MIDI-выхода приложения к MIDI-входу любого другого приложения.»

0 голосов
/ 27 сентября 2011

Договорились, что Virtual MIDI Driver - самое простое решение.

Еще один, который был очень популярен (хотя не уверен, как он работает на Win7) - это MIDI Yoke. http://www.midiox.com/

Если вы хотите сделать что-то коммерческое, вы можете написать собственный виртуальный драйвер MIDI, чтобы сделать программный контроллер (отправитель) виртуальным источником MIDI. Только на Windows это будет много работы.

На Mac и Linux ваша работа намного проще. Как сказал @ysdx, Mac, использующий CoreMIDI и Linux, использующий ALSA / Jack, это очень легко сделать в вашем приложении, создав виртуальный MIDI-порт и подключившись к пунктам назначения.

...