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个字节:
第一个字节描述的行动和通道。第一个字节称为状态字节。
第二个字节描述按下的是哪个键。第二个字节称为数据字节。
第三个字节描述关键是多么困难。第三个字节也是一个数据字节。
这个消息是一个注意在消息。注意在被称为消息名称,命令,或类型。
在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
对象的功能midisend
和midireceive
。当您创建一个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]
midimsg
对象。在这个例子中,一个MIDI键盘键被按下。
MIDI设备发送的MIDI消息,电话midisend
。
midisend(设备,味精)
MIDI消息类型
您创建的类型的MIDI消息被定义为一个字符或字符串向量。创建一个MIDI消息,指定它的类型和所需的属性值。例如,创建一个通道压力MIDI消息在命令提示符处输入以下命令来:
channelPressureMessage = midimsg (“ChannelPressure”1 20)
channelPressureMessage = MIDI消息:ChannelPressure通道:1 ChannelPressure: 20时间戳:0 (D0 14)
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流成小块可重复的时间。