midisend

Отправка сообщения MIDI на устройство MIDI

Описание

пример

midisend(device,msg) отправляет сообщение MIDI, msg, на устройство MIDI, использующее интерфейс устройства MIDI, device.

пример

midisend(device,varargin) создает сообщения MIDI с помощью varargin а затем отправляет сообщения MIDI. The varargin синтаксис предназначен для удобства и включает вызов на midimsg с вызовом на midisend.

Примеры

свернуть все

Запросите у системы доступные выходные порты устройств MIDI. Используйте availableDevices struct, чтобы задать допустимое устройство MIDI и создать mididevice объект.

availableDevices = mididevinfo;
device = mididevice(availableDevices.output(2).ID);

Создайте пару NoteOn сообщения (для указания Note On и Note Off) и отправки их на выбранное устройство MIDI.

msgs = midimsg('Note',1,48,64,0.25);
midisend(device,msgs)

midisend позволяет объединить определение и отправку midimsg в один вызов функции. Передайте среднюю С по каналу 3 со скоростью 64.

mididevinfo
  MIDI devices available:
  ID  Direction  Interface   Name
   0   output    MMSystem   'Microsoft MIDI Mapper'
   1    input    MMSystem   'nanoKONTROL2'
   2    input    MMSystem   'USB Uno MIDI Interface'
   3   output    MMSystem   'Microsoft GS Wavetable Synth'
   4   output    MMSystem   'nanoKONTROL2'
   5   output    MMSystem   'USB Uno MIDI Interface'
device = mididevice('USB Uno MIDI Interface')
device = 
  mididevice connected to
     Input: 'USB Uno MIDI Interface' (2)
    Output: 'USB Uno MIDI Interface' (5)
midisend(device,'NoteOn',3,60,64)

Получите имя доступного выходного устройства MIDI в вашей системе.

mInfo = mididevinfo;
Disregard cmd.exe warnings about UNC directory pathnames.
Disregard cmd.exe warnings about UNC directory pathnames.
midiDeviceName = mInfo.output(1).Name;

Создайте mididevice объект.

device = mididevice(midiDeviceName);

Создайте массив сообщений MIDI.

msgs = [];
for ii = 1:8
    msgs = [msgs;midimsg('Note',1,20+8*ii,64,1,ii)];
end

Чтобы прослушать сообщения MIDI, отправьте сообщения MIDI на ваше устройство.

midisend(device,msgs)

Чтобы скомпилировать предыдущие шаги, инкапсулируйте код в функцию и затем вызывайте mcc.

function playMusic1()
    mInfo = mididevinfo;
    midiDeviceName = mInfo.output(1).Name;
    device = mididevice(midiDeviceName);

    msgs = [];
    for ii = 1:8
        msgs = [msgs;midimsg('Note',1,20+8*ii,64,1,ii)];
    end

    midisend(device,msgs)
end
mcc playMusic1 -m -w disable

Выполните скомпилированный код. Вы не услышите никакого звука. Это происходит из-за того, что исполняемый файл открылся, отправил MIDI-сообщения в очередь, а затем закрылся, прервав свои команды, прежде чем MIDI-сообщения имели возможность играть.

!playMusic1.exe

Чтобы сохранить исполняемый файл открытым достаточно долго, чтобы MIDI-сообщения могли воспроизводиться, добавьте паузу в исполняемый файл. Установите длительность паузы равной длительности сообщений MIDI.

function playMusic2()
    mInfo = mididevinfo;
    midiDeviceName = mInfo.output(1).Name;
    device = mididevice(midiDeviceName);

    msgs = [];
    for ii = 1:8
        msgs = [msgs;midimsg('Note',1,20+8*ii,64,1,ii)];
    end

    midisend(device,msgs)
    pause(msgs(end).Timestamp)
end
mcc playMusic2 -m -w disable

Воспроизведение скомпилированного исполняемого файла. Звук, который воспроизводится через ваше устройство MIDI, аналогичен несопоставленной версии.

!playMusic2.exe

Входные параметры

свернуть все

Задайте device как объект, созданный mididevice.

Задайте msg как объект, созданный midimsg.

Задайте varargin как допустимая комбинация аргументов, которое может создать сообщение MIDI. См. midimsg описание допустимых аргументов.

Введенный в R2018a