2013-11-03 7 views
5

파이어 폭스가 장착 된 PC 용 무선 Xbox 360 컨트롤러를 "우르르 울릴"수 있습니까? 난 단지 입력을 읽을 수있는 솔루션을 찾았지만 진동/럼블에 대한 정보를 찾을 수 없습니다.Python으로 Xbox 360 컨트롤러를 "우르르 울릴"수 있습니까?

편집 :

나는 다음과 같은 오류가 발생합니다 @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을 사용합니다. 파이썬에서 액세스하려면 C로 작성된 파이썬 확장을 컴파일하거나 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 : 으악, 구조체가 아니라 구조체 여야합니다. –

+0

좋은 주말 프로젝트! +1 –