一种易于发送和接收MIDI消息的包。

py-midi的Python项目详细描述


只需使用python3发送和接收MIDI消息。

这个程序的发布是希望它会有用,但没有任何保证。

警告:仅与python3一起使用。图书馆不能用python2。

一。目的

python3库是为了方便与任何midi设备通信而设计的。唯一的要求就是要有一个序列号 你机器上的接口。在这个接口上,您必须连接MIDI电缆才能在 机器和MIDI设备。

py midi库允许用户构建和/或读取midi消息,而不必担心在发送和/或接收之前对它们进行格式化。

MIDI(乐器数字接口)是一个标准,用于简化乐器、计算机和其他电子设备 沟通。

这个库能够处理任何类型的midi消息、16个可能的通道中的任何一个(对于通道类型消息)或任何类型的sysex消息。

有关MIDI标准的详细信息,请参见Wikipedia MIDI页面https://en.wikipedia.org/wiki/MIDI

2.安装

使用pip轻松安装软件包:

$ pip3 install py-midi

然后您可以将包导入程序:

>>>importmidi

三。开始

在程序和计算机的串行端口之间创建接口。通过给出串行端口的路径来实例化。示例:

>>>frommidiimportMidiConnector>>>conn=MidiConnector('/dev/serial0')# path to use on RaspberryPi 3

如果不希望^ {tt1} $方法永远不被阻塞,则使用关键字参数^ {STR 1 } $TimeOuts设置阻塞的最大持续时间(秒):

>>>conn=MidiConnector('/dev/serial0',timeout=5)

timeoutkwarg只用于读取,不用于写入。

要发送MIDI消息,首先需要实例化MidiMessageType。有8种不同类型的MIDI消息。它们在这里,有实例化参数:

  • NoteOff(note_number, velocity)
  • NoteOn(note_number, velocity)
  • PolyphonicAftertouch(note_number, pressure)
  • ChannelAftertouch(pressure)
  • ControlChange(control_number, value)
  • ProgramChange(program_number)
  • PitchWheel(lsbyte, msbyte)
  • SysEx(manufacturer_id, data1, data2..., dataN)

注释 除了SysExdata(0到255)或ProgramChangenumber(1到128),所有实例参数都必须包含在[0,127]中。

示例:创建类型ControlChange

>>>frommidiimportControlChange>>>cc=ControlChange(100,127)

现在构建完整的消息,提供一个频道:

>>>frommidiimportMessage>>>msg=Message(cc,channel=1)

您可以直接访问邮件的属性:

>>>msg.control_number100>>>msg.value127

使用接口将消息发送到MIDI输出:

>>>conn.write(msg)# returns the number of bytes sent3

要读取通过midi-in接收的消息,请使用方法read(),如下所示:(此处,我们)

>>>msg=conn.read()# read on ANY channel by default>>># Pretend to receive a ProgramChange message, on channel 2>>>msgMessage(ProgramChange(35),2)>>>msg.channel2>>>msg.typeProgramChange(35)>>>msg.program_number35

默认情况下,连接器的read()方法以omni模式读取。要指定频道,请添加频道号作为参数:

>>>msg=conn.read(8)# read only on channel 8, ignore the rest

根据midi标准,有16个频道可以读取,编号从1到16。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java类之间并发性不一致的HashMap   插件如何在JavaSwing中使用UIManager和Classloader从外部jar安装外观?   java JasperReports:找不到子报表   在项目中找不到java生成的Javadoc文件   java BigDecimal。multiply()和divide()方法返回十六进制数。为什么?   java统计出现次数并从字符串中删除重复项   调用运算符时发生java NullPointerException   Spring和Hibernate之间的java配置错误   JavaZK将用户重定向回上一页   Javasocket为传出连接指定特定的网络接口   如果拖动到某个区域外,java Make按钮操作将被取消   如何在Eclipse for selenium 3.141.59中添加Java文档链接   java从匹配条件的数组中获取所有索引   docker未连接到RemoteWebDriver的java Gitlab ci selenium测试   java重写run方法   utf 8如何使用java解码UTF8编码的字符串?   java如何从eclipse调试部署在tomcat上的web应用程序?   将字母字符与前面没有百分号的Java正则表达式匹配