主要内容

MIDI设备接口

MIDI

本教程介绍了乐器数字接口(MIDI)协议和如何使用音频工具箱™与MIDI设备进行交互。这里所描述的工具使您可以发送和接收所有MIDI消息所描述的MIDI协议。如果你有兴趣只有在发送和接收控制改变消息与MIDI控制表面,明白了MIDI控制表面界面。如果你有兴趣使用MIDI控制音频插件,看看MIDI控制音频插件。了解更多关于MIDI,咨询MIDI制造商协会

MIDI是电子仪器之间的通信的技术标准,电脑及相关设备。MIDI事件消息特定的音频信号,如音调和速度,以及参数的控制信号和时钟信号同步节奏。

MIDI设备

一个MIDI设备任何设备能够发送或接收的MIDI消息。MIDI设备输入端口、输出端口,或两者兼而有之。MIDI协议定义了消息看作是单向的。MIDI设备可以现实或虚拟。

音频工具使您能够创建一个接口的MIDI设备使用mididevice。创建一个MIDI接口特定的设备,使用mididevinfo查询您的系统可用设备。然后创建一个mididevice对象指定一个MIDI设备名称或ID。

mididevinfo
MIDI设备可用:接口名称标识方向0输出MMSystem微软MIDI Mapper的1输入MMSystem的USB MIDI接口2输出MMSystem微软GS波表Synth的3输出MMSystem USB MIDI接口的
设备= mididevice (“USB MIDI接口”)
设备连接到输入:= mididevice的USB MIDI接口(1)输出:“USB MIDI接口”(3)

您可以指定一个mididevice对象监听输入消息,发送输出消息,或两者兼而有之。在这个例子中,mididevice在输入端口命名对象接收的MIDI消息“USB MIDI接口”从输出端口,发送MIDI消息命名“USB MIDI接口”

MIDI消息

一个MIDI消息包含描述一个audio-related行动信息。例如,当你在键盘上按下一个键,相应的MIDI消息包含3个字节:

  1. 第一个字节描述的行动和通道。第一个字节称为状态字节

  2. 第二个字节描述按下的是哪个键。第二个字节称为数据字节

  3. 第三个字节描述关键是多么困难。第三个字节也是一个数据字节。

这个消息是一个注意在消息。注意在被称为消息名称,命令,或类型。

在MATLAB®,打包为MIDI消息midimsg对象,可以操纵标量或数组。创建一个MIDI消息,电话midimsg与一个消息类型,然后为特定消息类型指定所需的参数。例如,创建一个注释信息,指定midimsg类型作为“NoteOn”然后指定所需的输入:通道,注意,和速度。

频道= 1;注意= 60;速度= 64;味精= midimsg (“NoteOn”通道,请注意,速度)
味精= MIDI消息:NoteOn通道:1注意:60速度:64时间:0 (90 3 c 40)

为了方便起见,midimsg显示消息类型、通道、其他参数,时间戳,构造消息以十六进制形式。十六进制是首选形式,因为它有一个简单的解释:

发送和接收的MIDI消息

要发送和接收的MIDI消息,可以使用mididevice对象的功能midisendmidireceive。当您创建一个mididevice对象,它开始接收数据的输入,并把它放在一个缓冲区。

从缓冲区获取MIDI消息,电话midireceive

receivedMessages = midireceive(设备)
receivedMessages = MIDI消息:NoteOn通道:1注意:36速度:64时间:15861.9 (90 24 40)NoteOn通道:1注意:36速度:0时间戳:15862.1 24 00 [90]
MIDI消息作为一个数组返回midimsg对象。在这个例子中,一个MIDI键盘键被按下。

MIDI设备发送的MIDI消息,电话midisend

midisend(设备,味精)

MIDI消息类型

您创建的类型的MIDI消息被定义为一个字符或字符串向量。创建一个MIDI消息,指定它的类型和所需的属性值。例如,创建一个通道压力MIDI消息在命令提示符处输入以下命令来:

channelPressureMessage = midimsg (“ChannelPressure”1 20)
channelPressureMessage = MIDI消息:ChannelPressure通道:1 ChannelPressure: 20时间戳:0 (D0 14)
创建一个MIDI消息后,你可以修改属性,但不能修改类型。
channelPressureMessage。ChannelPressure = 37
channelPressureMessage = MIDI消息:ChannelPressure通道:1 ChannelPressure: 37个时间戳:0 (D0 25)

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

音频工具箱提供了方便的语法来创建多个MIDI消息用于MIDI消息的序列和创建数组。看到midimsg语法的完整列表。

MIDI消息时间

MIDI协议没有定义消息时机和假设消息立即应用。许多应用程序需要排队时间信息和批处理。为了方便起见,音频工具箱包与MIDI消息到一个单一的计时信息midimsg对象。所有midimsg对象有一个时间戳设置属性,该属性在创建作为一个可选的最后一个参数或之后的创造。默认的时间戳是零。

的解释时间戳属性取决于一个MIDI消息创建和使用:

  • 当收到MIDI消息使用midireceive底层基础设施接收MIDI消息分配一个时的时间戳。从概念上讲,定时时钟开始当一个mididevice创建对象和作为一个监听器附加到一个给定的MIDI输入端口。如果另一个mididevice被连接到相同的输入端口,它接收来自同一时间时钟时间戳作为第一个对象。

  • 当发送MIDI消息使用midisend时间戳是解释为何时发送消息。

    如果没有最近的调用midisend,然后midisend解释时间戳是相对于当前现实世界的时间。一个消息的时间戳零立即发送。如果有最近的电话midisend,然后midisend解释时间戳作为最大相对时间戳的最后一个电话midisend。的时间戳的时钟midisend是特定于MIDI输出端口mididevice连接到。

    考虑一双MIDI打开和关闭报告的消息。消息指定注1秒后开始,持续1秒。

    创建注意和注意信息。创建注意消息,使用“NoteOn”MIDI消息类型,并指定零速度。(如果你想指定一个速度,使用件的NoteOff”消息类型)。有关更多信息,请参见midimsg

    OnMsg = midimsg (“NoteOn”,1,59,64);OffMsg = midimsg (“NoteOn”59岁的1 0);

    发送了消息使用一个调用midisend指定消息的时间戳,相对于同样的开始时间。

    OnMsg。时间戳= 1;OffMsg。时间戳= 2;midisend(设备,(OnMsg; OffMsg)))

    单独发送注意了消息,指定时间戳的注意消息相对于最大的时间戳之前调用midisend

    OnMsg。时间戳= 1;OffMsg。时间戳= 1;OnMsg midisend(设备)midisend(设备,OffMsg)

    “开始”时间,或参考时间midisend之间的最大绝对时间和最大的时间戳在过去的电话吗midisend。例如,考虑这一点x任意的开始时间,等于当前的绝对时间。如果之间有一个1.5秒的暂停发送的注意和注意信息,由此产生的注意时间是1.5秒。

    OnMsg。时间戳= 1;OffMsg。时间戳= 1;OnMsg midisend(设备)暂停(1.5)midisend(设备,OffMsg)

    通常,MIDI消息被发送比或实时速度快所以没有需要跟踪的绝对时间。

    现场表演或在MIDI流启用中断,你可以设置时间戳为零,然后调用midisend在适当的实际时间间隔。根据你的用例,你可以把你的MIDI流成小块可重复的时间。

另请参阅

功能

相关的话题

外部网站