2021-02-20 来源:华纳网 责任编辑:王双双 人气:
核心提示:用Python来进行MIDI键盘和MIDI方面的处理不是那么复杂吧。

知识点:
播放MIDI

操纵MIDI键盘

本期内容:

从本期开始,谷雨老师将用Python来进行一些有趣的操作,比如音乐、游戏等等。

 

那么今天,我们来聊聊电子乐,

音乐是由振动组成,

振动是由频率组成,

各种不是音色是由于发声的材质不同而发生的频率的变化,

频率可以由数学来解析,

如此,十二平均律、五线谱就由伟大的数学家、音乐家发明出来了,

到了近代,MIDI便成为了电子乐的标准格式,

 

当代音乐中约的90%音乐是由MIDI制作出来,

这其中包括几乎所有的音乐家、编曲、作曲家,如俊杰大神、杰伦大神

 

MIDI键盘就是用来录入MIDI音符的键盘,没错,就是一个键盘,

谷雨老师用的M-Audio的32键的MIDI键盘(没收广告费~),比较小巧灵活,

 

跑题了,本节课不是教大家怎么来作曲的,

 

那么Python和MIDI、音乐有什么关系呢?

 

以往我们要使用MIDI进行记录和演奏,必须在电脑上将庞大的音乐软件,

如Cubase,就算在手机上也至少要装一个类似“库乐队”之类的软件,

现在谷雨老师用几十行Python代码来实现MIDI键盘的调取和MIDI的播放,

 

今天,我们用于的库是rtmidi,

  •  
  •  
#引入rtmidi库import rtmidi

 

 

打开一个MIDI输出通道用于播放MIDI

  •  
  •  
  •  
  •  
midiout = rtmidi.MidiOut()available_ports = midiout.get_ports()if available_ports:    midiout.open_port(0)

 

 

打开一个MIDI输入通道用于获取MIDI键盘按下的各个音符

  •  
  •  
from rtmidi.midiutil import open_midiinputmidiin, port_name = open_midiinput(port)

 

设定一个回调函数,来进行MIDI事件的回放

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
midiin.set_callback(MidiInputHandler(port_name,midiout))class MidiInputHandler(object):    def __init__(self, port,midiout):            self.port = port            self.midiout = midiout                    self._wallclock = time.time()        def __call__(self, event, data=None):            message, deltatime = event           #self.midiout.send_message(message)                   self._wallclock += deltatime                   aa=message[1]                   bb=message[2]                   print("[%s] %r" % (self.port,  message))

 

以上就是核心的代码了,加一起不到100行,

同学们起来让程序跑起来弹奏一首吧!

 

用Python来进行MIDI键盘和MIDI方面的处理不是那么复杂吧。

结合往期的课程,你也可以做出自己的音乐软件了,是不是很激动呢。

 

完整的源代码可以在Github上下载。

https://github.com/cn09876/guyuedu




 





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。