exponenta event banner

midimsg

Создать MIDI-сообщение

Описание

Создание MIDI-сообщения в MATLAB ® с помощьюmidimsg. Создание интерфейса устройства MIDI с помощью mididevice. Отправка и получение сообщений с помощью midisend и midireceive. При создании сообщения MIDI он указывается как тип сообщения MIDI.

Руководство по сообщениям MIDI и взаимодействию с устройствами MIDI см. в разделе Интерфейс устройств MIDI.

Создание

Синтаксис

Описание

пример

msg = midimsg('Note',channel,note,velocity,duration,timestamp) возвращает два сообщения MIDI: NoteOn и NoteOff, с указанным Channel, Note, Velocity, и Timestamp свойства. Timestamp имущества NoteOff сообщение определяется как Timestamp имущества NoteOn сообщение плюс duration.

пример

msg = midimsg('NoteOn',channel,note,velocity,timestamp) возвращает NoteOn midimsg, с указанным Channel, Note, Velocity, и Timestamp свойства.

пример

msg = midimsg('NoteOff',channel,note,velocity,timestamp) возвращает NoteOff midimsg, с указанным Channel, Note, Velocity, и Timestamp свойства.

пример

msg = midimsg('ControlChange',channel,ccnumber,ccvalue,timestamp) возвращает ControlChange midimsg, с указанным Channel, CCNumber, CCValue, и Timestamp свойства.

пример

msg = midimsg('ProgramChange',channel,program,timestamp) возвращает ProgramChange midimsg, с указанным Channel, Program, и Timestamp свойства.

пример

msg = midimsg('SystemExclusive',bytes,timestamp) возвращает полное SystemExclusive последовательность сообщений, с указанной Timestamp собственность.

пример

msg = midimsg('SystemExclusive',timestamp) возвращает SystemExclusive midimsg, с указанным Timestamp собственность.

пример

msg = midimsg('Data',bytes,timestamp) возвращает Data midimsg для использования в системном эксклюзивном сообщении с указанным MsgBytes и Timestamp свойства. bytes задается как скаляр, вектор или многомерный массив элементов. Каждый элемент bytes должно находиться в диапазоне [0,127].

пример

msg = midimsg('EOX',timestamp) возвращает EOX midimsg, с указанным Timestamp собственность.

msg = midimsg('TimingClock',timestamp) возвращает TimingClock midimsg, с указанным Timestamp собственность.

msg = midimsg('Start',timestamp) возвращает Start midimsg, с указанным Timestamp собственность.

msg = midimsg('Continue',timestamp) возвращает Continue midimsg, с указанным Timestamp собственность.

msg = midimsg('Stop',timestamp) возвращает Stop midimsg, с указанным Timestamp собственность.

msg = midimsg('ActiveSensing',timestamp) возвращает ActiveSensing midimsg, с указанным Timestamp собственность.

msg = midimsg('SystemReset',timestamp) возвращает SystemReset midimsg, с указанным Timestamp собственность.

msg = midimsg('TuneRequest',timestamp) возвращает TuneRequest midimsg, с указанным Timestamp собственность.

msg = midimsg('MIDITimeCodeQuarterFrame',seq,value,timestamp) возвращает MIDITimeCodeQuarterFrame midimsg, с указанным TimeCodeSequence, TimeCodeValue, и Timestamp свойства.

msg = midimsg('SongPositionPointer',position,timestamp) возвращает SongPositionPointer midimsg, с указанным SongPosition и Timestamp свойства.

msg = midimsg('SongSelect',song,timestamp) возвращает SongSelect midimsg, с указанным Song и Timestamp свойства.

msg = midimsg('AllSoundOff',channel,timestamp) возвращает AllSoundOff midimsg, с указанным Channel и Timestamp свойства.

msg = midimsg('ResetAllControllers',channel,timestamp) возвращает ResetAllControllers midimsg, с указанным Channel и Timestamp свойства.

msg = midimsg('LocalControl',channel,localcontrol,timestamp) возвращает LocalControl midimsg, с указанным Channel, LocalControl, и Timestamp свойства.

msg = midimsg('PolyOn',channel,timestamp) возвращает PolyOn midimsg, с указанным Channel и Timestamp свойства.

msg = midimsg('MonoOn',channel,monoChannels,timestamp) возвращает MonoOn midimsg, с указанным Channel, MonoChannels, и Timestamp свойства.

msg = midimsg('OmniOn',channel,timestamp) возвращает OmniOn midimsg, с указанным Channel и Timestamp свойства.

