如何在ipython / python中使用music21显示音乐符号与MuseScore没有MuseScore重新打开。每次调用.show()?

时间:2017-07-06 15:49:21

标签: ipython music21

我在ipython笔记本中使用带有MuseScore的music21。它运行良好,唯一的问题是每次我创建一个Stream然后运行my_stream.show(),它需要一个永远,因为它等待打开MuseScore应用程序。即使MuseScore已经打开,也会发生这种情况(它会打开应用程序的第二个副本,然后在打印图像后自动关闭)。

我如何阻止music21每次重新打开MuseScore并让它使用已经打开的应用程序?

编辑:添加版本/操作系统信息

我正在使用MuseScore 2.1.0版的Mac(OSX 10.10.4)

我也尝试过概述here的方法在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实例。

1 个答案:

答案 0 :(得分:0)

同样的问题错误。这里指的是 GitHub 上的一个问题:

<块引用>

... 将 subconverters.py 的 os.system(musescoreRun) 行 891 更改为 subprocess.run(musescoreRun)。您还需要在 subconverters.py 的开头导入 subprocess。

也许它适合你!