Вопрос

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

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

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

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

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

Это было полезно?

Решение

Другим вариантом было бы ртмиди

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top