msg = midimsg('OmniOff',channel,timestamp) возвращает OmniOff midimsg, с указанным Channel и Timestamp свойства.

msg = midimsg('AllNotesOff',channel,timestamp) возвращает AllNotesOff midimsg, с указанным Channel и Timestamp свойства.

msg = midimsg('PolyKeyPressure',channel,note,pressure,timestamp) возвращает PolyKeyPressure midimsg, с указанным Channel, Note, Pressure, и Timestamp свойства.

msg = midimsg('ChannelPressure',channel,pressure,timestamp) возвращает ChannelPressure midimsg, с указанным Channel, Pressure, и Timestamp свойства.

msg = midimsg('PitchBend',channel,change,timestamp) возвращает PitchBend midimsg, с указанным Channel, PitchChange, и Timestamp свойства.

пример

msg = midimsg возвращает скаляр midimsg со всеми нулевыми байтами. Все нулевые байты указывают на MIDI-сообщение с Type установить в значение Data.

пример

msg = midimsg(size) возвращает midimsg массив size со всеми нулевыми байтами.

пример

msg = midimsg(0) возвращает пустой midimsg.

Примечание

Если timestamp указан в качестве аргумента, является необязательным и по умолчанию равен нулю. Исключение составляет 'SystemExclusive',bytes,timestamp синтаксис, в этом случае требуется аргумент timestamp.

Свойства

развернуть все

Это свойство доступно только для чтения.

Тип MIDI-сообщения, возвращаемого как одно из следующих midimsgtype значения перечисления:

NoteOnDataStopSongPositionPointerPolyOnPolyKeyPressure
NoteOffEOXActiveSensingSongSelectMonoOnChannelPressure
ControlChangeTimingClockSystemResetAllSoundOffOmniOnPitchBendChange
ProgramChangeStartTuneRequestResetAllControllersOmniOffUndefined
SystemExclusiveContinueMIDITimeCodeQuarterFrameLocalControlAllNotesOff 

Можно указать тип MIDI-сообщения во время создания в качестве символьного вектора, строки или члена midimsgtype перечисление.

Например, следующие элементы создают эквивалентные MIDI-сообщения:

  • midimsg('SongPositionPointer',1)

  • midimsg("SongPositionPointer",1)

  • midimsg(midimsgtype.SongPositionPointer,1)

Это свойство доступно только для чтения.

Количество байт в MIDI-сообщении, возвращенном в виде скаляра, вектора или массива того же размера, что и msg.

Типы данных: double

Это свойство доступно только для чтения.

Фактические байты построенного MIDI-сообщения в десятичном формате, возвращаемые в виде скаляра, вектора или массива того же размера, что и msg.

Типы данных: uint8

Местоположение сообщения MIDI во времени, указанное как скаляр, вектор или массив того же размера, что и msg.

Отметку времени можно указать как любое числовое значение. Однако метка времени всегда сохраняется и возвращается как тип double.

Дополнительные сведения о том, как временные метки MIDI реализуются в Audio Toolbox™, см. в разделе Синхронизация сообщений MIDI.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Канал MIDI, которому адресовано сообщение, указывается как целое число в диапазоне [1,16].

Зависимости

Это свойство допустимо только для NoteOn, NoteOff, PolyKeyPressure, AllSoundOff, ResetAllControllers, LocalControl, AllNotesOff, OmniOn, OmniOff, MonoOn, PolyOn, ControlChange, ProgramChange, ChannelPressure, и PitchBend midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Номер MIDI-ноты, указанный как целое число в диапазоне [0,127]. Спецификация MIDI определяет примечание номер 60 как Middle C, а все остальные примечания являются относительными. Устройства и программное обеспечение MIDI определяют соответствие между заметкой и номером заметки MIDI. Если предполагается, что MiddC произвольно C5 для целевого оборудования или программного обеспечения MIDI, между номерами заметок MIDI и примечаниями отображается следующая таблица:

Зависимости

Это свойство допустимо только для NoteOn, NoteOff, и PolyKeyPressure midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Скорость MIDI-сообщения, заданная как скалярное целое число в диапазоне [0,127]. Velocity описывает скорость воспроизведения заметки. Большее число соответствует более высокой скорости.

Зависимости

Это свойство допустимо только для NoteOn и NoteOff midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Давление ключа, указанное как скалярное целое число в диапазоне [0,127]. Нажатие клавиши приводит к последующему прикосновению к отдельной заметке. Например, на клавиатуре нажатие клавиши описывает давление, приложенное к клавише после того, как эта клавиша была нажата (после NoteOn посылается сообщение). Вы можете использовать KeyPressure для добавления выражения к задержанным заметкам.

