【问题标题】:Creating images of notes in music21在音乐中创建音符图像21
【发布时间】:2014-09-16 23:07:17
【问题描述】:

运行时出现错误:

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 不再抱怨它们不可用。 我在 Windows 7 上运行 Python 3.4。

如果我改为使用 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)?

【问题讨论】:

  • 您的系统中是否安装了lilypondmusescore?我检查了源代码,它正在尝试找到这些应用程序。用于 svg 输出的 Lilypond 和用于 png 的 musescore。
  • 我在我的路径中安装了 lilypond C:\Program Files (x86)\LilyPond\usr\bin
  • 如果您编辑此文件:C:\Python34\lib\site-packages\music21\lily\translate.py 并在第 177 行插入 'print versionString',之前'_versionString = versionString.split()[-1] _' 你可能会看到你得到的错误。

标签: python music21


【解决方案1】:

百合花

我有同样的错误。我已设法通过以下方式为 music21 配置 LilyPond:

  1. 将 LilyPond 文件夹移动到没有空格的路径(从 C:\Program Files (x86)\LilyPond\usr\binC:\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. 嗯,这可能不是必需的,但在我尝试的过程中,我重新启动了几次,所以如果一切都没有立即运行,你可以在最后尝试一下。

MUSCORE

  1. 以防万一,将Musescore 安装到没有空格的路径(
  2. 添加了两次环境的musescore路径(发现了这种设置环境变量的新方法),一次为"musescoreDirectPNGPath"

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

    然后作为"musicxmlPath":

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

  3. 经过几次尝试、调试等,我了解到如果我们想使用 Musescore,传入文件名“.xml”扩展名而不是“.png”很重要:

    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'])

肌肉分数:

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)并稍后重命名为我们想要的。

【讨论】:

    【解决方案2】:

    我能够使用带空格的路径设置 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'
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多