Как отобразить музыкальную нотацию с использованием music21 в ipython/python с MuseScore БЕЗ повторного открытия MuseScore при каждом вызове.show()?
Я использую music21 с MuseScore в записной книжке ipython. Это работает хорошо, единственная проблема заключается в том, что каждый раз, когда я создаю Stream и затем запускаю my_stream.show(), это занимает вечность, потому что он ожидает открытия приложения MuseScore. Это происходит, даже если MuseScore уже открыт (он открывает вторую копию приложения, которая затем закрывается после печати изображения).
Как я могу запретить музыке 21 вновь открывать MuseScore и использовать вместо нее уже открытое приложение?
РЕДАКТИРОВАТЬ: Добавление версии / Информация об ОС
Я на Mac (OSX 10.10.4) с использованием MuseScore версии 2.1.0
Я также попробовал описанный здесь метод, чтобы распечатать ноты в блокноте 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 ответ
Те же проблемы с ошибками. Здесь говорится о проблеме на GitHub:
... изменение
os.system(musescoreRun)
строка 891 файла subconverters.py, автор:subprocess.run(musescoreRun)
. Вам также необходимо импортировать подпроцесс в начале subconverters.py.
Может быть, это сработает для вас!