我在 ipython 笔记本中使用 music21 和 MuseScore。它工作得很好,唯一的问题是每次我创建一个 Stream 然后运行 my_stream.show() 时,它需要一个永远,因为它等待打开 MuseScore 应用程序。即使 MuseScore 已经打开,也会发生这种情况(它会打开应用程序的第二个副本,然后在打印图像后自行关闭)。
如何防止music21每次重新打开MuseScore并让它使用已经打开的应用程序?
编辑:添加版本/操作系统信息
我在使用 MuseScore 版本 2.1.0 的 mac (OSX 10.10.4) 上
我也尝试过这里概述的方法在 ipython 笔记本中打印乐谱,但同样的事情发生了。
至少对于第二种方法,问题似乎出在music21/converter/subConverter.py中。
在下面
class ConverterMusicXML(SubConverter):
有这个部分:
musescoreRun = '"' + musescorePath + '" ' + fp + " -o " + fpOut + " -T 0 "
if 'dpi' in keywords:
musescoreRun += " -r " + str(keywords['dpi'])
if common.runningUnderIPython():
musescoreRun += " -r " + str(defaults.ipythonImageDpi)
storedStrErr = sys.stderr
fileLikeOpen = six.StringIO()
sys.stderr = fileLikeOpen
os.system(musescoreRun)
fileLikeOpen.close()
sys.stderr = storedStrErr
我相信尤其是这条线
os.system(musescoreRun)
每次都独立打开 MuseScore,但我不知道用什么替换它可以让 music21 找到已经运行的 MuseScore 实例。