6

Ubuntu 12.04 で pygame と連携する MIDI インターフェイスを取得しようとしています。キーボードは vkeybd を制御でき、OSX 上の PyGame で動作するため、キーボードが動作することを知っています。したがって、Python での MIDI の問題です。

$ python -m pygame.examples.midi --list

Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.7/dist-packages/pygame/examples/midi.py", line 820, in <module>
    print_device_info()
  File "/usr/lib/python2.7/dist-packages/pygame/examples/midi.py", line 25, in     print_device_info
    pygame.midi.init()
  File "/usr/lib/python2.7/dist-packages/pygame/midi.py", line 71, in init
    import pygame.pypm
ImportError: /usr/lib/libportmidi.so.0: undefined symbol: snd_seq_event_input_pending

python-pm と同様に、パッケージ マネージャーを介してインストールされた python-pygame。

何か案は?:)

4

3 に答える 3

1

今すぐ修正したい場合は、portmidiの最新バージョンをチェックアウトして、次のようにライブラリをビルドできます (portmidi をチェックアウトまたは unpack して、portmidi というディレクトリに格納したと仮定します)。

cd portmidi
make -f pm_linux/Makefile 

デフォルトのインストールでは動的バージョンのライブラリがビルドされないため、次のようにビルドする必要があります。

gcc -shared -Wl,-soname,libportmidi.so.0 -o  pm_linux/libportmidi.so.0 pm_common/pmutil.o pm_linux/pmlinuxalsa.o pm_linux/pmlinux.o pm_common/portmidi.o -lasound

次に、古いライブラリのコピーを作成し (念のため)、この新しいライブラリをその場所にコピーします。

sudo cp /usr/lib/libportmidi.so.0 /usr/lib/libportmidi.so.0.orig
sudo cp pm_linux/libportmidi.so.0 /usr/lib/libportmidi.so.0

アプリが動作するはずです...

于 2013-01-30T16:48:05.937 に答える
1

Frescobaldi(Pythonアプリケーション)のMIDI再生ツールなどを使用して、まったく同じ問題を抱えています(Ubuntu 12.04.1で)。これは以前は正常に機能していましたが、現在は機能していません。

これは明らかに、2013 年 1 月 25 日にプッシュされた誤ってコンパイルされた portmidi パッケージです以前の 1:200-0ubuntu1 パッケージにダウングレードすると、問題が解決しました。

https://bugs.launchpad.net/ubuntu/+source/portmidi/+bugsで Launchpad の 1:200-0ubuntu1.12.04.1 バージョンに対してバグ レポートを提出するのが適切な行動だと思います。修正されない場合は、falkTX に、代わりに KXStudio PPA で動作するパッケージを提供する意思があるかどうかを尋ねることもあります。

記録のために、私のシステムの 1:200-0ubuntu1 libportmidi に対して ldd が提供するものは次のとおりです。

linux-vdso.so.1 =>  (0x00007fffe9bff000)
libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007f26264cb000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f26262ae000)
libporttime.so.0 => /usr/lib/libporttime.so.0 (0x00007f26260ab000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2625cec000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f26259f0000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f26257eb000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f26255e3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f26269f4000)

そして壊れた 1:200-0ubuntu1.12.04.1 バージョン:

linux-vdso.so.1 =>  (0x00007fff9e3ff000)
libporttime.so.0 => /usr/lib/libporttime.so.0 (0x00007fb84ac71000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb84a8b2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb84a694000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb84b0af000)

そのため、たまたま libasound2 にリンクされていないアプリケーションはすべてホースされます。具体的には、Python の portmidi モジュールがそうです。(この種のエラーは、少なくとも Ubuntu 12.04 以降では、gcc がデフォルトで --as-needed リンカー フラグを使用するという事実によっても悪化します。Ubuntu リポジトリには、壊れているパッケージがまだかなりの数あるに違いありません。そのための。)

于 2013-01-30T11:00:38.223 に答える