Создание изображений заметок в музыке21

Я получаю сообщение об ошибке при запуске:

from music21 import *

n1 = note.Note('C4', quarterLength=1)
n2 = note.Note('A4', quarterLength=1)
s = stream.Stream()
s.append(n1)
s.append(n2)
s.show('lily.svg')

Traceback (most recent call last):
  File "C:\Python34\test.py", line 7, in <module>
    s.show('lily.svg')
  File "C:\Python34\lib\site-packages\music21\base.py", line 2206, in show
    return formatWriter.show(self, regularizedConverterFormat, app=app, subformats=subformats, **keywords)
  File "C:\Python34\lib\site-packages\music21\converter\subConverters.py", line 277, in show
    returnedFilePath = self.write(obj, fmt, subformats=subformats, **keywords)
  File "C:\Python34\lib\site-packages\music21\converter\subConverters.py", line 245, in write
    conv = lily.translate.LilypondConverter()
  File "C:\Python34\lib\site-packages\music21\lily\translate.py", line 147, in __init__
    self.setupTools()
  File "C:\Python34\lib\site-packages\music21\lily\translate.py", line 177, in setupTools
    versionString = versionString.split()[-1]
IndexError: list index out of range

Я установил scipy и mathplotlib, чтобы music21 больше не жаловался на то, что они недоступны. Я запускаю Python 3.4 на Windows 7.

Если я вместо этого использую s.show('musicxml.png') чтобы получить мои изображения, я получаю ошибку:

Traceback (most recent call last):
  File "C:\Python34\test.py", line 7, in <module>
    s.show('musicxml.png')
  File "C:\Python34\lib\site-packages\music21\base.py", line 2206, in show
    return formatWriter.show(self, regularizedConverterFormat, app=app, subformats=subformats, **keywords)
  File "C:\Python34\lib\site-packages\music21\converter\subConverters.py", line 147, in show
    returnedFilePath = self.write(obj, fmt, subformats=subformats, **keywords)
  File "C:\Python34\lib\site-packages\music21\converter\subConverters.py", line 637, in write
    fp = self.runThroughMusescore(fp, **keywords)
  File "C:\Python34\lib\site-packages\music21\converter\subConverters.py", line 606, in runThroughMusescore
    elif not os.path.exists(musescoreFile):
  File "C:\Python34\lib\genericpath.py", line 19, in exists
    os.stat(path)
TypeError: stat: can't specify None for path argument

Что мне нужно сделать, чтобы получить изображения (желательно svg)?

3 ответа

заверешен

У меня была такая же ошибка. Мне удалось настроить LilyPond для music21 следующим образом:

  1. Папка LilyPond перемещена в путь без пробелов (из C:\Program Files (x86)\LilyPond\usr\bin в C:\LilyPond\usr\bin). В коде music21 я видел, что при выполнении команды lilypond он не устанавливает необходимые квоты вокруг пути, поэтому пришлось решить проблему таким образом.
  2. Создал файл конфигурации в music21 и установил lilypondPath

    us = environment.UserSettings()
    us.create()
    us['lilypondPath'] = 'C:/LilyPond/usr/bin/lilypond.exe'
    

    Вы можете проверить, правильно ли он установлен:

    print us['lilypondPath']
    
  3. Ну, это может быть необязательно, но во время моих попыток я перезапустил все несколько раз, так что вы можете попробовать это в конце, если все не работает сразу.

MuseScore

  1. На всякий случай установил Musescore на путь без пробелов (
  2. Добавлен двойной путь musescore к среде (найден этот новый способ установки переменных среды), один раз как "musescoreDirectPNGPath":

    environment.set("musescoreDirectPNGPath", "C:/MuseScore2/bin/MuseScore.exe")

    а потом как "musicxmlPath":

    environment.set("musicxmlPath", "C:/MuseScore2/bin/MuseScore.exe")

  3. После нескольких попыток, отладки и т. Д. Я узнал, что важно передать расширение имени файла.xml вместо.png, если мы хотим использовать Musescore:

    stream_name.show ('') musicalxml.xml

    Musescore не может открыть файл.png, но он может открыть файл.xml.

Наконец, я могу добавить код, который генерирует файлы без открытия lilypond или musescore. Надеюсь, что кто-то найдет это полезным

заверешен:

# music21object - stream or score or any object that can be showed
conv =  music21.converter.subConverters.ConverterLilypond()
scorename = 'myScoreName'
filepath = 'C:/path/to/musical_scores/' + scorename
conv.write(music21object, fmt = 'lilypond', fp=filepath, subformats = ['pdf'])

MuseScore:

from music21.converter.subConverters import ConverterMusicXML
conv_musicxml = ConverterMusicXML()
scorename = 'myScoreName.xml'
filepath = 'C:/path/to/musical_scores/' + scorename
out_filepath = conv_musicxml.write(music21object, 'musicxml', fp=filepath, subformats=['png'])

Обратите внимание, что это имя имеет расширение ".xml".

К сожалению, он не сохраняет файл в указанном пути к файлу. Musescore добавляет "-1" к имени файла, но можно получить этот измененный путь к файлу (как out_filepath в приведенном выше коде) и переименовать позже в то, что мы хотим.

Я был в состоянии настроить musescore с путем с пробелами. Самое важное - использовать косую черту. Вот как я это сделал:

# Create the user environment for music21
us = m21.environment.UserSettings()
us['musicxmlPath'] = 'C:/Program Files (x86)/MuseScore 2/bin/MuseScore.exe'
us['musescoreDirectPNGPath'] = 'C:/Program Files (x86)/MuseScore 2/bin/MuseScore.exe'

Надеюсь, поможет!

попробуйте #sudo apt-get update установить lilypond !apt-get update !apt-get -y install lilypond

в противном случае дополнительные файлы, которые lilypond хочет загрузить, не работают из-за устаревшей системы.

Другие вопросы по тегам