Зависимости

Это свойство допустимо только для PolyKeyPressure midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Включить локальный элемент управления, указанный как true или false. Если для локального элемента управления установлено значение falseвсе устройства на данном канале отвечают только на данные, полученные по MIDI.

Зависимости

Это свойство допустимо только для LocalControl midimsg объекты.

Типы данных: logical

Каналы для MonoOn сообщения, указанные как скалярное целое число в диапазоне [0,16].

Зависимости

Это свойство допустимо только для MonoOn midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Управляющий номер изменения, заданный как целое число в диапазоне [0,119].

Зависимости

Это свойство допустимо только для ControlChange midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Управляющее значение изменения, указанное как целое число в диапазоне [0,127].

Зависимости

Это свойство допустимо только для ControlChange midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Номер программы для переключения, заданный как целое число в диапазоне [0,127].

Зависимости

Это свойство допустимо только для ProgramChange midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Давление в канале, указанное как целое число в диапазоне [0,127]. Ключевое давление применяется после касания ко всем заметкам в канале.

Зависимости

Это свойство допустимо только для ChannelPressure midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Величина изменения основного тона, указанная как целое число в диапазоне [0,16383]. Центральная позиция (без эффекта) 8192. Чувствительность является функцией приемника.

Зависимости

Это свойство допустимо только для PitchBend midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Порядковый номер, указанный как целое число в диапазоне [0,7].

Зависимости

Это свойство допустимо только для MIDITimeCodeQuarterFrame midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Значение временного кода, указанное как целое число в диапазоне [0,15].

Зависимости

Это свойство допустимо только для MIDITimeCodeQuarterFrame midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Положение в песне для перехода, указанное как целое число в диапазоне [0,16383].

Зависимости

Это свойство допустимо только для SongPositionPointer midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Номер песни для переключения, указанный как целое число в диапазоне [0,127].

Зависимости

Это свойство допустимо только для SongSelect midimsg объекты.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Примеры

свернуть все

Вы можете создавать MIDI-сообщения с помощью NoteOn и NoteOff midimsg объекты. A NoteOn сообщение указывает на необходимость начала воспроизведения заметки. A NoteOff сообщение указывает, что заметка должна перестать воспроизводиться. Кроме того, можно отправить вторую NoteOn сообщение со скоростью, равной нулю, чтобы указать, что заметка должна прекратить воспроизведение. Audio Toolbox ® предоставляет удобный синтаксис для создания пар сообщений note on и note off.

Создайте пару MIDI-сообщений для указания последовательности «Примечание включено» и «Примечание выключено» с помощью Note удобный синтаксис. Укажите, что заметка начинается через одну секунду и имеет продолжительность в две секунды.

