主要内容

midimsg

创建MIDI消息

描述

在MATLAB中创建一个MIDI消息®使用midimsg.使用创建MIDI设备接口mididevice.使用发送和接收消息midisend而且midireceive.创建MIDI消息时,将其指定为MIDI消息类型。

有关MIDI消息和与MIDI设备接口的教程,请参见MIDI设备接口

创建

语法

描述

例子

味精= midimsg (“注意”,通道,注意,速度,时间,时间戳返回两条MIDI消息:NoteOn而且NoteOff,并指定通道请注意速度,时间戳属性。的时间戳的属性NoteOff消息被确定为时间戳的属性NoteOnMessage加上持续时间

例子

味精= midimsg (“NoteOn”频道,注意,速度,时间戳返回一个NoteOnmidimsg,并指定通道请注意速度,时间戳属性。

例子

味精= midimsg (件的NoteOff’,通道,注意,速度,时间戳返回一个NoteOffmidimsg,并指定通道请注意速度,时间戳属性。

例子

味精= midimsg (“ControlChange”频道,ccnumber ccvalue,时间戳返回一个ControlChangemidimsg,并指定通道CCNumberCCValue,时间戳属性。

例子

味精= midimsg (ProgramChange,渠道,计划,时间戳返回一个ProgramChangemidimsg,并指定通道程序,时间戳属性。

例子

味精= midimsg (SystemExclusive,字节,时间戳返回一个完整的SystemExclusive指定的消息序列时间戳财产。

例子

味精= midimsg (“SystemExclusive”,时间戳返回一个SystemExclusivemidimsg,并指定时间戳财产。

例子

味精= midimsg (“数据”,字节,时间戳返回一个数据midimsg用于系统独占消息,并指定MsgBytes而且时间戳属性。字节指定为标量、向量或多维元素数组。的每个元素字节必须在范围[0,127]内。

例子

味精= midimsg (“EOX”,时间戳返回一个EOXmidimsg,并指定时间戳财产。

味精= midimsg (“TimingClock”,时间戳返回一个TimingClockmidimsg,并指定时间戳财产。

味精= midimsg (“开始”,时间戳返回一个开始midimsg,并指定时间戳财产。

味精= midimsg (“继续”,时间戳返回一个继续midimsg,并指定时间戳财产。

味精= midimsg (“停止”,时间戳返回一个停止midimsg,并指定时间戳财产。

味精= midimsg (“ActiveSensing”,时间戳返回一个ActiveSensingmidimsg,并指定时间戳财产。

味精= midimsg (“SystemReset”,时间戳返回一个SystemResetmidimsg,并指定时间戳财产。

味精= midimsg (“TuneRequest”,时间戳返回一个TuneRequestmidimsg,并指定时间戳财产。

味精= midimsg (MIDITimeCodeQuarterFrame, seq,价值,时间戳返回一个MIDITimeCodeQuarterFramemidimsg,并指定TimeCodeSequenceTimeCodeValue,时间戳属性。

味精= midimsg (“SongPositionPointer”,位置,时间戳返回一个SongPositionPointermidimsg,并指定SongPosition而且时间戳属性。

味精= midimsg (“SongSelect”、歌曲、时间戳返回一个SongSelectmidimsg,并指定首歌而且时间戳属性。

味精= midimsg (“AllSoundOff”频道,时间戳返回一个AllSoundOffmidimsg,并指定通道而且时间戳属性。

味精= midimsg (“ResetAllControllers”频道,时间戳返回一个ResetAllControllersmidimsg,并指定通道而且时间戳属性。

味精= midimsg (“LocalControl”,频道,LocalControl时间戳返回一个LocalControlmidimsg,并指定通道LocalControl,时间戳属性。

味精= midimsg (“PolyOn”频道,时间戳返回一个PolyOnmidimsg,并指定通道而且时间戳属性。

味精= midimsg (“MonoOn”,频道,monoChannels时间戳返回一个MonoOnmidimsg,并指定通道MonoChannels,时间戳属性。

味精= midimsg (“OmniOn”频道,时间戳返回一个OmniOnmidimsg,并指定通道而且时间戳属性。

味精= midimsg (“OmniOff”频道,时间戳返回一个OmniOffmidimsg,并指定通道而且时间戳属性。

味精= midimsg (“AllNotesOff”频道,时间戳返回一个AllNotesOffmidimsg,并指定通道而且时间戳属性。

味精= midimsg (“PolyKeyPressure”频道,注意,压力,时间戳返回一个PolyKeyPressuremidimsg,并指定通道请注意压力,时间戳属性。

味精= midimsg (“ChannelPressure”频道,压力,时间戳返回一个ChannelPressuremidimsg,并指定通道压力,时间戳属性。

味精= midimsg (“PitchBend”频道,改变,时间戳返回一个PitchBendmidimsg,并指定通道PitchChange,时间戳属性。

例子

味精= midimsg返回一个标量midimsg全是零字节。全零字节表示MIDI消息类型设置为数据

例子

味精= midimsg (大小返回一个midimsg的数组大小全是零字节。

例子

味精= midimsg (0)返回空midimsg

请注意

如果时间戳作为参数列出,它是可选的,默认为0。唯一的例外是SystemExclusive,字节,时间戳语法,在这种情况下,需要时间戳参数。

属性

全部展开

此属性是只读的。

MIDI消息类型,作为下列之一返回midimsgtype枚举值:

NoteOn 数据 停止 SongPositionPointer PolyOn PolyKeyPressure
NoteOff EOX ActiveSensing SongSelect MonoOn ChannelPressure
ControlChange TimingClock SystemReset AllSoundOff OmniOn PitchBendChange
ProgramChange 开始 TuneRequest ResetAllControllers OmniOff 未定义的
SystemExclusive 继续 MIDITimeCodeQuarterFrame LocalControl AllNotesOff

类型的MIDI消息类型可以指定为字符向量、字符串或成员midimsgtype枚举。

例如,下面创建等价的MIDI消息:

  • midimsg (SongPositionPointer, 1)

  • midimsg(“SongPositionPointer”,1)

  • midimsg (midimsgtype.SongPositionPointer, 1)

此属性是只读的。

MIDI消息中的字节数,作为标量、向量或数组返回,大小与味精

数据类型:

此属性是只读的。

构造的MIDI消息的十进制的实际字节,返回为标量、向量或与的大小相同的数组味精

数据类型:uint8

MIDI消息的时间位置,指定为与的大小相同的标量、矢量或数组味精

您可以将时间戳指定为任何数值。但是,时间戳始终作为类型存储和返回

有关如何在Audio Toolbox™中实现MIDI时间戳的更多信息,请参见MIDI消息定时

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

消息被寻址到的MIDI通道,指定为范围[1,16]中的整数。

依赖关系

此属性仅对NoteOnNoteOffPolyKeyPressureAllSoundOffResetAllControllersLocalControlAllNotesOffOmniOnOmniOffMonoOnPolyOnControlChangeProgramChangeChannelPressure,PitchBendmidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

MIDI音符号,指定为范围[0,127]内的整数。MIDI规范将第60号音符定义为中C,所有其他音符都是相对的。MIDI设备和软件定义了音符和MIDI音符号之间的映射关系。如果任意假设MIDI硬件或软件的Middle C为C5,则MIDI音符号与音符之间的映射如下表:

依赖关系

此属性仅对NoteOnNoteOff,PolyKeyPressuremidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

MIDI消息的速度,指定为范围[0,127]内的标量整数。速度描述一个音符弹奏的快慢或“用力”。数值越大,速度越快。

依赖关系

此属性仅对NoteOn而且NoteOffmidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

键压力,指定为范围[0,127]内的标量整数。关键压力施加aftertouch到个人的音符。例如,在键盘上,按键压力描述的是按键被敲击后施加在该按键上的压力NoteOn消息被发送)。你可以使用KeyPressure为保留的音符添加表达。

依赖关系

此属性仅对PolyKeyPressuremidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

启用本地控制,指定为真正的.当本地控制设置为时,给定通道上的所有设备只响应通过MIDI接收的数据。

依赖关系

此属性仅对LocalControlmidimsg对象。

数据类型:逻辑

渠道MonoOn消息,指定为范围[0,16]中的标量整数。

依赖关系

此属性仅对MonoOnmidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

控件更改号,指定为范围[0,119]中的整数。

依赖关系

此属性仅对ControlChangemidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

控件更改值,指定为范围[0,127]中的整数。

依赖关系

此属性仅对ControlChangemidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

要切换到的程序号,指定为范围[0,127]中的整数。

依赖关系

此属性仅对ProgramChangemidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

通道压力,指定为范围[0,127]内的整数。关键压力施加aftertouch到一个通道中的所有音符。

依赖关系

此属性仅对ChannelPressuremidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

要应用的螺距变化量,指定为范围[0,16383]内的整数。中心位置(无效果)为8192.灵敏度是接收器的功能。

依赖关系

此属性仅对PitchBendmidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

序列号,指定为范围[0,7]内的整数。

依赖关系

此属性仅对MIDITimeCodeQuarterFramemidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

时间代码值,指定为范围[0,15]的整数。

依赖关系

此属性仅对MIDITimeCodeQuarterFramemidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

要去的歌曲中的位置,指定为范围[0,16383]中的整数。

依赖关系

此属性仅对SongPositionPointermidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

要切换到的歌曲号,指定为范围[0,127]中的整数。

依赖关系

此属性仅对SongSelectmidimsg对象。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

例子

全部折叠

属性可以创建MIDI note消息NoteOn而且NoteOffmidimsg对象。一个NoteOn消息表示音符应该开始演奏。一个NoteOff消息表示音符应该停止播放。或者,您可以发送第二个NoteOn速度设置为零的消息,表示音符应该停止播放。音频工具箱®提供了一个方便的语法来创建对备注和备注注销消息。

属性创建一对MIDI消息以指示“开启”和“关闭”序列请注意方便的语法。指定音符在一秒后开始,持续时间为两秒。

通道= 1;注= 60;速度= 64;持续时间= 2;时间戳= 1;MSGS = midimg (“注意”、通道、注意、速度、持续时间、时间戳)
msgs = 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对象被创建并作为数组返回。的请注意语法将关闭注释消息返回为NoteOnmidimsg对象与速度设置为0。

要分别创建“开启”和“关闭”消息,请创建两个NoteOn消息并连接它们。

MSGS = [midimg (“NoteOn”通道,注意,速度,时间戳),...midimsg (“NoteOn”通道,注意0 3)]
msgs = 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 OffNoteOffmidimsg对象。使用NoteOff语法使您能够指定发布速度。

MSGS = [midimg (“NoteOn”通道,注意,速度,时间戳),...midimsg (件的NoteOff”,通道,注意速度,3)]
msgs = 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类型作为ControlChange并设置所需参数:通道CCNumber,CCValue.若要确定分配给MIDI控制面的通道和控制号,请使用midiid.输入midiid,然后移动要标识的控件。

[ccInfo,deviceName] = midiid;
移动希望标识的控件;类型^C中止。等待控制消息…完成

midiid根据以下公式返回控件更改号和通道作为单个数字:ccInfo =(通道*1000 + CCNumber).定义一个MIDI Control Change消息来移动标识的控制器。MIDI控制面必须是双向的,才能接收控制更改消息。

channel = floor(ccInfo/1000);ccnumber = ccInfo - channel*1000;Ccvalue = 1;MSG = midimg (“ControlChange”、通道、ccnumber ccvalue)
msg = MIDI message: ControlChange Channel: 1 CCNumber: 16 CCValue: 1 Timestamp: 0 [B0 10 01]

创建一个mididevice对象使用设备名称确定使用midiid.发送MIDI消息到您的设备。

device = mididevice(deviceName);midisend(设备,味精);

程序更改消息,有时称为“补丁更改”消息,指定如何解释注释。例如,程序更改消息可以指定正在播放的乐器。要创建ProgramChangemidimsg对象时,指定midimsg类型为ProgramChange,以及所需的属性值:通道而且程序

通道= 4;程序= 7;MSG = midimg (“ProgramChange”、渠道、程序)
msg = MIDI message: ProgramChange Channel: 4 Program: 7 Timestamp: 0 [C3 07]

的序列定义系统独占消息midimsg对象:SystemExclusive数据,EOX.要创建系统独占序列,请指定SystemExclusivemidimsg类型,然后指定消息的字节。这个语法需要一个时间戳。

字节= [0 1 2];时间戳= 0;MSG = midimg (“SystemExclusive”字节,时间戳)
msg = MIDI message: SystemExclusive Timestamp: 0 [F0] Data Timestamp: 0 [00 01 02] EOX Timestamp: 0 [F7]

还可以创建SystemExclusive数据,EOXmidimsg单独的对象。例如midimsgArray与前一个相同。

MSG = [midimg (“SystemExclusive”时间戳),...midimsg (“数据”、字节数、时间戳)...midimsg (“EOX”、时间戳)
msg = MIDI message: SystemExclusive Timestamp: 0 [F0] Data Timestamp: 0 [00 01 02] EOX Timestamp: 0 [F7]

默认的MIDI消息是一个全为零字节的标量,并且类型数据

MSG = midimg
msg = MIDI message:数据时间戳:0 [00 00 00 00 00 00 00 00]

可以通过指定标量或行向量的大小来创建MIDI消息数组。

如果将大小指定为标量midimsg返回一个——- - - - - -全为零字节的数组。

味精= midimg (2)
msg = MIDI message:数据时间戳:0[00 00 00 00 00 00 00 00 00]数据时间戳:0[00 00 00 00 00 00 00 00 00 00 00]数据时间戳:0 [00 00 00 00 00 00 00 00 00 00 00 00]

MIDI消息数组总是按照它们的线性索引垂直显示。可以通过指定数组在每个维度中的位置或线性下标来引用数组的各个元素。例如,更改时间戳第三个元素的02使用线性索引,然后从23.使用一维索引。

味精(3)。时间戳= 2
msg = MIDI message:数据时间戳:0[00 00 00 00 00 00 00 00 00]数据时间戳:0[00 00 00 00 00 00 00 00 00 00 00]数据时间戳:2[00 00 00 00 00 00 00 00 00 00]数据时间戳:0 [00 00 00 00 00 00 00 00 00 00 00 00 00]
味精(1、2)。时间戳= 3
msg = MIDI message:数据时间戳:0[00 00 00 00 00 00 00 00 00]数据时间戳:0[00 00 00 00 00 00 00 00 00 00 00]数据时间戳:3[00 00 00 00 00 00 00 00 00 00]数据时间戳:0 [00 00 00 00 00 00 00 00 00 00 00 00 00]

也可以指定非对称数组。如果将大小指定为两个或多个元素的行向量,midimsg返回一个——- - - - - -N——-…X多维数组。例如,要指定一个三维数组,其中每个维度具有不同数量的元素,请将大小指定为包含三个元素的行向量。

MSG = midimg ([2,1,3])
味精= MIDI消息:数据的时间戳:0(00 00 00 00 00 00 00 00)数据的时间戳:0(00 00 00 00 00 00 00 00)数据的时间戳:0(00 00 00 00 00 00 00 00)数据的时间戳:0(00 00 00 00 00 00 00 00)数据的时间戳:0(00 00 00 00 00 00 00 00)数据的时间戳:0 (00 00 00 00 00 00 00 00)
大小(味精)
ans =1×32 1 3
MSG = midimg (0)
空MIDI消息数组

在本例中,您创建了一个MIDI消息数组,然后在循环中索引到该数组以定义旋律。

创建一个22乘1的MIDI消息数组,所有数据为零。

msgArray = midimg ([22,1]);

创造旋律,创造迷笛NoteOn而且NoteOff通过在循环中索引消息。显示结果。

旋律= [60,65,60,57,55,53,60,65,60,67,60];I = 1:数字(旋律)idx = (2* I -1):(2* I);msgArray(idx) = midimg (“注意”1,旋律(i), 50岁,0.5,我);结束msgArray
msgArray = MIDI消息:NoteOn通道:1注意:60速度:50时间戳:1 (90 3 c 32) NoteOn通道:1注意:60速度:0时间戳:1.5 (3 c 90 00) NoteOn通道:1注意:65速度:50时间戳:2 [90 41 32]NoteOn通道:1注意:65速度:0时间戳:2.5 (41 90 00)NoteOn通道:1注意:60速度:50时间戳:3 (90 3 c 32) NoteOn频道:1注意:60速度:0时间戳:3.5 (3 c 90 00) NoteOn通道:1注意:57速度:50时间戳:4 [90 39 32] NoteOn通道:1注意:57速度:0时间戳:4.5 (39 90 00)NoteOn通道:1注意:55速度:50时间戳:5 [90 37 32]NoteOn通道:1注意:55速度:0时间戳:5.5 (37 90 00)NoteOn通道:1注意:53速度:50时间戳:6 [90 35 32]NoteOn通道:1注意:53速度:0时间戳:6.5 (35 90 00)NoteOn通道:1注意:60速度:50时间戳:7 [90 3 c 32] NoteOn通道:1注意:60速度:0时间戳:7.5 (3 c 90 00) NoteOn频道:1注意:65速度:50个时间戳:8 [90 41 32]NoteOn通道:1注意:65速度:0时间戳:8.5 (41 90 00)NoteOn通道:1注意:60速度:50时间戳:9 (90 3 c 32) NoteOn通道:1注意:60速度:0时间戳:9.5 (3 c 90 00) NoteOn通道:1注意:67速度:50时间戳:10 [90 43 32]NoteOn通道:1注意:67速度:0时间戳:10.5 (43 90 00)NoteOn通道:1注意:60速度:50时间戳:11 [90 3 c 32] NoteOn通道:1注意:60速度:0时间戳:11.5 [90 3C 00]

MIDI消息在数组中的顺序只对可读性重要。发送MIDI消息时使用mididevice对象,mididevice对象根据它们的时间戳重新排序MIDI消息,并按时间顺序发送它们。创建一个PitchBendMIDI消息将第四个音符向下弯曲并将其添加到MIDI消息数组中。为了可读性,对MIDI消息数组进行排序时间戳

MSG = midimg (“PitchBend”, 7192, 4.01);msgArray = [msgArray;msg]
msgArray = MIDI消息:NoteOn通道:1注意:60速度:50时间戳:1 (90 3 c 32) NoteOn通道:1注意:60速度:0时间戳:1.5 (3 c 90 00) NoteOn通道:1注意:65速度:50时间戳:2 [90 41 32]NoteOn通道:1注意:65速度:0时间戳:2.5 (41 90 00)NoteOn通道:1注意:60速度:50时间戳:3 (90 3 c 32) NoteOn频道:1注意:60速度:0时间戳:3.5 (3 c 90 00) NoteOn通道:1注意:57速度:50时间戳:4 [90 39 32] NoteOn通道:1注意:57速度:0时间戳:4.5 (39 90 00)NoteOn通道:1注意:55速度:50时间戳:5 [90 37 32]NoteOn通道:1注意:55速度:0时间戳:5.5 (37 90 00)NoteOn通道:1注意:53速度:50时间戳:6 [90 35 32]NoteOn通道:1注意:53速度:0时间戳:6.5 (35 90 00)NoteOn通道:1注意:60速度:50时间戳:7 [90 3 c 32] NoteOn通道:1注意:60速度:0时间戳:7.5 (3 c 90 00) NoteOn频道:1注意:65速度:50个时间戳:8 [90 41 32]NoteOn通道:1注意:65速度:0时间戳:8.5 (41 90 00)NoteOn通道:1注意:60速度:50时间戳:9 (90 3 c 32) NoteOn通道:1注意:60速度:0时间戳:9.5 (3 c 90 00) NoteOn通道:1注意:67速度:50时间戳:10 [90 43 32]NoteOn通道:1注意:67速度:0时间戳:10.5 (43 90 00)NoteOn通道:1注意:60速度:50时间戳:11 [90 3 c 32] NoteOn通道:1注意:60速度:0时间戳:11.5 [90 3C 00]音弯通道:1音变:7192时间戳:4.01 [E0 18 38]
时间戳= [msgArray.Timestamp];[~,idx] = sort(时间戳);msgArray = msgArray(idx)
msgArray = MIDI消息:NoteOn通道:1注意:60速度:50时间戳:1 (90 3 c 32) NoteOn通道:1注意:60速度:0时间戳:1.5 (3 c 90 00) NoteOn通道:1注意:65速度:50时间戳:2 [90 41 32]NoteOn通道:1注意:65速度:0时间戳:2.5 (41 90 00)NoteOn通道:1注意:60速度:50时间戳:3 (90 3 c 32) NoteOn频道:1注意:60速度:0时间戳:3.5 (3 c 90 00) NoteOn通道:1注意:57速度:50时间戳:4 [90 39 32] PitchBend通道:1 PitchChange: 7192时间:4.01 (E0 18 38) NoteOn通道:1注意:57速度:0时间戳:4.5 (39 90 00)NoteOn通道:1注意:55速度:50时间戳:5 [90 37 32]NoteOn通道:1注意:55速度:0时间戳:5.5 (37 90 00)NoteOn通道:1注意:53速度:50时间戳:6 [90 35 32]NoteOn通道:1注意:53速度:0时间戳:6.5 (35 90 00)NoteOn通道:1注意:60速度:50时间戳:7 [90 3 c 32] NoteOn频道:1注意:60速度:0时间戳:7.5 (3 c 90 00) NoteOn通道:1注意:65速度:50时间戳:8 [90 41 32]NoteOn通道:1注意:65速度:0时间戳:8.5 (41 90 00)NoteOn通道:1注意:60速度:50时间戳:9 (90 3 c 32) NoteOn通道:1注意:60速度:0时间戳:9.5 (3 c 90 00) NoteOn通道:1注意:67速度:50时间戳:10 [90 43 32]NoteOn通道:1注意:67速度:0时间戳:10.5 (43 90 00)NoteOn通道:1注意:60速度:50时间戳:11 [90 3C 32] NoteOn Channel: 1 Note: 60 Velocity: 0时间戳:11.5 [90 3C 00]

版本历史

在R2018a中引入