2014-09-16 1 views
4

я получаю ошибку при запуске:Создание изображений нот в music21

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)?

+0

У вас есть [lilypond] (http://www.lilypond.org) или [musescore] (http://musescore.org/), установленный в вашей системе? Я проверил исходный код и пытается найти эти приложения. Lilypond для выхода svg и musescore для png. –

+0

У меня есть lilypond установлен на моем пути как 'C: \ Program Files (x86) \ LilyPond \ usr \ bin' – Christian

+0

Если вы редактируете этот файл: C: \ Python34 \ lib \ site-packages \ music21 \ lily \ translate. py и вставить '_print versionString_' в строке 177, до '_versionString = versionString.split() [- 1] _' вы можете увидеть ошибку, которую вы получаете. –

ответ

3

заверешен

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

  1. Переехал заверешен папку путь без пробелов (от C:\Program Files (x86)\LilyPond\usr\bin до C:\LilyPond\usr\bin). Я видел в коде music21, что он не ставил необходимые квоты вокруг пути при выполнении команды lilypond, поэтому пришлось решить проблему таким образом.
  2. Created configuration file in music21 and set 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-файл.

Наконец, я могу добавить код, который генерирует файлы без открытия лилия или 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']) 

Обратите внимание, что scorename имеет '.xml' расширение.

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

+0

спасибо Dankal444! –

+0

ну, я вам больше благодарю за музыку21 Michael :) – dankal444

0

Мне удалось установить 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' 

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

 Смежные вопросы

  • Нет связанных вопросов^_^