Freeware para medir la duración de las pulsaciones de teclas

Estoy buscando software gratuito para medir la duración de una pulsación de tecla o un clic del mouse, ambos funcionarían. ¿Alguien tiene alguna idea?

Lamentablemente, las cajas de herramientas de Matlab no me sirven.

Es una pena que Matlab no le sirva de nada: la caja de herramientas PTB-3 contiene funciones específicas para registrar pulsaciones de teclas, lo que incluso permite mediciones bastante precisas del tiempo de reacción en un sistema operativo Windows. Sin embargo, hay otros usuarios en este sitio que pueden ser de ayuda. ¡A ver qué sale!
¡muchas gracias! Al menos es bueno saber que esto funcionaría, si nadie más tiene una idea.
¿Para qué se usaría esto en el estudio de la psicofísica?
Se puede usar para las cosas en las que se ha trabajado en este artículo "La duración de la pulsación de la tecla cambió después de ejercicios de dedos isométricos submáximos" o también he visto la velocidad de escritura para cada carácter. Lo estoy usando para algo diferente, mi dispositivo codifica estímulos como pulsaciones de teclado, por lo tanto puedo distinguir diferentes estímulos y medir el tiempo de aplicación.
@Nathalie, ¿sus índices de interés son los mismos que los utilizados en los estudios de dinámica de pulsaciones de teclas, por ejemplo, tiempo de vuelo, tiempo de permanencia?
@AliceD PTB-3 se ejecuta en Octave, por lo que es una respuesta válida.
@StrongBad - ¿Lo hace? ¡Gracias por eso! Después de todo, podría agregar mi valor de 2 centavos: D
@AliceD Te daré un voto positivo después de que respondas y limpies estos comentarios;)

Respuestas (3)

Psychopy ( http://psychopy.org ) puede hacer esto. Puede hacerlo de dos maneras.

  1. Usando iohub. Iohub es una forma increíblemente poderosa de obtener información sobre cualquier tipo de entrada a su sistema, desde el teclado, el mouse, los rastreadores oculares, etc. Puede ver la documentación para el teclado aquí .

    from psychopy.iohub import launchHubServer
    io = launchHubServer()
    keyboard = io.devices.keyboard  # handy name
    
    print 'start pressing a key now'
    key_info = keyboard.waitForReleases()[0]  # Just grab first release, even if there are multiple
    print 'Press time was', key_info.duration
    print '... and BTW, all key event info was', key_info
    
  2. Usando cochinillo:

    from psychopy import visual, event, core
    win = visual.Window()  # Disadvantage: you need to have a window open to record it.
    clock = core.Clock()
    
    # Start listening
    print 'start pressing a key now'
    key, time = event.waitKeys(timeStamped=True)[0]
    clock.reset()  # Key down time
    while event.getKeys():
        pass
    print 'key lasted', clock.getTime(), 'seconds'
    

Si medir las pulsaciones de teclas es lo único que necesita, la psicocopia puede ser un poco pesada ya que está diseñada para ejecutar experimentos completos, ¡pero hará el trabajo!

Estaba empezando a responder esta pregunta con referencia a PsychoPy :) +1
¡Gracias! Primero probé la solución pyglet, porque abrir una nueva ventana es aún mejor para mí. ¡Funciona perfectamente!
al probar el primero, se produjo un error al iniciar el servidor Hub. Después de incluirlo from psychopy.iohub import launchHubServerfunciona muy bien. Gracias.
Me preguntaba si hay una diferencia en la precisión entre estas dos soluciones. Lo he estado buscando pero no he encontrado ningún dato para Windows. ¿Alguien sabe algo sobre esto?

Gracias a Jonas Londelov, pude reescribir el script para medir varias teclas hasta que se presiona esc y escribir la duración de la tecla, la clave y la información en una hoja de Excel. Puede que no esté muy bien escrito para un principiante de Python, pero es útil. Quizás alguien más lo necesite.

from __future__ import division
from psychopy import visual, event, core, data, iohub
from psychopy.iohub import launchHubServer 
io = iohub.launchHubServer
import csv
io = launchHubServer()
keyboard = io.devices.keyboard  # handy name
count = 0
keyinfo = ""
duration = 0
key = ""
time = core.getTime()
date = data.getDateStr(format='%Y_%b_%d_%H%M')#(format="%Y_%m_%d %H:%M (Year_Month_Day Hour:Min)")

io.clearEvents('all')
win = visual.Window([400, 400])
msg = visual.TextStim(win, text='press a key\n < esc > to quit')
msg.draw()
win.flip()

datafile = open("touch duration.csv", "wb") #$not overwriting but longer
writer = csv.writer(datafile, delimiter=";")
# create output file header
writer.writerow([
    date,
    "round", 
    "keyinfo", 
    "duration",
    "key",
    ])

while key not in ['escape', 'esc']:
    key_info = keyboard.waitForReleases()[0]  # Just grab first release, even if there are multiple
    count += 1
    key = key_info.key
    keyinfo = key_info
    duration = key_info.duration
    key = key_info.key
    print 'round number:' , count
    print key_info
    print 'Press time was', key_info.duration
    print 'key', key_info.key
    writer.writerow([
    "",
    count, 
    keyinfo, 
    duration,
    key,
    ])
Puedes simplificar esto. Primero, solo una línea de importación: from psychopy import visual, event, core, data, iohuby luego haz io = iohub.launchHubServer. En segundo lugar, no es necesario llamar a win.close, data.file.closey core.quit. Esto sucederá automáticamente cuando se cierre el script. En tercer lugar, redefine algunas variables, por ejemplo, timey date, keyetc. Simplemente elimine la primera ya que se "sobrescribe" de todos modos.
Gracias, he editado la respuesta para incluir sus correcciones.

Si la precisión es importante, tal vez pruebe el TScope con licencia GPL, que es una biblioteca C; hay un artículo al respecto (por desgracia para la versión anterior) con un número moderado de citas. También se mantiene ( la versión actual es 5 ) y tienen un ejemplo que mide la duración de la pulsación de tecla . Es bastante fácil de usar, ya que incluye todo lo que necesita en Windows, incluida una versión personalizada de Notepad ++ con accesos directos para compilar y ejecutar un programa. Lo curioso es que los ejemplos de la web parecen faltar en el paquete de 145Mb, pero funcionan compilados con él.

No tengo ninguna cámara de alta velocidad para probar la precisión, pero a partir de una prueba rápida en mí mismo, no vi grandes desviaciones. Usando un teclado PS / 2 de carrera larga, obtengo alrededor de 95 ms de tiempo de prensa (que parece estar a la par con el documento que mencionó ). Con un teclado USB de trazo corto, obtengo tan solo 55 ms, si me enfoco específicamente en solo hacer trazos cortos (y esto parece tener el costo del tiempo de reacción, necesito "prepararme" para hacer un trazo realmente corto ; en tecleo normal sigo teniendo la costumbre de pulsar más tiempo, aunque este teclado no lo necesita). Aquí hay un ejemplo de lo último:

ingrese la descripción de la imagen aquí