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

问题描述 投票:2回答:1

我是初学者,难以使用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()。

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

这似乎是一种改进,因为它现在在代码链中稍后崩溃,在'Parse'而不是'Converter'。

更新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的答案,了解有关此解决方案的丑陋和即将发生的修复的更多背景信息。

非常感谢!纳库尔

python julia python-import music21
1个回答
3
投票

我没有安装软件包(我将在一秒钟内测试它),但以下应该有效:

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

请注意,在我的[:fieldname]合并后,可靠的丑陋(但系统性)Pull request访问将很快在Julia 1.0中消失。这种语法的原因是Julia不允许覆盖.访问功能。幸运的是,这在朱莉娅1.0中有所改变。

© www.soinside.com 2019 - 2024. All rights reserved.