2011-08-10 17 views
3

私は、Linuxシステムに接続されたHIDからの入力を受け取り、それらからMIDIを生成するプログラムを実行したいと思います。私はMIDI側では大丈夫ですが、私は物事のHID側で苦労しています。このアプローチは、[OK]を動作しますが(hereから撮影):Python HIDを読む

#!/usr/bin/python2 
import struct 

inputDevice = "/dev/input/event0" #keyboard on my system 
inputEventFormat = 'iihhi' 
inputEventSize = 16 

file = open(inputDevice, "rb") # standard binary file input 
event = file.read(inputEventSize) 
while event: 
    (time1, time2, type, code, value) = struct.unpack(inputEventFormat, event) 
    print type,code,value 
    event = file.read(inputEventSize) 
file.close() 

それはイベントがたくさんありますCPU使用率の高くなります。特にマウスを追跡する場合、大きな動きは私のシステム上でほぼ50%のCPUを要する。私は、whileがどのように構造化されているかのために推測します。

ので、Pythonでこれを行うには良い方法はありますか?私は、このコードを配布して現代のディストリビューションで作業できるようにしたいので、保守されていないライブラリや古いライブラリを使用しないことをお勧めします(最終的な依存関係は、エンドユーザのパッケージマネージャーで簡単に利用できます)

答えて

1

あなたの要件を満たしていない多くのイベントがあります。タイプまたはコードでイベントをフィルタリングする必要があります。

while event: 
    (time1, time2, type, code, value) = struct.unpack(inputEventFormat, event) 
    if type==X and code==Y: 
    print type,code,value 
    event = file.read(inputEventSize)