channel = 1;
note = 60;
velocity = 64;
duration = 2;
timestamp = 1;
msgs = midimsg('Note',channel,note,velocity,duration,timestamp)
msgs=2×1 object
  MIDI message:
    NoteOn          Channel: 1  Note: 60  Velocity: 64  Timestamp: 1  [ 90 3C 40 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 3  [ 90 3C 00 ]

Два midimsg создаются и возвращаются в виде массива. Note синтаксис возвращает сообщение note off в виде NoteOn midimsg объект с Velocity значение равно нулю.

Для отдельного создания сообщений Note On и Note Off создайте два NoteOn сообщения и объединять их.

msgs = [midimsg('NoteOn',channel,note,velocity,timestamp), ...
        midimsg('NoteOn',channel,note,0,3)]
msgs=1×2 object
  MIDI message:
    NoteOn          Channel: 1  Note: 60  Velocity: 64  Timestamp: 1  [ 90 3C 40 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 3  [ 90 3C 00 ]

Можно также указать примечание Выкл (Note Off) с помощью NoteOff midimsg объект. Использование NoteOff синтаксис позволяет задать скорость выпуска.

    msgs = [midimsg('NoteOn',channel,note,velocity,timestamp), ...
            midimsg('NoteOff',channel,note,velocity,3)]
msgs=1×2 object
  MIDI message:
    NoteOn          Channel: 1  Note: 60  Velocity: 64  Timestamp: 1  [ 90 3C 40 ]
    NoteOff         Channel: 1  Note: 60  Velocity: 64  Timestamp: 3  [ 80 3C 40 ]

Чтобы создать сообщение об изменении элемента управления, укажите midimsg Type как ControlChange и задайте требуемые параметры: Channel, CCNumber, и CCValue. Для определения канала и контрольного номера, присвоенных поверхности управления MIDI, используйте midiid. Войти midiid в командной строке, а затем переместите элемент управления, который требуется определить.

[ccInfo,deviceName] = midiid;
Move the control you wish to identify; type ^C to abort.
Waiting for control message... done

midiid возвращает номер изменения элемента управления и канал в виде одного числа в соответствии со следующей формулой: ccInfo = (Channel*1000 + CCNumber). Определите сообщение MIDI Control Change для перемещения идентифицированного контроллера. Для получения сообщений об изменении управления поверхность управления MIDI должна быть двунаправленной.

channel = floor(ccInfo/1000);
ccnumber = ccInfo - channel*1000;
ccvalue = 1;
msg = midimsg('ControlChange',channel,ccnumber,ccvalue)
msg = 
  MIDI message:
    ControlChange   Channel: 1  CCNumber: 16  CCValue: 1   Timestamp: 0  [ B0 10 01 ]

Создать mididevice с использованием deviceName идентифицировано с помощью midiid. Отправьте MIDI-сообщение на устройство.

device = mididevice(deviceName);
midisend(device,msg);

Сообщения об изменении программы, иногда называемые сообщениями об изменении исправлений, определяют способ интерпретации примечаний. Например, сообщение об изменении программы может указывать воспроизводимый инструмент. Создание ProgramChange midimsg объект, укажите midimsg введите как ProgramChangeи требуемые значения свойств: Channel и Program.

channel = 4;
program = 7;
msg = midimsg('ProgramChange',channel,program)
msg = 
  MIDI message:
    ProgramChange   Channel: 4  Program: 7   Timestamp: 0  [ C3 07 ]

Сообщения об исключении системы определяются последовательностью midimsg объекты: SystemExclusive, Data, и EOX. Чтобы создать исключающую систему последовательность, укажите SystemExclusive midimsg введите во время создания, а затем укажите байты сообщения. Для этого синтаксиса требуется метка времени.

bytes = [0 1 2];
timestamp = 0;
msg = midimsg('SystemExclusive',bytes,timestamp)
msg=3×1 object
  MIDI message:
    SystemExclusive Timestamp: 0  [ F0 ]
    Data            Timestamp: 0  [ 00 01 02 ]
    EOX             Timestamp: 0  [ F7 ]

Можно также создать SystemExclusive, Data, и EOX midimsg объекты по отдельности. Например, следующее: midimsg массив совпадает с предыдущим.

msg = [midimsg('SystemExclusive',timestamp), ...
       midimsg('Data',bytes,timestamp), ...
       midimsg('EOX',timestamp)]
msg=1×3 object
  MIDI message:
    SystemExclusive Timestamp: 0  [ F0 ]
    Data            Timestamp: 0  [ 00 01 02 ]
    EOX             Timestamp: 0  [ F7 ]

Сообщением MIDI по умолчанию является скаляр со всеми нулевыми байтами, и Type является Data.

msg = midimsg
msg = 
  MIDI message:
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]

Можно создать массив сообщений MIDI, указав размер скалярным вектором или вектором строки.

Если указать размер в виде скаляра M, midimsg возвращает массив M-by-M со всеми нулевыми байтами.

msg = midimsg(2)
msg=2×2 object
  MIDI message:
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]

Массив сообщений MIDI всегда отображается вертикально в порядке их линейного индексирования. Можно ссылаться на отдельные элементы массива, указывая его положение в каждом измерении или по его линейному индексу. Например, измените Timestamp третьего элемента от 0 кому 2 using linear indexing, а затем от 2 кому 3 использование первой размерной индексации.

msg(3).Timestamp = 2
msg=2×2 object
  MIDI message:
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 2  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]

msg(1,2).Timestamp = 3
msg=2×2 object
  MIDI message:
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 3  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]

Можно также указать несимметричные массивы. Если указать размер в виде вектора строки из двух или более элементов, midimsg возвращает многомерный массив M-by-N-by-... -X. Например, чтобы задать трехмерный массив с каждым размером, имеющим разное количество элементов, укажите размер в виде вектора строки из трех элементов.

msg = midimsg([2,1,3])
msg = 
  MIDI message:
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
    Data            Timestamp: 0  [ 00 00 00 00 00 00 00 00 ]
size(msg)
ans = 1×3

     2     1     3

msg = midimsg(0)
msg = 

  empty MIDI message array

В этом примере создается массив MIDI-сообщений, а затем выполняется индексация в массив в цикле для определения мелодии.

Создайте массив MIDI-сообщений 22 на 1 со всеми нулевыми данными.

msgArray = midimsg([22,1]);

