Воспроизведение MIDI в OS X, C ++ - PullRequest
1 голос
/ 20 февраля 2010

Как я могу отправить MIDI-сообщения из программы на C ++ и заставить их воспроизводить звук из General MIDI-банка?

Я огляделся, и, похоже, нет простого ответа, и мой мозг начинает таять после прочтения длинных руководств о CoreMIDI и подобных вещах.

У меня есть простой проект C ++ для игры / синтезатора, и все, что я хочу сделать, это, например, когда этот мяч падает на пол, вызвать C4 из банка Grand Piano. Я в порядке с большинством программ, но встроенная часть MIDI до сих пор была совершенно непрозрачной для меня.

Я бы хотел использовать CoreMIDI, потому что кажется, что он может быть самым простым, но что-то многоплатформенное было бы бонусом.

Большое спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 20 февраля 2010

Другой вариант будет rtmidi

Он предназначен быть простым и кроссплатформенным

Я использовал аналогичный rtaudio для ввода / вывода звука в реальном времени, и его было относительно легко использовать.

Вы должны иметь возможность перечислить все MIDI-устройства с примером кода, затем выбрать банк GM и отправить соответствующее сообщение MIDI (сообщение о включении / выключении примечания) после выбора пианино с сообщением об изменении программы. В Википедии есть полезная страница , чтобы начать

0 голосов
/ 23 марта 2012

Я написал учебник, который может помочь кому-то, кто сталкивается с той же проблемой, используя CoreMIDI. Он объясняет, как читать MIDI-файл и выводить его через AUGraph, используя звуковые эффекты из файла Sound Font. Также объясняется, как использовать виртуальную конечную точку для получения доступа к промежуточным сообщениям в режиме реального времени. Здесь .

Чтобы сделать то, что вы ищете, вы можете изменить пример проекта, который я предоставляю, следующим образом:

result = MusicDeviceMIDIEvent ([AUSampler], midiStatus, note, velocity, 0);

Где AUSampler - указатель на AUSampler, то есть начальная точка в AUGraph. Вместо чтения из файла вы можете использовать следующую команду для отправки одной ноты MIDI для воспроизведения.

...