Есть ли способ заставить pyPortMidi работать на Win7-64?
Я пытаюсь использовать pyPortMidi для приложения, которое я создаю для OSX, win32 и win64. Я заставил его работать на OSX и win32, но я застрял, пытаясь заставить его работать на win64.
pyPortMidi - это оболочка для библиотеки C с именем PortMidi. Она доступна с исходной загрузкой PortMidi версии 0.7 и с сайта Джона Харрисона версии 0.9. Я пробовал обе версии с одинаковым режимом сбоя.
Сначала я построил PortMidi, используя MSVC++ 2008 Express для X64. Включенная тестовая программа работает и может взаимодействовать с портами MIDI, поэтому я думаю, что сборка PortMidi в порядке.
Далее я построил pyPortMidi. Для версии 0.7 мне пришлось немного изменить файл setup.py, чтобы учесть правильное расположение включаемых файлов (перемещено из../win32 в../pm_common), и он собирается без ошибок. В то время как версия 0.7 использует cython для сборки _pyportmidi.c, версия 0.9 использует pyrex для того же; чтобы заставить его работать, мне пришлось использовать версию pyrex, установленную с помощью easy_install. Он также построен без ошибок.
Я могу импортировать библиотеку в Python, но, когда я делаю первый вызов, она немедленно вылетает из Python:
>>> import pypm
>>> pypm.Initialize()
Problem signature:
Problem Event Name: APPCRASH
Application Name: python.exe
Application Version: 0.0.0.0
Application Timestamp: 4e70d55f
Fault Module Name: pypm.pyd
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 4f8383fc
Exception Code: c0000005
Exception Offset: 0000000000009000
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 0f1f
Additional Information 2: 0f1f1099a7fb7a2294c21b52e8fe20f2
Additional Information 3: 07a8
Additional Information 4: 07a8c952d5efd7a04abd16111aad6ab0
Кто-нибудь получил pyPortMidi, работающий на X64? Какие-нибудь предложения относительно того, как я мог бы решить эту проблему?
1 ответ
Обновленный модуль pypm доступен как pygame.pypm. Использование win-amd64-py2.7 бинарных файлов из http://www.lfd.uci.edu/~gohlke/pythonlibs/ работает следующим образом:
>>> from pygame import pypm
>>> pypm.Initialize()