Чтобы создать мелодию, создайте MIDI NoteOn и NoteOff сообщений путем индексирования в цикле. Просмотрите результат.

melody = [60,65,60,57,55,53,60,65,60,67,60];
for i = 1:numel(melody)
    idx = (2*i-1):(2*i);
    msgArray(idx) = midimsg('Note',1,melody(i),50,0.5,i);
end
msgArray
msgArray=22×1 object
  MIDI message:
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 1  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 1.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 50  Timestamp: 2  [ 90 41 32 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 0   Timestamp: 2.5  [ 90 41 00 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 3  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 3.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 57  Velocity: 50  Timestamp: 4  [ 90 39 32 ]
    NoteOn          Channel: 1  Note: 57  Velocity: 0   Timestamp: 4.5  [ 90 39 00 ]
    NoteOn          Channel: 1  Note: 55  Velocity: 50  Timestamp: 5  [ 90 37 32 ]
    NoteOn          Channel: 1  Note: 55  Velocity: 0   Timestamp: 5.5  [ 90 37 00 ]
    NoteOn          Channel: 1  Note: 53  Velocity: 50  Timestamp: 6  [ 90 35 32 ]
    NoteOn          Channel: 1  Note: 53  Velocity: 0   Timestamp: 6.5  [ 90 35 00 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 7  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 7.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 50  Timestamp: 8  [ 90 41 32 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 0   Timestamp: 8.5  [ 90 41 00 ]
      ⋮

Порядок MIDI-сообщений в массиве важен только для читаемости. При отправке MIDI-сообщений с помощью mididevice объект, mididevice объект изменяет порядок сообщений MIDI в соответствии с их метками времени и отправляет их в хронологическом порядке. Создать PitchBend MIDI-сообщение для сгиба четвертой заметки вниз и добавления ее в массив MIDI-сообщений. Для удобства чтения сортируйте массив сообщений MIDI по Timestamp.

msg = midimsg('PitchBend',1,7192,4.01);
msgArray = [msgArray;msg]
msgArray=23×1 object
  MIDI message:
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 1  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 1.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 50  Timestamp: 2  [ 90 41 32 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 0   Timestamp: 2.5  [ 90 41 00 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 3  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 3.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 57  Velocity: 50  Timestamp: 4  [ 90 39 32 ]
    NoteOn          Channel: 1  Note: 57  Velocity: 0   Timestamp: 4.5  [ 90 39 00 ]
    NoteOn          Channel: 1  Note: 55  Velocity: 50  Timestamp: 5  [ 90 37 32 ]
    NoteOn          Channel: 1  Note: 55  Velocity: 0   Timestamp: 5.5  [ 90 37 00 ]
    NoteOn          Channel: 1  Note: 53  Velocity: 50  Timestamp: 6  [ 90 35 32 ]
    NoteOn          Channel: 1  Note: 53  Velocity: 0   Timestamp: 6.5  [ 90 35 00 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 7  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 7.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 50  Timestamp: 8  [ 90 41 32 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 0   Timestamp: 8.5  [ 90 41 00 ]
      ⋮

timeStamps = [msgArray.Timestamp];
[~,idx] = sort(timeStamps);

msgArray = msgArray(idx)
msgArray=23×1 object
  MIDI message:
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 1  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 1.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 50  Timestamp: 2  [ 90 41 32 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 0   Timestamp: 2.5  [ 90 41 00 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 3  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 3.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 57  Velocity: 50  Timestamp: 4  [ 90 39 32 ]
    PitchBend       Channel: 1  PitchChange: 7192 Timestamp: 4.01  [ E0 18 38 ]
    NoteOn          Channel: 1  Note: 57  Velocity: 0   Timestamp: 4.5  [ 90 39 00 ]
    NoteOn          Channel: 1  Note: 55  Velocity: 50  Timestamp: 5  [ 90 37 32 ]
    NoteOn          Channel: 1  Note: 55  Velocity: 0   Timestamp: 5.5  [ 90 37 00 ]
    NoteOn          Channel: 1  Note: 53  Velocity: 50  Timestamp: 6  [ 90 35 32 ]
    NoteOn          Channel: 1  Note: 53  Velocity: 0   Timestamp: 6.5  [ 90 35 00 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 50  Timestamp: 7  [ 90 3C 32 ]
    NoteOn          Channel: 1  Note: 60  Velocity: 0   Timestamp: 7.5  [ 90 3C 00 ]
    NoteOn          Channel: 1  Note: 65  Velocity: 50  Timestamp: 8  [ 90 41 32 ]
      ⋮

Представлен в R2018a