乐器数字接口(MIDI)最初是为了相互连接电子乐器而开发的。这个接口是灵活的,在应用程序中的用途远远超出了乐器。其简单的单向消息传递协议支持多种不同的消息传递。金宝appMIDI消息的一种是控制变更消息,用于传达控件的更改,如旋钮、滑块和按钮。
一个MIDI控制面是一种带有控件的设备,当您转动旋钮、移动滑块或按下其表面的按钮时,它会发送MIDI控制更改消息。每个控件更改消息表明哪个控件更改了以及它的新位置是什么。
由于MIDI消息传递协议是单向的,因此确定特定的控制器位置需要接收方侦听控制器发送的Control Change消息。协议不支持查询MIDI控制器的位置。金宝app
最简单的MIDI控制面是单向的:它们发送MIDI控制更改消息,但不接收它们。更复杂的控制面是双向的:它们可以发送和接收control Change消息。这些控制面具有可以自动操作的旋钮或滑块。例如,控制面可以有机动滑块或旋钮。当它接收到Control Change消息时,相应的控件将移动到消息中的位置。
音频工具箱™使您能够使用MIDI控制面来控制MATLAB®程序和Simulink金宝app®通过提供监听Control Change消息的能力来建模。工具箱还提供了发送Control Change消息以支持同步MIDI控件的有限功能。金宝app本教程介绍了一般的MIDI函数。有关MATLAB中特定于音频插件的函数,请参见音频插件的MIDI控制.音频工具箱到MIDI控制面的通用接口包括五个函数和一个块:
midiid
——交互式识别MIDI控制。
midicontrols
—打开MIDI控件组用于读取。
midiread
——返回MIDI控件的最新值。
midisync
——发送值到MIDI控件进行同步。
midicallback
MIDI控制更改值时调用函数句柄。
MIDI控制(block)——从MIDI控制面上的控件输出值。的MIDI控制block将一般MIDI函数的功能组合成一个用于Simulink环境的块。金宝app
该图展示了MATLAB中涉及通用MIDI函数的典型工作流程。对于Simuli金宝appnk环境,请执行步骤1和步骤2,然后使用MIDI控制块用于用户界面引导的工作流。
在开始使用MATLAB之前,请将MIDI控制面连接到计算机并打开它。有关连接说明,请参阅MIDI设备的说明。如果在连接设备之前启动MATLAB,则在连接设备时MATLAB可能无法识别设备。要纠正这个问题,请使用已经连接的设备重新启动MATLAB。
使用midiid
函数来确定MIDI控制面的设备名称和控制号。在你打电话之后midiid
,它继续监听,直到收到Control Change消息。当它接收到Control Change消息时,它将返回与您所操作的MIDI控制器编号相关联的控件号,并可选地返回MIDI控制面的设备名称。设备名称由制造商和主机操作系统决定。看到控制数量以解释MATLAB如何计算控制数。
如需设置默认设备名,请参见设置默认MIDI设备.
使用midicontrols
函数来创建一个对象,该对象监听Control Change消息并缓存与指定控制器对应的最新值。当你创建midicontrols
对象,则通过设备名称指定MIDI控制面,并通过其关联的控制号指定表面上的特定控制器。因为midicontrols
对象无法查询MIDI控制面以获取初始值,请考虑在创建对象时设置初始值。
使用midiread
函数查询您的midicontrols
对象获取当前控件值。midiread
控件中所有控制器的对应值返回一个矩阵midicontrols
对象正在监听。一般来说,你要放置midiread
在音频流循环中进行持续更新。
你可以使用midisync
将Control Change消息发送到MIDI控制面。如果MIDI控制面是双向的,则调整指定的控制器。的一个重要用途midisync
是将MIDI控制面上的控制器位置设置为初始值。
另一个重要的用法midisync
如果在音频流循环中调整了控件值,则更新MIDI控件面。在这种情况下,你打电话midisync
用你的midicontrols
对象和更新后的控件值。
midisync
在涉及用户界面(ui)的系统中,也是一个强大的工具,因此当一个控件更改时,另一个控件跟踪它。上的回调函数通常可以实现这种跟踪midicontrols
对象(使用midicallback
)和UI控件。的回调。midicontrols
对象向UI控件发送新值。UI使用midisync
方法发送新值midicontrols
对象和MIDI控制面。看到midisync
为例子。
你可以使用midicallback
作为放置的替代方案midiread
在音频流循环中。如果一个midicontrols
对象接收一个Control Change消息,midicallback
自动调用指定的函数句柄。回调函数通常调用midiread
来确定MIDI控件的新值。当您希望MIDI控制器触发某个动作(例如更新UI)时,可以使用此回调。使用这种方法可以防止在命令窗口中连续运行MATLAB程序。
方法在MATLAB环境中设置默认的MIDI设备setpref
函数。使用midiid
确定设备的名称,然后使用setpref
设置首选项。
[~,deviceName] = midiid .使用实例
移动希望标识的控件;类型^C中止。等待控制消息…done deviceName = BCF2000
setpref (“midi”,“DefaultDevice”设备名称)
如果您没有设置此首选项,MATLAB和主机操作系统将为您选择一个设备。然而,这种自动选择可能会导致不可预测的结果,因为许多计算机都安装了“虚拟”(软件)MIDI设备,而您可能不知道这些设备。对于可预测的行为,设置首选项。
MATLAB将控制数定义为(MIDI通道号) × 1000 + (MIDI控制器编号).
MIDI通道号是设备用于发送消息的传输通道。取值范围为1 ~ 16。
MIDI控制器编号是分配给MIDI设备上单个控件的数字。取值范围为1 ~ 127。
的值由MIDI设备决定MIDI通道号而且MIDI控制器编号.