gpt4 book ai didi

python - 多个 MIDI 程序同时播放?

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:47 24 4
gpt4 key购买 nike

我正在使用 mido 库通过 python 控制 amsynth。

到目前为止,这一切都很顺利……但是我一次只能播放一个“预设”。

我正在尝试使用“program_change”来切换乐器,这样我就可以同时演奏多种乐器。

举个简单的例子:

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)

但是当我尝试这样做时,当我切换 channel 时,第一个节目的音符就被剪掉了。

所以也许问题是每个节目都需要在不同的 channel 上播放:

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 实例……但这对我来说似乎有悖常理。

如何同时演奏多种乐器?

编辑:

听起来我需要在开始播放之前将节目分配给 channel ,然后像这样按 channel 播放:

  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 播放两个音符,所以不幸的是这不起作用。

最佳答案

MIDI 有 16 个 channel 。每个 channel 在给定时间可以在一个节目/补丁上。当您调用 program_change 时,您正在更改该默认 channel 的补丁。您应该为另一个 channel 发送 program_change,然后将 MIDI 音符也发送到另一个 channel 。

关于python - 多个 MIDI 程序同时播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52375963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com