如何从Music21制作的音乐中产生实时音频输出。如果失败,如何通过开源软件从Music21制作的音乐中产生任何音频输出?谢谢您的帮助。

最佳答案

如您所见,music21并非设计为音乐播放系统,而是设计为嵌入在其他播放系统中或从系统中调用它们。我们不打算在回放系统中投入太多的工作(由于硬件的支持,我们是一个很小的研究实验室,仍然需要在音乐分析上完成工作等),但是您的解决方案是如此的优雅以至于它现在已在music21的所有版本中发布(作为v1.1版),作为music21.midi.realtime模块。这是一个示例,它利用music21的能力来动态分配具有不同弯音对象的Midi通道,以模拟微音调回放(大多数Midi回放的主要问题):

#  Set up a detuned piano
#  (where each key has a random
#  but consistent detuning from 30 cents flat to sharp)
#  and play a Bach Chorale on it in real time.

from music21 import *
import random
keyDetune = []
for i in range(0, 127):
    keyDetune.append(random.randint(-30, 30))

b = corpus.parse('bach/bwv66.6')
for n in b.flat.notes:
    n.microtone = keyDetune[n.midi]
sp = midi.realtime.StreamPlayer(b)
sp.play()

StreamPlayer的.play()函数还可以使用busyFunction和busyArgs和busyWaitMilliseconds参数,这些参数指定一个函数,最多每隔busyWaitMilliseconds使用一次参数调用(如果您的系统较慢,则可能会更多)。如果您要设置某种线程播放,则还会在最后调用endFunction和endArgs。 -Myke Cuthbert(Music21创作者)

07-26 06:28