多个midi程序同时播放?

2024-09-23 22:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用mido库用python控制amsynth。你知道吗

到目前为止,这是美丽的工作…但我只能发挥一个“预设”的时间然而。你知道吗

我正在试着用“程序改变”来切换乐器,这样我就可以同时演奏几种乐器了。你知道吗

举个简单的例子:

import mido
from mido import Message
import time

outport = mido.open_output('amsynth:MIDI IN')

msg = Message('note_on', note = 64)
outport.send(msg)
time.sleep(2.0)

msg = Message('program_change', program = 1)
outport.send(msg)

msg = Message('note_on', note = 68) 
outport.send(msg)
time.sleep(2.0)

msg = Message('note_off', note = 64)
outport.send(msg)
time.sleep(0.5)

msg = Message('note_off', note = 68) 
outport.send(msg)
time.sleep(0.5)

但是当我尝试这个的时候,第一个程序的注释会在我切换频道的时候被剪掉。你知道吗

所以问题可能是每个节目都需要在不同的频道上:

import mido
from mido import Message
import time

outport = mido.open_output('amsynth:MIDI IN')

msg = Message('note_on', note = 64, channel = 0)
outport.send(msg)
time.sleep(2.0)

msg = Message('program_change', program = 1)
outport.send(msg)

msg = Message('note_on', note = 68, channel = 1)
outport.send(msg)
time.sleep(2.0)

msg = Message('note_off', note = 64)
outport.send(msg)
time.sleep(0.5)

msg = Message('note_off', note = 68)
outport.send(msg)
time.sleep(0.5)

但这也不行。你知道吗

作为一种解决方法,我一直在考虑运行多个amsynth实例……但这对我来说似乎有悖常理。你知道吗

我怎么能同时演奏几种乐器?你知道吗

编辑:

听起来我需要在开始播放之前为频道分配节目,然后按每个频道播放,如下所示:

  msg = Message('program_change', program = 23, channel = 1)
  outport.send(msg)

  msg = Message('program_change', program = 3, channel = 2)
  outport.send(msg)

  msg = Message('note_on', note = 64, channel = 1)
  outport.send(msg)
  time.sleep(2.0)

  msg = Message('note_on', note = 68, channel = 2)
  outport.send(msg)
  time.sleep(2.0)

  msg = Message('note_off', note = 64, channel = 1)
  outport.send(msg)
  time.sleep(0.5)

  msg = Message('note_off', note = 68, channel = 2) 
  outport.send(msg)
  time.sleep(0.5)

但是,这会在程序3中回放两个音符,因此不幸的是,这不起作用。你知道吗


Tags: importsendmessagetimeonchannelmsgsleep
1条回答
网友
1楼 · 发布于 2024-09-23 22:31:15

MIDI有16个频道。每个频道在给定的时间可以在一个程序/补丁上。调用program_change时,您正在更改默认通道的修补程序。您应该为另一个频道发送program_change,然后再将MIDI音符发送到另一个频道。你知道吗

相关问题 更多 >