2013-11-03 18 views
5

私のワイヤレスXbox 360コントローラーをPython搭載PC用に「うっすら」することは可能ですか?私は入力を読み取るための解決策しか見つけられませんでしたが、振動/うねりに関する情報は見つかりません。PythonでXbox 360コントローラーを「うっすら」することは可能ですか?

EDIT:

私は次のエラーを取得する@AdamRosenfieldが提供するコードを以下に示します。

Traceback (most recent call last): 
    File "C:\Users\Usuario\Desktop\rumble.py", line 8, in <module> 
    xinput = ctypes.windll.Xinput # Load Xinput.dll 
    File "C:\Python27\lib\ctypes\__init__.py", line 435, in __getattr__ 
    dll = self._dlltype(name) 
    File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__ 
    self._handle = _dlopen(self._name, mode) 
WindowsError: [Error 126] The specified module could not be found. 

最後のエラーはスペイン語から翻訳されています。

答えて

4

可能ですが、簡単ではありません。 Cでは、XInputSetState() functionを使用してランブルを制御します。 Pythonからアクセスするには、Cで書かれたPython拡張をコンパイルするか、ctypes libraryを使用する必要があります。クマを念頭に置いて、私はこれをテストしていないにもかかわらず、このような

何かが、動作するはずです:

import ctypes 

# Define necessary structures 
class XINPUT_VIBRATION(ctypes.Structure): 
    _fields_ = [("wLeftMotorSpeed", ctypes.c_ushort), 
       ("wRightMotorSpeed", ctypes.c_ushort)] 

xinput = ctypes.windll.xinput1_1 # Load Xinput.dll 

# Set up function argument types and return type 
XInputSetState = xinput.XInputSetState 
XInputSetState.argtypes = [ctypes.c_uint, ctypes.POINTER(XINPUT_VIBRATION)] 
XInputSetState.restype = ctypes.c_uint 

# Now we're ready to call it. Set left motor to 100%, right motor to 50% 
# for controller 0 
vibration = XINPUT_VIBRATION(65535, 32768) 
XInputSetState(0, ctypes.byref(vibration)) 

# You can also create a helper function like this: 
def set_vibration(controller, left_motor, right_motor): 
    vibration = XINPUT_VIBRATION(int(left_motor * 65535), int(right_motor * 65535)) 
    XInputSetState(controller, ctypes.byref(vibration)) 

# ... and use it like so 
set_vibration(0, 1.0, 0.5) 
+0

おかげで、私は「ctypes.struct」とのエラーを取得してい答えるために:それは有効な属性ではありません。また、私は "ctypes.struct"の由来を知りません! – Belohlavek

+0

@Belohlavek:うわー、 'struct'ではなく' Structure'でなければなりません。 –

+0

良い週末のプロジェクト! +1 –

関連する問題