Сообщение MIDI Note в C ++

Я пытаюсь создать часть программного обеспечения с использованием C ++, которое воспроизводит аудиосэмпл .wav при нажатии определенной клавиши MIDI. Наилучший способ, которым я думал это сделать, - использовать оператор if (если есть более простой способ, я был бы очень признателен, но я новичок в программировании, поэтому, пожалуйста, сохраняйте его простым).

Посмотрев онлайн, я обнаружил, что разные MIDI-клавиши соответствуют разным сообщениям NOTE ON (например, NOTE ON 60 будет соответствовать среднему C), поэтому в основном я просто ищу, как сказать «когда NOTE ON 60» получил, воспроизвести файл X.wav ". Я также обнаружил, что статус NOTE ON - 9n, значит ли это, что компьютер получит 9x60 (с использованием примера 60 = Middle C)?

После этого мне просто нужно было бы узнать, как воспроизвести звуковой образец, который, я полагаю, будет следующим, используя sndfile.h:

SNDFILE *sndFile = sf_open("Sample1.wav").

Любая помощь будет очень принята.


person David Benito    schedule 07.06.2015    source источник
comment
Проблема здесь в том, что ваш английский немного не так хорош. Фактически, вы хотите сказать, что когда получено NOTE ON 60, воспроизвести файл X.wave и когда сильно отличается от if, по крайней мере, в программировании на C ++. Таким образом, это довольно широкий вопрос.   -  person Lightness Races in Orbit    schedule 07.06.2015
comment
А, ладно, сейчас я это отредактирую.   -  person David Benito    schedule 07.06.2015


Ответы (2)


вы можете использовать PortAudio, в нем есть все, что вы можете работать с midi и вашими волновыми файлами

person amir ramezani    schedule 07.06.2015
comment
Ах, отлично! И как мне закодировать, когда получено NOTE ON 60, воспроизвести файл X.wav с помощью PortAudio? Кстати, большое спасибо за ответ! - person David Benito; 09.06.2015

вы можете реализовать функцию потока с помощью portAudio и проверить с помощью portMidi, что, когда, например, нажата заметка c4, воспроизведите этот файл, посмотрите там документацию

person amir ramezani    schedule 02.07.2016