主要内容

MIDI控制面接口

关于MIDI

乐器数字接口(MIDI)最初是为了相互连接电子乐器而开发的。这个接口是灵活的,在应用程序中的用途远远超出了乐器。其简单的单向消息传递协议支持多种不同的消息传递。金宝appMIDI消息的一种是控制变更消息,用于传达控件的更改,如旋钮、滑块和按钮。

MIDI控制面

一个MIDI控制面是一种带有控件的设备,当您转动旋钮、移动滑块或按下其表面的按钮时,它会发送MIDI控制更改消息。每个控件更改消息表明哪个控件更改了以及它的新位置是什么。

由于MIDI消息传递协议是单向的,因此确定特定的控制器位置需要接收方侦听控制器发送的Control Change消息。协议不支持查询MIDI控制器的位置。金宝app

最简单的MIDI控制面是单向的:它们发送MIDI控制更改消息,但不接收它们。更复杂的控制面是双向的:它们可以发送和接收control Change消息。这些控制面具有可以自动操作的旋钮或滑块。例如,控制面可以有机动滑块或旋钮。当它接收到Control Change消息时,相应的控件将移动到消息中的位置。

使用MIDI控制面MATLAB而且金宝app

音频工具箱™使您能够使用MIDI控制面来控制MATLAB®程序和Simulink金宝app®通过提供监听Control Change消息的能力来建模。工具箱还提供了发送Control Change消息以支持同步MIDI控件的有限功能。金宝app本教程介绍了一般的MIDI函数。有关MATLAB中特定于音频插件的函数,请参见音频插件的MIDI控制.音频工具箱到MIDI控制面的通用接口包括五个函数和一个块:

  • midiid——交互式识别MIDI控制。

  • midicontrols—打开MIDI控件组用于读取。

  • midiread——返回MIDI控件的最新值。

  • midisync——发送值到MIDI控件进行同步。

  • midicallbackMIDI控制更改值时调用函数句柄。

  • MIDI控制(block)——从MIDI控制面上的控件输出值。的MIDI控制block将一般MIDI函数的功能组合成一个用于Simulink环境的块。金宝app

该图展示了MATLAB中涉及通用MIDI函数的典型工作流程。对于Simuli金宝appnk环境,请执行步骤1和步骤2,然后使用MIDI控制块用于用户界面引导的工作流。

1.连接MIDI设备,然后启动MATLAB

在开始使用MATLAB之前,请将MIDI控制面连接到计算机并打开它。有关连接说明,请参阅MIDI设备的说明。如果在连接设备之前启动MATLAB,则在连接设备时MATLAB可能无法识别设备。要纠正这个问题,请使用已经连接的设备重新启动MATLAB。

2.确定设备名称和控制号

使用midiid函数来确定MIDI控制面的设备名称和控制号。在你打电话之后midiid,它继续监听,直到收到Control Change消息。当它接收到Control Change消息时,它将返回与您所操作的MIDI控制器编号相关联的控件号,并可选地返回MIDI控制面的设备名称。设备名称由制造商和主机操作系统决定。看到控制数量以解释MATLAB如何计算控制数。

如需设置默认设备名,请参见设置默认MIDI设备

视图的例子

3.为控制变更消息创建侦听器

使用midicontrols函数来创建一个对象,该对象监听Control Change消息并缓存与指定控制器对应的最新值。当你创建midicontrols对象,则通过设备名称指定MIDI控制面,并通过其关联的控制号指定表面上的特定控制器。因为midicontrols对象无法查询MIDI控制面以获取初始值,请考虑在创建对象时设置初始值。

视图的例子

4.获取当前控制值

使用midiread函数查询您的midicontrols对象获取当前控件值。midiread控件中所有控制器的对应值返回一个矩阵midicontrols对象正在监听。一般来说,你要放置midiread在音频流循环中进行持续更新。

视图的例子

5.同步双向MIDI控制面

你可以使用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程序。

设置默认MIDI设备

方法在MATLAB环境中设置默认的MIDI设备setpref函数。使用midiid确定设备的名称,然后使用setpref设置首选项。

[~,deviceName] = midiid .使用实例
移动希望标识的控件;类型^C中止。等待控制消息…done deviceName = BCF2000
setpref (“midi”“DefaultDevice”设备名称)
这种偏好在MATLAB会话中持续存在,所以您只需要设置一次,除非您想更改设备。

如果您没有设置此首选项,MATLAB和主机操作系统将为您选择一个设备。然而,这种自动选择可能会导致不可预测的结果,因为许多计算机都安装了“虚拟”(软件)MIDI设备,而您可能不知道这些设备。对于可预测的行为,设置首选项。

控制数量

MATLAB将控制数定义为MIDI通道号) × 1000 + (MIDI控制器编号

  • MIDI通道号是设备用于发送消息的传输通道。取值范围为1 ~ 16。

  • MIDI控制器编号是分配给MIDI设备上单个控件的数字。取值范围为1 ~ 127。

的值由MIDI设备决定MIDI通道号而且MIDI控制器编号

另请参阅

功能

相关的话题

外部网站