exponenta event banner

midisend

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

Описание

пример

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

пример

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

Примеры

свернуть все

Запросите у системы доступные порты вывода устройств MIDI. Используйте availableDevices чтобы указать допустимое устройство 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, отправьте их на устройство.

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