Протокол MIDI позволяет вам отправить и получить информационный звук описания. Синтезатор MIDI является устройством или программным обеспечением, которое синтезирует звук в ответ на входящие данные MIDI. В его самой простой форме синтезатор MIDI преобразовывает сообщения примечания MIDI в звуковой сигнал. Более сложные синтезаторы обеспечивают управление подстройки получившегося звука, позволяя вам подражать инструментам. В этом примере вы создаете монофонический синтезатор, который преобразовывает поток сообщений примечания MIDI к звуковому сигналу в режиме реального времени.
Чтобы узнать о взаимодействии через интерфейс с MIDI-устройствами в целом, смотрите Интерфейс MIDI-устройства.
Информация о примечании MIDI группирована как
объект NoteOn
или NoteOff
midimsg
в Audio Toolbox™. И NoteOn
и NoteOff
объекты midimsg
имеют свойства Note
и Velocity
:
Velocity
указывает, как трудно примечание проигрывается. Условно, Примечание По сообщениям с обнуленной скоростью представляет примечание от сообщений. Представление примечания от сообщений с примечанием по сообщениям более эффективно при использовании Рабочего Состояния.
Note
указывает на частоту звукового сигнала. Свойство Note
принимает значение между нулем и 127, включительно. Протокол MIDI указывает, что 60 средний C, со всеми другими примечаниями относительно того примечания. Создайте примечание MIDI по сообщению, которое указывает, чтобы проигрывать середину C.
channel = 1;
note = 60;
velocity = 64;
msg = midimsg('NoteOn',channel,note,velocity)
msg = MIDI message: NoteOn Channel: 1 Note: 60 Velocity: 64 Timestamp: 0 [ 90 3C 40 ]
Чтобы интерпретировать свойство примечания как частоту, используйте равную умеренную шкалу и соглашение A440:
frequency = 440 * 2^((msg.Note-69)/12)
frequency = 261.6256
Некоторые синтезаторы MIDI используют конверт Затухания нападения выдерживает релиз (ADSR), чтобы управлять объемом или амплитудой, примечания в зависимости от времени. Для простоты используйте скорость примечания, чтобы определить амплитуду. Концептуально, если клавиша нажата тяжелее, получившийся звук громче. Свойство Velocity
принимает значение между нулем и 127, включительно. Нормируйте скорость и интерпретируйте как амплитуда примечания.
amplitude = msg(1).Velocity/127
amplitude = 0.5039
Чтобы синтезировать синусоиду, создайте Систему audioOscillator
object™. Чтобы проигрывать звук к устройству аудиовыхода вашего компьютера по умолчанию, создайте Системный объект audioDeviceWriter
. Шаг объекты в течение двух секунд и слушает примечание.
osc = audioOscillator('Frequency',frequency,'Amplitude',amplitude); deviceWriter = audioDeviceWriter('SampleRate',osc.SampleRate); tic while toc < 2 synthesizedAudio = osc(); deviceWriter(synthesizedAudio); end
Чтобы проигрывать массив объектов midimsg
с соответствующей синхронизацией, создайте цикл.
Во-первых, создайте массив объектов midimsg
и кэшируйте примечание по и отметьте от времен к переменной, eventTimes
.
msgs = [midimsg('Note',channel,60,64,0.5,0), ... midimsg('Note',channel,62,64,0.5,.75), ... midimsg('Note',channel,57,40,0.5,1.5), ... midimsg('Note',channel,60,50,1,3)]; eventTimes = [msgs.Timestamp];
Чтобы подражать приемо-сдаточным ведомостям в режиме реального времени, создайте цикл for, который использует переменную eventTimes
и tic
и toc
, чтобы проигрывать примечания согласно меткам времени сообщения MIDI. Выпустите свое аудио устройство после того, как цикл будет завершен.
i = 1; tic while toc < max(eventTimes) if toc > eventTimes(i) msg = msgs(i); i = i+1; if msg.Velocity~= 0 osc.Frequency = 440 * 2^((msg.Note-69)/12); osc.Amplitude = msg.Velocity/127; else osc.Amplitude = 0; end end deviceWriter(osc()); end release(deviceWriter)
Чтобы получить и синтезировать сообщения примечания в режиме реального времени, создайте интерфейс к MIDI-устройству. Функция, взятая в качестве примера, simplesynth
:
получает сообщения примечания MIDI от заданного MIDI-устройства
синтезирует звуковой сигнал
проигрывает их к вашему устройству аудиовыхода в режиме реального времени
Сохраните функцию simplesynth
в свою текущую папку.
Чтобы запросить вашу систему для вашего имени устройства, используйте mididevinfo
. Чтобы слушать ваше выбранное устройство, вызовите функцию simplesynth
с именем устройства. Этот пример использует устройство M-Audio KeyRig 25, которое указывает с именем устройства USB 02
на машине, используемой в этом примере.
mididevinfo
MIDI devices available: ID Direction Interface Name 0 output MMSystem 'Microsoft MIDI Mapper' 1 input MMSystem 'USB MIDI Interface ' 2 input MMSystem 'USB O2' 3 output MMSystem 'Microsoft GS Wavetable Synth' 4 output MMSystem 'USB MIDI Interface ' 5 output MMSystem 'USB O2'
Вызовите функцию simplesynth
со своим именем устройства. Функция simplesynth
прислушивается к сообщениям примечания и проигрывает их к вашему устройству аудиовыхода по умолчанию. Проигрывайте примечания по своему MIDI-устройству и слушайте синтезируемое аудио.
simplesynth('USB 02')
Используйте Ctrl-C
, чтобы закончить связь.