主要内容

MIDI设备界面

迈尔

本教程介绍了乐器数字接口(MIDI)协议以及如何使用Audio Toolbox™与MIDI设备进行交互。此处描述的工具使您可以发送和接收MIDI协议所述的所有MIDI消息。如果您仅对使用MIDI控制表面发送和接收控制更改消息感兴趣,请参阅MIDI控制表面界面。如果您有兴趣使用MIDI来控制音频插件,请参阅音频插件的MIDI控件。了解更多关于MIDI的更多信息,请咨询MIDI制造商协会

MIDI是电子仪器,计算机和相关设备之间的通信技术标准。MIDI承载特定于音频信号的事件消息,例如音高和速度,以及用于参数和时钟信号的控制信号,以同步速度。

MIDI设备

一种MIDI设备是否能够发送或接收MIDI消息的任何设备。MIDI设备具有输入端口,输出端口或两者。MIDI协议将消息定义为单向。MIDI设备可以是真实世界或虚拟的。

Audio Toolbox使您可以使用MIDI设备创建接口迈德养。要为特定设备创建MIDI接口,请使用MidideVinfo.为可用设备查询系统。然后创建一个迈德养对象通过名称或ID指定MIDI设备。

MidideVinfo.
可用MIDI设备:ID方向接口名称0输出MMSYSTEM'Microsoft MIDI MAPPER'1 INPUT MMSYSTEM'USB MIDI接口'2输出MMSYSTEM'Microsoft GS波形合成器'3输出MMSYSTEM'USB MIDI接口'
设备= MIDidevice('USB MIDI接口'
Device = MIDidevice连接到输入:'USB MIDI接口'(1)输出:'USB MIDI接口'(3)

您可以指定一个迈德养要侦听输入消息,请发送输出消息或两者的对象。在这个例子中,迈德养对象在命名的输入端口接收MIDI消息'USB MIDI接口',并从命名的输出端口发送MIDI消息'USB MIDI接口'

MIDI消息

一种MIDI消息包含描述与音频相关操作的信息。例如,当您按键盘上的键时,相应的MIDI消息包含3个字节:

  1. 第一个字节描述了一种动作和频道。第一个字节被称为状态字节

  2. 第二个字节描述了按下该键。第二个字节被称为a数据字节

  3. 第三个字节描述了键的播放程度。第三个字节也是数据字节。

这条消息是一个注意事项信息。注意上称为消息名称,命令或类型。

在matlab.®,MIDI消息被打包为米米对象,可以作为标量或数组操纵。要创建MIDI消息,请致电米米使用消息类型,然后为特定消息类型指定所需的参数。例如,要在消息上创建注释,请指定米米类型作为'笔记'然后指定所需的输入:频道,注意和速度。

通道= 1;注意= 60;速度= 64;msg = midimsg('笔记',频道,注意,速度)
MSG = MIDI消息:注释通道:1注意:60速度:64时间戳:0 [90 3C 40]

为了方便,米米以十六进制形式显示消息类型,通道,附加参数,时间戳和构造的消息。十六进制是首选形式,因为它具有简单的解释:

发送和接收MIDI消息

要发送和接收MIDI消息,请使用迈德养对象功能中间人中间人。当你创建一个迈德养对象,它开始在其输入端接收数据并将其放在缓冲区中。

从缓冲区中检索MIDI消息,调用中间人

RecoctionMessages = midieceive(设备)
RecoctionMessages = MIDI消息:1注意:1注意:36速度:64时间戳:15861.9 [90 24 40]笔记码:1注意:36速度:0时间戳:15862.1 [90 24 00]
MIDI消息作为数组返回米米对象。在此示例中,按下MIDI键盘键。

将MIDI消息发送到MIDI设备,致电中间人

MIDISEND(设备,MSG)

MIDI消息类型

您创建的MIDI消息类型被定义为字符向量或字符串。要创建MIDI消息,请按其类型和所需属性值指定它。例如,通过在命令提示符下输入以下内容,创建频道压力MIDI消息:

ChannetPressUreMessage = Midimsg('channcressure',1,20)
ChannetPressUreMessage = MIDI消息:通道压缩通道:1通道压缩:20时间戳:0 [D0 14]
创建MIDI消息后,您可以修改属性,但无法修改类型。
ChannetPressUreMessage.ChannelPressure = 37.
ChannetPressUreMessage = MIDI消息:通道压缩通道:1通道压缩:37时间戳:0 [D0 25]

该表总结了有效的MIDI消息类型。

音频工具箱提供了方便语法,以创建序列使用的多个MIDI消息,并创建MIDI消息数组。看米米有关完整的语法列表。

MIDI消息时序

MIDI协议没有定义消息时序,并假设立即采取消息。许多应用程序需要用于排队和批处理的时间信息。为方便起见,音频工具箱将与MIDI消息的定时信息包装成单个米米目的。全部米米物体有一个时间戳属性,在创建期间设置为可选的最后一个参数或创建后。默认值时间戳是零。

解释时间戳属性取决于如何创建和使用MIDI消息:

  • 使用时收到MIDI消息中间人,底层基础架构在接收MIDI消息时分配时间戳。概念上,定时时钟开始时迈德养创建对象并将其作为侦听器连接到给定的MIDI输入端口。如果是另一个迈德养附加到相同的输入端口,它从与第一个对象相同的定时时钟接收时间戳。

  • 发送MIDI消息时中间人,时间戳被解释为何时发送消息。

    如果没有最近的电话中间人, 然后中间人将时间戳解释为相对于当前的真实世界的时间。立即发送带有零时间戳的消息。如果有一个最近的电话中间人, 然后中间人将时间戳解释为相对于最后一个呼叫的最大时间戳中间人。时间戳时钟中间人特定于MIDI输出端口迈德养连接到。

    考虑一对MIDI消息,即开启和关闭笔记。消息指定了备注在一秒钟后开始,并且持续一秒钟。

    创建注意和记下消息。

    onmsg = midimsg('笔记',1,59,64);offmsg = midimsg('笔记',1,59,0);

    使用单个呼叫发送打开和关闭消息中间人,指定相对于相同开始时间的消息的时间戳。

    onmsg.timestamp = 1;offmsg.timestamp = 2;MIDISEND(设备,[onmsg; offmsg]))

    要单独发送注释消息,请指定相对于前一个调用的最大时间戳的记录消息的时间戳中间人

    onmsg.timestamp = 1;offmsg.timestamp = 1;MIDISEND(设备,onmsg)中等菜单(设备,offmsg)

    “开始”时间或参考时间中间人是绝对时间和最后一个呼叫中最大时间戳之间的最大值中间人。例如,考虑一下X,任意开始时间等于当前绝对时间。如果在发送注意事项和记录消息之间有1.5秒的暂停,则产生的音符持续时间为1.5秒。

    onmsg.timestamp = 1;offmsg.timestamp = 1;MIDISEND(设备,onmsg)暂停(1.5)MIDisend(设备,offmsg)

    通常,MIDI消息的发送速度快于或以实时速度快,因此无需跟踪绝对时间。

    对于实时表演或在MIDI流中启用中断,您可以将时间戳设置为零,然后调用中间人在适当的真实时间间隔。根据您的用例,您可以将MIDI流划分为小重复的时间块。

也可以看看

班级

职能

相关话题

外部网站