Создание изображений заметок в музыке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 следующим образом:
- Папка LilyPond перемещена в путь без пробелов (из
C:\Program Files (x86)\LilyPond\usr\bin
вC:\LilyPond\usr\bin
). В коде music21 я видел, что при выполнении команды lilypond он не устанавливает необходимые квоты вокруг пути, поэтому пришлось решить проблему таким образом. Создал файл конфигурации в music21 и установил lilypondPath
us = environment.UserSettings() us.create() us['lilypondPath'] = 'C:/LilyPond/usr/bin/lilypond.exe'
Вы можете проверить, правильно ли он установлен:
print us['lilypondPath']
Ну, это может быть необязательно, но во время моих попыток я перезапустил все несколько раз, так что вы можете попробовать это в конце, если все не работает сразу.
MuseScore
- На всякий случай установил Musescore на путь без пробелов (
Добавлен двойной путь musescore к среде (найден этот новый способ установки переменных среды), один раз как
"musescoreDirectPNGPath"
:environment.set("musescoreDirectPNGPath", "C:/MuseScore2/bin/MuseScore.exe")
а потом как
"musicxmlPath"
:environment.set("musicxmlPath", "C:/MuseScore2/bin/MuseScore.exe")
После нескольких попыток, отладки и т. Д. Я узнал, что важно передать расширение имени файла.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 хочет загрузить, не работают из-за устаревшей системы.