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Примечание, Velocity, и Timestamp свойства. Timestamp свойство NoteOff сообщение определяется как Timestamp свойство NoteOn обменивайтесь сообщениями плюс duration.

пример

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

пример

msg = midimsg('NoteOff',channel,note,velocity,timestamp) возвращает NoteOff midimsg, с заданным ChannelПримечание, 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Примечание, 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 синтаксис, в этом случае аргумент метки времени требуется.

Свойства

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

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

Тип сообщения 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 как середину C, и все другие примечания относительны. MIDI-устройства и программное обеспечение define отображение между примечанием и MIDI отмечают номер. Если середина C произвольно принята, чтобы быть 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 объекты.

Типы данных: логический

Каналы для 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 объекты. NoteOn сообщение указывает, что примечание должно начать вопроизводить. NoteOff сообщение указывает, что примечание должно прекратить вопроизводить. В качестве альтернативы можно отправить второй NoteOn обменивайтесь сообщениями со скоростью, обнуленной, чтобы указать, что примечание должно прекратить вопроизводить. Audio Toolbox® обеспечивает синтаксис удобства, чтобы создать знаменитые пары на и примечание от сообщений.

Создайте пару сообщений 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 синтаксис возвращает примечание от сообщения как NoteOn midimsg объект с Velocity обнулить.

Чтобы создать Примечание По и Примечание От сообщений отдельно, создайте два 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 ]

Можно также задать Примечание От использования 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 возвращает номер изменения управления и канал как один номер согласно следующему formula: ccInfo = (Channel*1000 + CCNumber). Задайте сообщение Изменения Управления MIDI, чтобы переместить идентифицированный контроллер. Ваша Поверхность Управления 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данные, и 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данные, и 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 возвращает...-X многомерный массив M-by-N-by-. Например, чтобы задать трехмерный массив с каждой размерностью, имеющей различное число элементов, задайте размер как вектор-строку из трех элементов.

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, и затем индексируете в массив в цикле, чтобы задать мелодию.

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

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