Я новичок, испытывающий трудности с использованием PyCall Джулии для взаимодействия с музыкальным модулем MIT Python music21.
Согласно веб-сайту Music21, чтобы отобразить короткую мелодию в музыкальной нотации, наберите в Python:
converter.parse("tinynotation: 3/4 c4 d8 f g16 a g f#").show()
Вот что я сделал, чтобы попытаться выполнить этот код в Юлии:
Сначала я инициализировал 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
Затем я попытался воссоздать приведенный выше пример Python в Julia, набрав:
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': ОШИБКА: тип PyObject не имеет анализа поля. Stacktrace: 1 eval (:: Module, :: Any) в ./boot.jl:235
Кажется, это улучшение, так как теперь он чуть позже падает в цепочке кода, в «Parse» вместо «Converter».
ОБНОВЛЕНИЕ 2 - ИСПРАВЛЕНО
Эта проблема связана с точечной перегрузкой .
Основываясь на этой ссылке, я попытался изменить свой код, чтобы он выглядел так:
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 для получения дополнительной информации о уродстве этого решения и предстоящих исправлениях.
Большое спасибо!
Накул