一种易于发送和接收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模拟存储库对象从controller testcase返回空结果?   Java扫描程序跳行异常   c#混淆If语句?   java为什么日志中的stacktrace前面没有这一行?   java如何使SSHJ在非标准端口上启动出站SFTP?   java我如何确定为什么每周收入没有在我的程序中显示前三次?   java如何判断堆叠条形图的轴的行为?   java rest json API的Web服务器体系结构   java ClassCastException:javax。摆动按扭   Java在Linux上不读取excel文件(使用Apache POI)   反馈错误后,java Wicket 1.4.9无法从modal使用AjaxRequestTarget!   java方法头中“静态”的含义是什么?   java无法在我的tomcat应用程序中添加外部库   java使用Itext Pdf将图像添加到Pdf文件   java为什么当我调用universe时java3d会闪烁。getCanvas()。getView()。重新油漆();   java Gson嵌套类在使用proguard时为空   java如何确定JSON路径对文档是否有效   java在使用Jsoup解析时保持HTML布尔属性的原始形式   使用Java SDK,如何在Azure存储文件服务中为文件设置元数据?