我是一个初学者,在使用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的答案,以获取有关此解决方案的丑陋性和即将来临的修复程序的更多信息。
非常感谢! 那库尔
答案 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中已更改。