Julia PyCall在运行Music21模块时遇到困难

时间:2018-09-06 04:06:26

标签: python julia python-import music21

我是一个初学者,在使用Julia的PyCall与MIT Python音乐模块music21进行交互时遇到困难。

根据Music21的网站,为了以音乐符号显示简短的旋律,可以在Python中键入以下内容:

converter.parse("tinynotation: 3/4 c4 d8 f g16 a g f#").show()

这是我尝试在Julia中执行此代码的步骤:

我首先初始化了music21,它似乎可以正常工作:

@pyimport music21
music21: Certain music21 functions might need these optional packages: matplotlib, scipy; if you run into errors, install them by following the instructions at http://mit.edu/music21/doc/installing/installAdditional.html

然后我尝试通过键入以下内容在Julia中重新创建上述Python示例:

converter.parse(“ tinynotation:3/4 c4 d8 f g16 a g f#”)。show()

I received this error:
ERROR: UndefVarError: converter not defined
Stacktrace:
 [1] eval(::Module, ::Any) at ./boot.jl:235

更新1 根据rickhg12hs的建议,我尝试了music21.converter.parse(“ tinynotation:3/4 c4 d8 f g16 a g f#”)。show()。

现在我在“解析”上收到此错误消息:错误:类型PyObject没有字段解析Stacktrace:1 eval(:: Module,:: Any)at./boot.jl:235

这似乎是一种改进,因为它现在在代码链中的稍后部分崩溃,位于“解析”而不是“转换器”。

更新2-已修复 此问题与dot overloading有关。 根据此链接,我尝试将代码修改为如下所示:

music21.converter[:parse]("tinynotation: 3/4 c4 d8 f g16 a g f#")[:show]()

但是现在我得到了这个错误

FSPathMakeRef(/Applications/MuseScore 2.app/Contents/MacOS/mscore) failed with error -43.

我发现我最后要做的就是下载MuseScore,现在问题已解决!

请参阅@crstnbr的答案,以获取有关此解决方案的丑陋性和即将来临的修复程序的更多信息。

非常感谢! 那库尔

1 个答案:

答案 0 :(得分:3)

我没有安装该软件包(我将在稍后测试),但以下各项应能工作:

@pyimport music21 as m
m.converter[:parse]("tinynotation: 3/4 c4 d8 f g16 a g f#")[:show]() 

请注意,在我的Pull request被合并之后,在Julia 1.0中不久将出现可疑的(但系统的)[:fieldname]访问将消失。使用这种语法的原因是Julia不允许覆盖.访问功能。幸运的是,这在Julia 1.0中已更改。