psychopy 2024.1.3__py3-none-any.whl → 2024.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of psychopy might be problematic. Click here for more details.

Files changed (331) hide show
  1. psychopy/.DS_Store +0 -0
  2. psychopy/CHANGELOG.txt +206 -0
  3. psychopy/GIT_SHA +1 -0
  4. psychopy/VERSION +1 -0
  5. psychopy/__init__.py +77 -15
  6. psychopy/app/Resources/classic/plugin16.png +0 -0
  7. psychopy/app/Resources/classic/plugin16@2x.png +0 -0
  8. psychopy/app/Resources/dark/plugin16.png +0 -0
  9. psychopy/app/Resources/dark/plugin16@2x.png +0 -0
  10. psychopy/app/Resources/light/plugin16.png +0 -0
  11. psychopy/app/Resources/light/plugin16@2x.png +0 -0
  12. psychopy/app/__init__.py +76 -2
  13. psychopy/app/_psychopyApp.py +126 -101
  14. psychopy/app/builder/builder.py +14 -10
  15. psychopy/app/builder/dialogs/__init__.py +8 -8
  16. psychopy/app/builder/dialogs/dlgsConditions.py +12 -13
  17. psychopy/app/builder/dialogs/paramCtrls.py +24 -57
  18. psychopy/app/builder/localizedStrings.py +11 -9
  19. psychopy/app/builder/validators.py +2 -2
  20. psychopy/app/coder/codeEditorBase.py +8 -8
  21. psychopy/app/coder/coder.py +4 -4
  22. psychopy/app/connections/sendusage.py +2 -2
  23. psychopy/app/connections/updates.py +9 -9
  24. psychopy/app/dialogs.py +34 -2
  25. psychopy/app/idle.py +31 -0
  26. psychopy/app/jobs.py +21 -3
  27. psychopy/app/linuxconfig/__init__.py +9 -0
  28. psychopy/app/locale/ar_001/LC_MESSAGE/messages.mo +0 -0
  29. psychopy/app/locale/ar_001/LC_MESSAGE/messages.po +4602 -2540
  30. psychopy/app/locale/es_CO/LC_MESSAGE/messages.mo +0 -0
  31. psychopy/app/locale/es_CO/LC_MESSAGE/messages.po +56 -54
  32. psychopy/app/locale/es_ES/LC_MESSAGE/messages.po +53 -43
  33. psychopy/app/locale/es_US/LC_MESSAGE/messages.mo +0 -0
  34. psychopy/app/locale/es_US/LC_MESSAGE/messages.po +56 -54
  35. psychopy/app/locale/ja_JP/LC_MESSAGE/messages.mo +0 -0
  36. psychopy/app/locale/ja_JP/LC_MESSAGE/messages.po +1258 -1176
  37. psychopy/app/locale/pt_PT/LC_MESSAGE/messages.po +9415 -5
  38. psychopy/app/pavlovia_ui/_base.py +33 -3
  39. psychopy/app/pavlovia_ui/search.py +0 -1
  40. psychopy/app/plugin_manager/dialog.py +104 -51
  41. psychopy/app/plugin_manager/packages.py +5 -0
  42. psychopy/app/plugin_manager/plugins.py +152 -67
  43. psychopy/app/preferencesDlg.py +8 -8
  44. psychopy/app/psychopyApp.py +11 -5
  45. psychopy/app/ribbon.py +124 -14
  46. psychopy/app/runner/runner.py +6 -1
  47. psychopy/app/stdout/stdOutRich.py +27 -11
  48. psychopy/app/themes/icons.py +52 -2
  49. psychopy/assets/__init__.py +0 -0
  50. psychopy/assets/click.png +0 -0
  51. psychopy/assets/clicknext.png +0 -0
  52. psychopy/assets/next.png +0 -0
  53. psychopy/assets/psychopy.ico +0 -0
  54. psychopy/assets/psychopy.png +0 -0
  55. psychopy/assets/templates/__init__.py +0 -0
  56. psychopy/assets/touch.png +0 -0
  57. psychopy/assets/touchnext.png +0 -0
  58. psychopy/assets/window.ico +0 -0
  59. psychopy/changes/2023.1.0.md +9 -0
  60. psychopy/changes/2024.1.0.md +16 -0
  61. psychopy/changes/__init__.py +0 -0
  62. psychopy/clock.py +2 -2
  63. psychopy/colors.py +2 -1
  64. psychopy/compatibility.py +53 -1
  65. psychopy/contrib/.DS_Store +0 -0
  66. psychopy/contrib/configobj/__init__.py +10 -8
  67. psychopy/data/__init__.py +3 -2
  68. psychopy/data/base.py +5 -5
  69. psychopy/data/experiment.py +130 -4
  70. psychopy/data/routine.py +56 -0
  71. psychopy/data/staircase.py +2 -2
  72. psychopy/data/trial.py +559 -97
  73. psychopy/data/utils.py +56 -21
  74. psychopy/demos/.DS_Store +0 -0
  75. psychopy/demos/builder/.DS_Store +0 -0
  76. psychopy/demos/builder/Design Templates/.DS_Store +0 -0
  77. psychopy/demos/builder/Experiments/.DS_Store +0 -0
  78. psychopy/demos/builder/Feature Demos/.DS_Store +0 -0
  79. psychopy/demos/builder/Feature Demos/buttonBox/buttonBoxDemo.psyexp +375 -0
  80. psychopy/demos/builder/Feature Demos/buttonBox/readme.md +5 -0
  81. psychopy/demos/builder/Feature Demos/pilotMode/pilotMode.psyexp +433 -0
  82. psychopy/demos/builder/Feature Demos/pilotMode/readme.md +7 -0
  83. psychopy/demos/builder/Feature Demos/progress/progressBar.psyexp +4 -4
  84. psychopy/demos/builder/Hardware/.DS_Store +0 -0
  85. psychopy/demos/builder/Helper Tools/.DS_Store +0 -0
  86. psychopy/demos/coder/.DS_Store +0 -0
  87. psychopy/demos/coder/hardware/testSoundLatency.py +2 -2
  88. psychopy/demos/coder/iohub/.DS_Store +0 -0
  89. psychopy/demos/coder/misc/hdf5_2_csv +33 -0
  90. psychopy/event.py +30 -29
  91. psychopy/experiment/.DS_Store +0 -0
  92. psychopy/experiment/_experiment.py +6 -6
  93. psychopy/experiment/components/.DS_Store +0 -0
  94. psychopy/experiment/components/__init__.py +6 -3
  95. psychopy/experiment/components/_base.py +286 -131
  96. psychopy/experiment/components/aperture/.DS_Store +0 -0
  97. psychopy/experiment/components/brush/.DS_Store +0 -0
  98. psychopy/experiment/components/button/.DS_Store +0 -0
  99. psychopy/experiment/components/button/__init__.py +5 -1
  100. psychopy/experiment/components/buttonBox/.DS_Store +0 -0
  101. psychopy/experiment/components/buttonBox/__init__.py +21 -12
  102. psychopy/experiment/components/camera/.DS_Store +0 -0
  103. psychopy/experiment/components/code/.DS_Store +0 -0
  104. psychopy/experiment/components/dots/.DS_Store +0 -0
  105. psychopy/experiment/components/eyetracker_record/.DS_Store +0 -0
  106. psychopy/experiment/components/eyetracker_record/__init__.py +92 -30
  107. psychopy/experiment/components/form/.DS_Store +0 -0
  108. psychopy/experiment/components/form/__init__.py +6 -2
  109. psychopy/experiment/components/grating/.DS_Store +0 -0
  110. psychopy/experiment/components/grating/__init__.py +14 -3
  111. psychopy/experiment/components/image/.DS_Store +0 -0
  112. psychopy/experiment/components/image/__init__.py +14 -3
  113. psychopy/experiment/components/joyButtons/.DS_Store +0 -0
  114. psychopy/experiment/components/joystick/.DS_Store +0 -0
  115. psychopy/experiment/components/keyboard/.DS_Store +0 -0
  116. psychopy/experiment/components/keyboard/__init__.py +22 -10
  117. psychopy/experiment/components/microphone/.DS_Store +0 -0
  118. psychopy/experiment/components/microphone/__init__.py +59 -39
  119. psychopy/experiment/components/mouse/.DS_Store +0 -0
  120. psychopy/experiment/components/mouse/__init__.py +44 -29
  121. psychopy/experiment/components/movie/.DS_Store +0 -0
  122. psychopy/experiment/components/movie/__init__.py +1 -1
  123. psychopy/experiment/components/panorama/.DS_Store +0 -0
  124. psychopy/experiment/components/parallelOut/.DS_Store +0 -0
  125. psychopy/experiment/components/patch/.DS_Store +0 -0
  126. psychopy/experiment/components/polygon/.DS_Store +0 -0
  127. psychopy/experiment/components/polygon/__init__.py +26 -6
  128. psychopy/experiment/components/progress/.DS_Store +0 -0
  129. psychopy/experiment/components/progress/__init__.py +1 -1
  130. psychopy/experiment/components/ratingScale/.DS_Store +0 -0
  131. psychopy/experiment/components/resourceManager/.DS_Store +0 -0
  132. psychopy/experiment/components/roi/.DS_Store +0 -0
  133. psychopy/experiment/components/roi/__init__.py +5 -0
  134. psychopy/experiment/components/routineSettings/.DS_Store +0 -0
  135. psychopy/experiment/components/routineSettings/__init__.py +57 -10
  136. psychopy/experiment/components/serialOut/.DS_Store +0 -0
  137. psychopy/experiment/components/settings/.DS_Store +0 -0
  138. psychopy/experiment/components/settings/__init__.py +117 -42
  139. psychopy/experiment/components/slider/.DS_Store +0 -0
  140. psychopy/experiment/components/sound/.DS_Store +0 -0
  141. psychopy/experiment/components/sound/__init__.py +54 -19
  142. psychopy/experiment/components/static/.DS_Store +0 -0
  143. psychopy/experiment/components/static/__init__.py +1 -1
  144. psychopy/experiment/components/text/.DS_Store +0 -0
  145. psychopy/experiment/components/text/__init__.py +28 -3
  146. psychopy/experiment/components/textbox/.DS_Store +0 -0
  147. psychopy/experiment/components/textbox/__init__.py +12 -2
  148. psychopy/experiment/components/unknown/.DS_Store +0 -0
  149. psychopy/experiment/components/unknown/__init__.py +1 -2
  150. psychopy/experiment/components/unknownPlugin/.DS_Store +0 -0
  151. psychopy/experiment/components/unknownPlugin/__init__.py +2 -2
  152. psychopy/experiment/components/variable/.DS_Store +0 -0
  153. psychopy/experiment/flow.py +11 -4
  154. psychopy/experiment/loops.py +85 -37
  155. psychopy/experiment/params.py +74 -32
  156. psychopy/experiment/py2js_transpiler.py +8 -1
  157. psychopy/experiment/routines/.DS_Store +0 -0
  158. psychopy/experiment/routines/_base.py +102 -22
  159. psychopy/experiment/routines/counterbalance/.DS_Store +0 -0
  160. psychopy/experiment/routines/counterbalance/__init__.py +5 -1
  161. psychopy/experiment/routines/eyetracker_calibrate/.DS_Store +0 -0
  162. psychopy/experiment/routines/eyetracker_validate/.DS_Store +0 -0
  163. psychopy/experiment/routines/pavlovia_survey/.DS_Store +0 -0
  164. psychopy/experiment/routines/photodiodeValidator/.DS_Store +0 -0
  165. psychopy/experiment/routines/photodiodeValidator/__init__.py +7 -6
  166. psychopy/experiment/routines/unknown/.DS_Store +0 -0
  167. psychopy/gui/wxgui.py +4 -4
  168. psychopy/hardware/.DS_Store +0 -0
  169. psychopy/hardware/__init__.py +1 -1
  170. psychopy/hardware/base.py +12 -0
  171. psychopy/hardware/camera/__init__.py +1 -15
  172. psychopy/hardware/cedrus.py +10 -11
  173. psychopy/hardware/crs/colorcal.py +13 -22
  174. psychopy/hardware/crs/optical.py +10 -20
  175. psychopy/hardware/emulator.py +17 -14
  176. psychopy/hardware/eyetracker.py +42 -118
  177. psychopy/hardware/gammasci.py +4 -15
  178. psychopy/hardware/keyboard.py +102 -11
  179. psychopy/hardware/listener.py +3 -0
  180. psychopy/hardware/microphone.py +148 -18
  181. psychopy/hardware/minolta.py +8 -15
  182. psychopy/hardware/photodiode.py +191 -16
  183. psychopy/hardware/photometer/__init__.py +11 -19
  184. psychopy/hardware/pr.py +8 -15
  185. psychopy/hardware/speaker.py +39 -4
  186. psychopy/info.py +0 -71
  187. psychopy/iohub/.DS_Store +0 -0
  188. psychopy/iohub/__init__.py +1 -1
  189. psychopy/iohub/client/__init__.py +30 -20
  190. psychopy/iohub/client/keyboard.py +24 -24
  191. psychopy/iohub/datastore/__init__.py +2 -2
  192. psychopy/iohub/datastore/util.py +2 -2
  193. psychopy/iohub/default_config.yaml +1 -1
  194. psychopy/iohub/devices/.DS_Store +0 -0
  195. psychopy/iohub/devices/__init__.py +112 -25
  196. psychopy/iohub/devices/deviceConfigValidation.py +2 -1
  197. psychopy/iohub/devices/experiment/default_experiment.yaml +12 -1
  198. psychopy/iohub/devices/experiment/supported_config_settings.yaml +5 -1
  199. psychopy/iohub/devices/eyetracker/.DS_Store +0 -0
  200. psychopy/iohub/devices/eyetracker/__init__.py +46 -0
  201. psychopy/iohub/devices/eyetracker/calibration/procedure.py +2 -2
  202. psychopy/iohub/devices/eyetracker/hw/gazepoint/__init__.py +14 -2
  203. psychopy/iohub/devices/eyetracker/hw/mouse/eyetracker.py +3 -4
  204. psychopy/iohub/server.py +2 -2
  205. psychopy/iohub/start_iohub_process.py +3 -0
  206. psychopy/iohub/util/__init__.py +62 -70
  207. psychopy/layout.py +5 -5
  208. psychopy/logging.py +8 -1
  209. psychopy/microphone.py +10 -37
  210. psychopy/platform_specific/__init__.py +0 -2
  211. psychopy/platform_specific/darwin.py +1 -3
  212. psychopy/platform_specific/linux.py +31 -33
  213. psychopy/platform_specific/win32.py +38 -13
  214. psychopy/plugins/__init__.py +148 -116
  215. psychopy/plugins/util.py +39 -0
  216. psychopy/preferences/Darwin.spec +4 -2
  217. psychopy/preferences/FreeBSD.spec +4 -2
  218. psychopy/preferences/Linux.spec +4 -2
  219. psychopy/preferences/Windows.spec +4 -2
  220. psychopy/preferences/baseNoArch.spec +4 -2
  221. psychopy/preferences/preferences.py +47 -24
  222. psychopy/projects/pavlovia.py +47 -4
  223. psychopy/scripts/psyexpCompile.py +0 -4
  224. psychopy/session.py +153 -21
  225. psychopy/sound/__init__.py +31 -21
  226. psychopy/sound/_base.py +20 -3
  227. psychopy/sound/audioclip.py +320 -33
  228. psychopy/sound/backend_ptb.py +47 -58
  229. psychopy/sound/backend_pygame.py +1 -1
  230. psychopy/sound/backend_pysound.py +6 -15
  231. psychopy/sound/transcribe.py +53 -0
  232. psychopy/tests/.DS_Store +0 -0
  233. psychopy/tests/data/.DS_Store +0 -0
  234. psychopy/tests/data/TestUnknownPluginComponent_load_resave.psyexp +135 -0
  235. psychopy/tests/data/Test_textbox/test_ori_0_bottom right.png +0 -0
  236. psychopy/tests/data/Test_textbox/test_ori_0_center.png +0 -0
  237. psychopy/tests/data/Test_textbox/test_ori_0_top left.png +0 -0
  238. psychopy/tests/data/Test_textbox/test_ori_120_bottom right.png +0 -0
  239. psychopy/tests/data/Test_textbox/test_ori_120_center.png +0 -0
  240. psychopy/tests/data/Test_textbox/test_ori_120_top left.png +0 -0
  241. psychopy/tests/data/Test_textbox/test_ori_180_bottom right.png +0 -0
  242. psychopy/tests/data/Test_textbox/test_ori_180_center.png +0 -0
  243. psychopy/tests/data/Test_textbox/test_ori_180_top left.png +0 -0
  244. psychopy/tests/data/Test_textbox/test_ori_240_bottom right.png +0 -0
  245. psychopy/tests/data/Test_textbox/test_ori_240_center.png +0 -0
  246. psychopy/tests/data/Test_textbox/test_ori_240_top left.png +0 -0
  247. psychopy/tests/data/correctScript/.DS_Store +0 -0
  248. psychopy/tests/data/test_components/testClearKeyboard/testClearKeyboard.psyexp +200 -0
  249. psychopy/tests/data/test_session/.DS_Store +0 -0
  250. psychopy/tests/data/test_session/root/testFutureTrials/testFutureTrials.psyexp +155 -0
  251. psychopy/tests/data/test_session/root/testTrialNav/trialNav.psyexp +158 -0
  252. psychopy/tests/test_app/.DS_Store +0 -0
  253. psychopy/tests/test_app/conftest.py +2 -2
  254. psychopy/tests/test_app/test_speed.py +4 -1
  255. psychopy/tests/test_data/test_TrialHandler2.py +146 -1
  256. psychopy/tests/test_experiment/.DS_Store +0 -0
  257. psychopy/tests/test_experiment/needs_wx/genComponsTemplate.py +3 -3
  258. psychopy/tests/test_experiment/needs_wx/test_components.py +2 -2
  259. psychopy/tests/test_experiment/test_components/test_KeyboardComponent.py +28 -0
  260. psychopy/tests/test_experiment/test_components/test_UnknownPluginComponent.py +27 -0
  261. psychopy/tests/test_experiment/test_components/test_base_components.py +58 -0
  262. psychopy/tests/test_experiment/test_py2js.py +1 -1
  263. psychopy/tests/test_hardware/test_keyboard.py +184 -16
  264. psychopy/tests/test_hardware/test_ports.py +1 -11
  265. psychopy/tests/test_liaison/test_Liaison.py +47 -0
  266. psychopy/tests/test_misc/test_core.py +5 -0
  267. psychopy/tests/test_session/test_Session.py +5 -1
  268. psychopy/tests/test_tools/test_versionchooser.py +39 -8
  269. psychopy/tests/test_visual/test_all_stimuli.py +0 -97
  270. psychopy/tests/test_visual/test_image.py +6 -5
  271. psychopy/tests/test_visual/test_textbox.py +36 -0
  272. psychopy/tests/utils.py +4 -0
  273. psychopy/tools/filetools.py +1 -1
  274. psychopy/tools/pkgtools.py +160 -137
  275. psychopy/tools/versionchooser.py +10 -10
  276. psychopy/tools/wizard.py +3 -3
  277. psychopy/visual/.DS_Store +0 -0
  278. psychopy/visual/backends/pygletbackend.py +24 -13
  279. psychopy/visual/basevisual.py +5 -11
  280. psychopy/visual/button.py +2 -14
  281. psychopy/visual/helpers.py +5 -5
  282. psychopy/visual/line.py +1 -2
  283. psychopy/visual/movie2.py +7 -816
  284. psychopy/visual/movie3.py +7 -589
  285. psychopy/visual/movies/__init__.py +8 -11
  286. psychopy/visual/movies/frame.py +5 -2
  287. psychopy/visual/movies/players/ffpyplayer_player.py +5 -2
  288. psychopy/visual/noise.py +8 -7
  289. psychopy/visual/patch.py +7 -16
  290. psychopy/visual/progress.py +1 -1
  291. psychopy/visual/radial.py +9 -7
  292. psychopy/visual/ratingscale.py +8 -1415
  293. psychopy/visual/secondorder.py +10 -9
  294. psychopy/visual/shape.py +7 -2
  295. psychopy/visual/text.py +1 -1
  296. psychopy/visual/textbox2/textbox2.py +28 -5
  297. psychopy/web.py +5 -2
  298. {psychopy-2024.1.3.dist-info → psychopy-2024.2.0.dist-info}/METADATA +8 -13
  299. {psychopy-2024.1.3.dist-info → psychopy-2024.2.0.dist-info}/RECORD +313 -219
  300. {psychopy-2024.1.3.dist-info → psychopy-2024.2.0.dist-info}/WHEEL +1 -1
  301. psychopy/app/Resources/click.png +0 -0
  302. psychopy/app/Resources/next.png +0 -0
  303. psychopy/experiment/components/patch/__init__.py +0 -121
  304. psychopy/experiment/components/patch/classic/patch.png +0 -0
  305. psychopy/experiment/components/patch/dark/patch.png +0 -0
  306. psychopy/experiment/components/patch/dark/patch@2x.png +0 -0
  307. psychopy/experiment/components/patch/light/patch.png +0 -0
  308. psychopy/experiment/components/patch/light/patch@2x.png +0 -0
  309. psychopy/experiment/components/ratingScale/__init__.py +0 -337
  310. psychopy/experiment/components/ratingScale/classic/ratingscale.png +0 -0
  311. psychopy/experiment/components/ratingScale/classic/ratingscale@2x.png +0 -0
  312. psychopy/experiment/components/ratingScale/dark/ratingScale@2x.png +0 -0
  313. psychopy/experiment/components/ratingScale/dark/ratingscale.png +0 -0
  314. psychopy/experiment/components/ratingScale/light/ratingScale@2x.png +0 -0
  315. psychopy/experiment/components/ratingScale/light/ratingscale.png +0 -0
  316. psychopy/platform_specific/posix.py +0 -16
  317. psychopy/tests/test_sound/test_microphone.py +0 -217
  318. psychopy/tests/test_visual/test_ratingScale.py +0 -299
  319. /psychopy/{app/Resources → assets}/Psychopy Window Favicon@16w.png +0 -0
  320. /psychopy/{app/Resources → assets}/Psychopy Window Favicon@32w.png +0 -0
  321. /psychopy/{app/Resources → assets}/USB-C.png +0 -0
  322. /psychopy/{app/Resources → assets}/USB.png +0 -0
  323. /psychopy/{app/Resources → assets}/creditCard.png +0 -0
  324. /psychopy/{app/Resources → assets}/default.mp3 +0 -0
  325. /psychopy/{app/Resources → assets}/default.mp4 +0 -0
  326. /psychopy/{app/Resources → assets}/default.png +0 -0
  327. /psychopy/{app/Resources → assets/templates}/instruct1.png +0 -0
  328. /psychopy/{app/Resources → assets/templates}/instruct2.png +0 -0
  329. {psychopy-2024.1.3.dist-info → psychopy-2024.2.0.dist-info}/entry_points.txt +0 -0
  330. {psychopy-2024.1.3.dist-info → psychopy-2024.2.0.dist-info}/licenses/AUTHORS.md +0 -0
  331. {psychopy-2024.1.3.dist-info → psychopy-2024.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -25,6 +25,7 @@ def init(rate=44100, stereo=True, buffer=128):
25
25
  pass
26
26
  # for compatibility with other backends but not needed
27
27
 
28
+
28
29
  def getDevices(kind=None):
29
30
  """Returns a dict of dict of audio devices of specified `kind`
30
31
 
@@ -32,15 +33,16 @@ def getDevices(kind=None):
32
33
  """
33
34
  devs = {}
34
35
  for ii, dev in enumerate(soundcard.device_info()):
35
- if (dev['max_output_channels']==0 and kind=='output' or
36
- dev['max_input_channels']==0 and kind=='input'):
36
+ if (dev['max_output_channels'] == 0 and kind == 'output' or
37
+ dev['max_input_channels'] == 0 and kind == 'input'):
37
38
  continue
38
39
  # newline characters must be removed
39
- devName = dev['name'].replace('\r\n','')
40
+ devName = dev['name'].replace('\r\n', '')
40
41
  devs[devName] = dev
41
42
  dev['id'] = ii
42
43
  return devs
43
44
 
45
+
44
46
  # these will be controlled by sound.__init__.py
45
47
  defaultInput = None
46
48
  defaultOutput = None
@@ -268,7 +270,7 @@ class SoundPySoundCard(_SoundBase):
268
270
  def _setSndFromFile(self, fileName):
269
271
  # alias default names (so it always points to default.png)
270
272
  if fileName in ft.defaultStim:
271
- fileName = Path(prefs.paths['resources']) / ft.defaultStim[fileName]
273
+ fileName = Path(prefs.paths['assets']) / ft.defaultStim[fileName]
272
274
  # load the file
273
275
  if not path.isfile(fileName):
274
276
  msg = "Sound file %s could not be found." % fileName
@@ -288,17 +290,6 @@ class SoundPySoundCard(_SoundBase):
288
290
  logging.error(msg % fileName)
289
291
  raise ValueError(msg % fileName)
290
292
 
291
- @property
292
- def status(self):
293
- # NB this is stored by the _callbacks class for fast access when
294
- # data buffer needs filling (_callbacks class does not have a
295
- # reference back here)
296
- return self.__dict__['status']
297
-
298
- @status.setter
299
- def status(self, status):
300
- self.__dict__['status'] = status
301
-
302
293
  def _setSndFromArray(self, thisArray):
303
294
  """For pysoundcard all sounds are ultimately played as an array so
304
295
  other setSound methods are going to call this having created an arr
@@ -228,6 +228,59 @@ class TranscriptionResult:
228
228
  def wordData(self, val):
229
229
  self._wordData = val
230
230
 
231
+ def getSpeechInterval(self):
232
+ """Get the start and stop times for the interval of speech in the audio
233
+ clip.
234
+
235
+ This feature is only supported by the Whisper transcriber. The start and
236
+ end times of the speech interval are returned in seconds.
237
+
238
+ Returns
239
+ -------
240
+ tuple
241
+ Start and end times of the speech interval in seconds. If the engine
242
+ does not support this feature, or if the data is missing,
243
+ `(None, None)` is returned. In cases where either the start or end
244
+ time is missing, the value will be `None` for that field.
245
+
246
+ """
247
+ nullData = (None, None) # default return value if no data
248
+
249
+ if self._engine in ('sphinx', 'google'):
250
+ logging.warning(
251
+ "Method `getSpeechInterval` is not supported for the "
252
+ "transcription engine `{}`.".format(self._engine))
253
+ return nullData
254
+ elif self._engine == 'whisper':
255
+ if self.responseData is None:
256
+ return nullData
257
+
258
+ # this value is in the response data which is in JSON format
259
+ segmentData = self.responseData.get('segments', None)
260
+
261
+ if segmentData is None:
262
+ return nullData
263
+
264
+ # integers for keys
265
+ segmentKeys = list(segmentData.keys())
266
+
267
+ if len(segmentKeys) == 0:
268
+ return nullData
269
+
270
+ # sort segment keys to ensure monotonic ordering
271
+ segmentKeys.sort()
272
+
273
+ # get first and last segment
274
+ firstSegment = segmentData.get(segmentKeys[0], None)
275
+ lastSegment = segmentData.get(segmentKeys[-1], None)
276
+
277
+ # get speech onset/offset times
278
+ speechOnset = firstSegment.get('start', None)
279
+ speechOffset = lastSegment.get('end', None)
280
+
281
+ # return start and end times
282
+ return speechOnset, speechOffset
283
+
231
284
  @property
232
285
  def success(self):
233
286
  """`True` if the transcriber returned a result successfully (`bool`)."""
psychopy/tests/.DS_Store CHANGED
Binary file
Binary file
@@ -0,0 +1,135 @@
1
+ <?xml version="1.0" ?>
2
+ <PsychoPy2experiment encoding="utf-8" version="2024.2.0">
3
+ <Settings>
4
+ <Param val="3" valType="str" updates="None" name="Audio latency priority"/>
5
+ <Param val="ptb" valType="str" updates="None" name="Audio lib"/>
6
+ <Param val="" valType="str" updates="None" name="Completed URL"/>
7
+ <Param val="auto" valType="str" updates="None" name="Data file delimiter"/>
8
+ <Param val="u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])" valType="code" updates="None" name="Data filename"/>
9
+ <Param val="True" valType="bool" updates="None" name="Enable Escape"/>
10
+ <Param val="Thank you for your patience." valType="str" updates="None" name="End Message"/>
11
+ <Param val="{'participant':'f&quot;{randint(0, 999999):06.0f}&quot;', 'session':'001'}" valType="code" updates="None" name="Experiment info"/>
12
+ <Param val="True" valType="bool" updates="None" name="Force stereo"/>
13
+ <Param val="True" valType="bool" updates="None" name="Full-screen window"/>
14
+ <Param val="" valType="str" updates="None" name="HTML path"/>
15
+ <Param val="" valType="str" updates="None" name="Incomplete URL"/>
16
+ <Param val="testMonitor" valType="str" updates="None" name="Monitor"/>
17
+ <Param val="[]" valType="list" updates="None" name="Resources"/>
18
+ <Param val="False" valType="bool" updates="None" name="Save csv file"/>
19
+ <Param val="False" valType="bool" updates="None" name="Save excel file"/>
20
+ <Param val="False" valType="bool" updates="None" name="Save hdf5 file"/>
21
+ <Param val="True" valType="bool" updates="None" name="Save log file"/>
22
+ <Param val="True" valType="bool" updates="None" name="Save psydat file"/>
23
+ <Param val="True" valType="bool" updates="None" name="Save wide csv file"/>
24
+ <Param val="1" valType="num" updates="None" name="Screen"/>
25
+ <Param val="True" valType="bool" updates="None" name="Show info dlg"/>
26
+ <Param val="False" valType="bool" updates="None" name="Show mouse"/>
27
+ <Param val="height" valType="str" updates="None" name="Units"/>
28
+ <Param val="" valType="str" updates="None" name="Use version"/>
29
+ <Param val="(1024, 768)" valType="list" updates="None" name="Window size (pixels)"/>
30
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
31
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
32
+ <Param val="avg" valType="str" updates="None" name="blendMode"/>
33
+ <Param val="float" valType="str" updates="None" name="clockFormat"/>
34
+ <Param val="{'thisRow.t': 'priority.CRITICAL', 'expName': 'priority.LOW'}" valType="dict" updates="None" name="colPriority"/>
35
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
36
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
37
+ <Param val="warning" valType="code" updates="None" name="consoleLoggingLevel"/>
38
+ <Param val="default" valType="str" updates="None" name="ecSampleRate"/>
39
+ <Param val="100.1.1.1" valType="str" updates="None" name="elAddress"/>
40
+ <Param val="FILTER_LEVEL_2" valType="str" updates="None" name="elDataFiltering"/>
41
+ <Param val="FILTER_LEVEL_OFF" valType="str" updates="None" name="elLiveFiltering"/>
42
+ <Param val="EYELINK 1000 DESKTOP" valType="str" updates="None" name="elModel"/>
43
+ <Param val="ELLIPSE_FIT" valType="str" updates="None" name="elPupilAlgorithm"/>
44
+ <Param val="PUPIL_AREA" valType="str" updates="None" name="elPupilMeasure"/>
45
+ <Param val="1000" valType="num" updates="None" name="elSampleRate"/>
46
+ <Param val="False" valType="bool" updates="None" name="elSimMode"/>
47
+ <Param val="RIGHT_EYE" valType="str" updates="None" name="elTrackEyes"/>
48
+ <Param val="PUPIL_CR_TRACKING" valType="str" updates="None" name="elTrackingMode"/>
49
+ <Param val="TestUnknownPluginComponent_load_resave" valType="str" updates="None" name="expName"/>
50
+ <Param val="on Sync" valType="str" updates="None" name="exportHTML"/>
51
+ <Param val="None" valType="str" updates="None" name="eyetracker"/>
52
+ <Param val="" valType="code" updates="None" name="frameRate"/>
53
+ <Param val="Attempting to measure frame rate of screen, please wait..." valType="str" updates="None" name="frameRateMsg"/>
54
+ <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
55
+ <Param val="4242" valType="num" updates="None" name="gpPort"/>
56
+ <Param val="ioHub" valType="str" updates="None" name="keyboardBackend"/>
57
+ <Param val="info" valType="code" updates="None" name="logging level"/>
58
+ <Param val="True" valType="bool" updates="None" name="measureFrameRate"/>
59
+ <Param val="MIDDLE_BUTTON" valType="list" updates="None" name="mgBlink"/>
60
+ <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
61
+ <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
62
+ <Param val="neon.local" valType="str" updates="None" name="plCompanionAddress"/>
63
+ <Param val="8080" valType="num" updates="None" name="plCompanionPort"/>
64
+ <Param val="True" valType="bool" updates="None" name="plCompanionRecordingEnabled"/>
65
+ <Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
66
+ <Param val="True" valType="bool" updates="None" name="plPupilCaptureRecordingEnabled"/>
67
+ <Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
68
+ <Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
69
+ <Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
70
+ <Param val="1000" valType="num" updates="None" name="plPupilRemoteTimeoutMs"/>
71
+ <Param val="False" valType="bool" updates="None" name="plPupillometryOnly"/>
72
+ <Param val="psychopy_iohub_surface" valType="str" updates="None" name="plSurfaceName"/>
73
+ <Param val="0" valType="code" updates="None" name="runMode"/>
74
+ <Param val="False" valType="bool" updates="None" name="rush"/>
75
+ <Param val="time" valType="str" updates="None" name="sortColumns"/>
76
+ <Param val="" valType="str" updates="None" name="tbLicenseFile"/>
77
+ <Param val="" valType="str" updates="None" name="tbModel"/>
78
+ <Param val="60" valType="num" updates="None" name="tbSampleRate"/>
79
+ <Param val="" valType="str" updates="None" name="tbSerialNo"/>
80
+ <Param val="pyglet" valType="str" updates="None" name="winBackend"/>
81
+ </Settings>
82
+ <Routines>
83
+ <Routine name="trial">
84
+ <RoutineSettingsComponent name="trial" plugin="None">
85
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
86
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
87
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
88
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
89
+ <Param val="" valType="str" updates="constant" name="desc"/>
90
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
91
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
92
+ <Param val="False" valType="code" updates="None" name="forceNonSlip"/>
93
+ <Param val="trial" valType="code" updates="None" name="name"/>
94
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
95
+ <Param val="" valType="code" updates="constant" name="skipIf"/>
96
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
97
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
98
+ <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
99
+ </RoutineSettingsComponent>
100
+ <TestFromPluginComponent name="testPluginComp" plugin="psychopy-plugin-which-doesnt-exist">
101
+ <Param val="4" valType="code" updates="constant" name="angularCycles"/>
102
+ <Param val="0" valType="code" updates="constant" name="angularPhase"/>
103
+ <Param val="$[1,1,1]" valType="color" updates="constant" name="color"/>
104
+ <Param val="rgb" valType="str" updates="constant" name="colorSpace"/>
105
+ <Param val="1.0" valType="num" updates="constant" name="contrast"/>
106
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
107
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
108
+ <Param val="Linear" valType="str" updates="constant" name="interpolate"/>
109
+ <Param val="" valType="file" updates="constant" name="mask"/>
110
+ <Param val="radial" valType="code" updates="None" name="name"/>
111
+ <Param val="" valType="num" updates="constant" name="opacity"/>
112
+ <Param val="0" valType="num" updates="constant" name="ori"/>
113
+ <Param val="(0, 0)" valType="list" updates="constant" name="pos"/>
114
+ <Param val="3" valType="code" updates="constant" name="radialCycles"/>
115
+ <Param val="0" valType="code" updates="constant" name="radialPhase"/>
116
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
117
+ <Param val="(0.5, 0.5)" valType="list" updates="constant" name="size"/>
118
+ <Param val="" valType="code" updates="None" name="startEstim"/>
119
+ <Param val="time (s)" valType="str" updates="None" name="startType"/>
120
+ <Param val="0.0" valType="code" updates="None" name="startVal"/>
121
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
122
+ <Param val="1.0" valType="code" updates="constant" name="stopVal"/>
123
+ <Param val="True" valType="bool" updates="None" name="syncScreenRefresh"/>
124
+ <Param val="sqrXsqr" valType="file" updates="constant" name="tex"/>
125
+ <Param val="128" valType="code" updates="constant" name="texture resolution"/>
126
+ <Param val="from exp settings" valType="str" updates="None" name="units"/>
127
+ <Param val="" valType="code" updates="None" name="validator"/>
128
+ <Param val="(0, 360)" valType="code" updates="constant" name="visibleWedge"/>
129
+ </TestFromPluginComponent>
130
+ </Routine>
131
+ </Routines>
132
+ <Flow>
133
+ <Routine name="trial"/>
134
+ </Flow>
135
+ </PsychoPy2experiment>
@@ -0,0 +1,200 @@
1
+ <?xml version="1.0" ?>
2
+ <PsychoPy2experiment encoding="utf-8" version="2024.1.4">
3
+ <Settings>
4
+ <Param val="3" valType="str" updates="None" name="Audio latency priority"/>
5
+ <Param val="ptb" valType="str" updates="None" name="Audio lib"/>
6
+ <Param val="" valType="str" updates="None" name="Completed URL"/>
7
+ <Param val="auto" valType="str" updates="None" name="Data file delimiter"/>
8
+ <Param val="u'data/%s_%s_%s' % (expInfo['participant'], expName, expInfo['date'])" valType="code" updates="None" name="Data filename"/>
9
+ <Param val="True" valType="bool" updates="None" name="Enable Escape"/>
10
+ <Param val="" valType="str" updates="None" name="End Message"/>
11
+ <Param val="{'participant': 'f&quot;{randint(0, 999999):06.0f}&quot;', 'session': '001'}" valType="code" updates="None" name="Experiment info"/>
12
+ <Param val="True" valType="bool" updates="None" name="Force stereo"/>
13
+ <Param val="True" valType="bool" updates="None" name="Full-screen window"/>
14
+ <Param val="" valType="str" updates="None" name="HTML path"/>
15
+ <Param val="" valType="str" updates="None" name="Incomplete URL"/>
16
+ <Param val="testMonitor" valType="str" updates="None" name="Monitor"/>
17
+ <Param val="[]" valType="list" updates="None" name="Resources"/>
18
+ <Param val="False" valType="bool" updates="None" name="Save csv file"/>
19
+ <Param val="False" valType="bool" updates="None" name="Save excel file"/>
20
+ <Param val="False" valType="bool" updates="None" name="Save hdf5 file"/>
21
+ <Param val="True" valType="bool" updates="None" name="Save log file"/>
22
+ <Param val="True" valType="bool" updates="None" name="Save psydat file"/>
23
+ <Param val="True" valType="bool" updates="None" name="Save wide csv file"/>
24
+ <Param val="1" valType="num" updates="None" name="Screen"/>
25
+ <Param val="True" valType="bool" updates="None" name="Show info dlg"/>
26
+ <Param val="False" valType="bool" updates="None" name="Show mouse"/>
27
+ <Param val="height" valType="str" updates="None" name="Units"/>
28
+ <Param val="" valType="str" updates="None" name="Use version"/>
29
+ <Param val="[1920, 1080]" valType="list" updates="None" name="Window size (pixels)"/>
30
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
31
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
32
+ <Param val="avg" valType="str" updates="None" name="blendMode"/>
33
+ <Param val="float" valType="str" updates="None" name="clockFormat"/>
34
+ <Param val="{'thisRow.t': 'priority.CRITICAL', 'expName': 'priority.LOW'}" valType="dict" updates="None" name="colPriority"/>
35
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
36
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
37
+ <Param val="100.1.1.1" valType="str" updates="None" name="elAddress"/>
38
+ <Param val="FILTER_LEVEL_2" valType="str" updates="None" name="elDataFiltering"/>
39
+ <Param val="FILTER_LEVEL_OFF" valType="str" updates="None" name="elLiveFiltering"/>
40
+ <Param val="EYELINK 1000 DESKTOP" valType="str" updates="None" name="elModel"/>
41
+ <Param val="ELLIPSE_FIT" valType="str" updates="None" name="elPupilAlgorithm"/>
42
+ <Param val="PUPIL_AREA" valType="str" updates="None" name="elPupilMeasure"/>
43
+ <Param val="1000" valType="num" updates="None" name="elSampleRate"/>
44
+ <Param val="False" valType="bool" updates="None" name="elSimMode"/>
45
+ <Param val="RIGHT_EYE" valType="str" updates="None" name="elTrackEyes"/>
46
+ <Param val="PUPIL_CR_TRACKING" valType="str" updates="None" name="elTrackingMode"/>
47
+ <Param val="testKb" valType="str" updates="None" name="expName"/>
48
+ <Param val="on Sync" valType="str" updates="None" name="exportHTML"/>
49
+ <Param val="None" valType="str" updates="None" name="eyetracker"/>
50
+ <Param val="" valType="code" updates="None" name="frameRate"/>
51
+ <Param val="Attempting to measure frame rate of screen, please wait..." valType="str" updates="None" name="frameRateMsg"/>
52
+ <Param val="127.0.0.1" valType="str" updates="None" name="gpAddress"/>
53
+ <Param val="4242" valType="num" updates="None" name="gpPort"/>
54
+ <Param val="PsychToolbox" valType="str" updates="None" name="keyboardBackend"/>
55
+ <Param val="warning" valType="code" updates="None" name="logging level"/>
56
+ <Param val="True" valType="bool" updates="None" name="measureFrameRate"/>
57
+ <Param val="('MIDDLE_BUTTON',)" valType="list" updates="None" name="mgBlink"/>
58
+ <Param val="CONTINUOUS" valType="str" updates="None" name="mgMove"/>
59
+ <Param val="0.5" valType="num" updates="None" name="mgSaccade"/>
60
+ <Param val="neon.local" valType="str" updates="None" name="plCompanionAddress"/>
61
+ <Param val="8080" valType="num" updates="None" name="plCompanionPort"/>
62
+ <Param val="True" valType="bool" updates="None" name="plCompanionRecordingEnabled"/>
63
+ <Param val="0.6" valType="num" updates="None" name="plConfidenceThreshold"/>
64
+ <Param val="True" valType="bool" updates="None" name="plPupilCaptureRecordingEnabled"/>
65
+ <Param val="" valType="str" updates="None" name="plPupilCaptureRecordingLocation"/>
66
+ <Param val="127.0.0.1" valType="str" updates="None" name="plPupilRemoteAddress"/>
67
+ <Param val="50020" valType="num" updates="None" name="plPupilRemotePort"/>
68
+ <Param val="1000" valType="num" updates="None" name="plPupilRemoteTimeoutMs"/>
69
+ <Param val="False" valType="bool" updates="None" name="plPupillometryOnly"/>
70
+ <Param val="psychopy_iohub_surface" valType="str" updates="None" name="plSurfaceName"/>
71
+ <Param val="0" valType="code" updates="None" name="runMode"/>
72
+ <Param val="False" valType="bool" updates="None" name="rush"/>
73
+ <Param val="time" valType="str" updates="None" name="sortColumns"/>
74
+ <Param val="" valType="str" updates="None" name="tbLicenseFile"/>
75
+ <Param val="" valType="str" updates="None" name="tbModel"/>
76
+ <Param val="60" valType="num" updates="None" name="tbSampleRate"/>
77
+ <Param val="" valType="str" updates="None" name="tbSerialNo"/>
78
+ <Param val="pyglet" valType="str" updates="None" name="winBackend"/>
79
+ </Settings>
80
+ <Routines>
81
+ <Routine name="getter">
82
+ <RoutineSettingsComponent name="getter" plugin="None">
83
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
84
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
85
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
86
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
87
+ <Param val="If keypresses aren't being cleared properly, this Routine will end immediately." valType="str" updates="constant" name="desc"/>
88
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
89
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
90
+ <Param val="getter" valType="code" updates="None" name="name"/>
91
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
92
+ <Param val="" valType="code" updates="constant" name="skipIf"/>
93
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
94
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
95
+ <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
96
+ </RoutineSettingsComponent>
97
+ <KeyboardComponent name="key_resp" plugin="None">
98
+ <Param val="" valType="list" updates="constant" name="allowedKeys"/>
99
+ <Param val="" valType="str" updates="constant" name="correctAns"/>
100
+ <Param val="" valType="str" updates="None" name="deviceLabel"/>
101
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
102
+ <Param val="True" valType="bool" updates="constant" name="discard previous"/>
103
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
104
+ <Param val="True" valType="bool" updates="constant" name="forceEndRoutine"/>
105
+ <Param val="key_resp" valType="code" updates="None" name="name"/>
106
+ <Param val="press" valType="str" updates="constant" name="registerOn"/>
107
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
108
+ <Param val="" valType="code" updates="None" name="startEstim"/>
109
+ <Param val="time (s)" valType="str" updates="None" name="startType"/>
110
+ <Param val="0.0" valType="code" updates="None" name="startVal"/>
111
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
112
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
113
+ <Param val="last key" valType="str" updates="constant" name="store"/>
114
+ <Param val="False" valType="bool" updates="constant" name="storeCorrect"/>
115
+ <Param val="True" valType="bool" updates="constant" name="syncScreenRefresh"/>
116
+ </KeyboardComponent>
117
+ <CodeComponent name="code" plugin="None">
118
+ <Param val="" valType="extendedCode" updates="constant" name="Before Experiment"/>
119
+ <Param val="" valType="extendedCode" updates="constant" name="Before JS Experiment"/>
120
+ <Param val="" valType="extendedCode" updates="constant" name="Begin Experiment"/>
121
+ <Param val="" valType="extendedCode" updates="constant" name="Begin JS Experiment"/>
122
+ <Param val="" valType="extendedCode" updates="constant" name="Begin JS Routine"/>
123
+ <Param val="" valType="extendedCode" updates="constant" name="Begin Routine"/>
124
+ <Param val="Auto-&gt;JS" valType="str" updates="None" name="Code Type"/>
125
+ <Param val="if frameN &gt; 2:&amp;#10; assert not len(key_resp.device.responses)&amp;#10; continueRoutine = False" valType="extendedCode" updates="constant" name="Each Frame"/>
126
+ <Param val="var _pj;&amp;#10;function _pj_snippets(container) {&amp;#10; function _assert(comp, msg) {&amp;#10; function PJAssertionError(message) {&amp;#10; this.name = &quot;PJAssertionError&quot;;&amp;#10; this.message = (message || &quot;Custom error PJAssertionError&quot;);&amp;#10; if (((typeof Error.captureStackTrace) === &quot;function&quot;)) {&amp;#10; Error.captureStackTrace(this, this.constructor);&amp;#10; } else {&amp;#10; this.stack = new Error(message).stack;&amp;#10; }&amp;#10; }&amp;#10; PJAssertionError.prototype = Object.create(Error.prototype);&amp;#10; PJAssertionError.prototype.constructor = PJAssertionError;&amp;#10; msg = (msg || &quot;Assertion failed.&quot;);&amp;#10; if ((! comp)) {&amp;#10; throw new PJAssertionError(msg);&amp;#10; }&amp;#10; }&amp;#10; container[&quot;_assert&quot;] = _assert;&amp;#10; return container;&amp;#10;}&amp;#10;_pj = {};&amp;#10;_pj_snippets(_pj);&amp;#10;if ((frameN &gt; 2)) {&amp;#10; _pj._assert((! key_resp.device.responses.length), null);&amp;#10; continueRoutine = false;&amp;#10;}&amp;#10;" valType="extendedCode" updates="constant" name="Each JS Frame"/>
127
+ <Param val="" valType="extendedCode" updates="constant" name="End Experiment"/>
128
+ <Param val="" valType="extendedCode" updates="constant" name="End JS Experiment"/>
129
+ <Param val="" valType="extendedCode" updates="constant" name="End JS Routine"/>
130
+ <Param val="" valType="extendedCode" updates="constant" name="End Routine"/>
131
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
132
+ <Param val="code" valType="code" updates="None" name="name"/>
133
+ </CodeComponent>
134
+ </Routine>
135
+ <Routine name="presser">
136
+ <RoutineSettingsComponent name="presser" plugin="None">
137
+ <Param val="none" valType="str" updates="None" name="backgroundFit"/>
138
+ <Param val="" valType="str" updates="None" name="backgroundImg"/>
139
+ <Param val="$[0,0,0]" valType="color" updates="None" name="color"/>
140
+ <Param val="rgb" valType="str" updates="None" name="colorSpace"/>
141
+ <Param val="This Routine simulates a keypress (space) without it being collected and cleared by any Keyboard Component" valType="str" updates="constant" name="desc"/>
142
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
143
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
144
+ <Param val="presser" valType="code" updates="None" name="name"/>
145
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
146
+ <Param val="" valType="code" updates="constant" name="skipIf"/>
147
+ <Param val="duration (s)" valType="str" updates="None" name="stopType"/>
148
+ <Param val="" valType="code" updates="constant" name="stopVal"/>
149
+ <Param val="False" valType="bool" updates="None" name="useWindowParams"/>
150
+ </RoutineSettingsComponent>
151
+ <TextComponent name="text" plugin="None">
152
+ <Param val="white" valType="color" updates="constant" name="color"/>
153
+ <Param val="rgb" valType="str" updates="constant" name="colorSpace"/>
154
+ <Param val="1" valType="num" updates="constant" name="contrast"/>
155
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
156
+ <Param val="" valType="code" updates="None" name="durationEstim"/>
157
+ <Param val="None" valType="str" updates="constant" name="flip"/>
158
+ <Param val="Open Sans" valType="str" updates="constant" name="font"/>
159
+ <Param val="LTR" valType="str" updates="None" name="languageStyle"/>
160
+ <Param val="0.05" valType="num" updates="constant" name="letterHeight"/>
161
+ <Param val="text" valType="code" updates="None" name="name"/>
162
+ <Param val="" valType="num" updates="constant" name="opacity"/>
163
+ <Param val="0" valType="num" updates="constant" name="ori"/>
164
+ <Param val="(0, 0)" valType="list" updates="constant" name="pos"/>
165
+ <Param val="True" valType="bool" updates="None" name="saveStartStop"/>
166
+ <Param val="" valType="code" updates="None" name="startEstim"/>
167
+ <Param val="time (s)" valType="str" updates="None" name="startType"/>
168
+ <Param val="0.0" valType="code" updates="None" name="startVal"/>
169
+ <Param val="frame N" valType="str" updates="None" name="stopType"/>
170
+ <Param val="2" valType="code" updates="constant" name="stopVal"/>
171
+ <Param val="True" valType="bool" updates="None" name="syncScreenRefresh"/>
172
+ <Param val="this exists solely to keep the Routine alive" valType="str" updates="constant" name="text"/>
173
+ <Param val="from exp settings" valType="str" updates="None" name="units"/>
174
+ <Param val="" valType="code" updates="None" name="validator"/>
175
+ <Param val="" valType="num" updates="constant" name="wrapWidth"/>
176
+ </TextComponent>
177
+ <CodeComponent name="make_press" plugin="None">
178
+ <Param val="" valType="extendedCode" updates="constant" name="Before Experiment"/>
179
+ <Param val="" valType="extendedCode" updates="constant" name="Before JS Experiment"/>
180
+ <Param val="" valType="extendedCode" updates="constant" name="Begin Experiment"/>
181
+ <Param val="" valType="extendedCode" updates="constant" name="Begin JS Experiment"/>
182
+ <Param val="" valType="extendedCode" updates="constant" name="Begin JS Routine"/>
183
+ <Param val="" valType="extendedCode" updates="constant" name="Begin Routine"/>
184
+ <Param val="Auto-&gt;JS" valType="str" updates="None" name="Code Type"/>
185
+ <Param val="# press space&amp;#10;kp = keyboard.KeyPress(&quot;space&quot;, t)&amp;#10;kp.duration = 1/60&amp;#10;key_resp.device.receiveMessage(kp)&amp;#10;# end&amp;#10;continueRoutine = False" valType="extendedCode" updates="constant" name="Each Frame"/>
186
+ <Param val="kp = new keyboard.KeyPress(&quot;space&quot;, t);&amp;#10;kp.duration = (1 / 60);&amp;#10;key_resp.device.receiveMessage(kp);&amp;#10;continueRoutine = false;&amp;#10;" valType="extendedCode" updates="constant" name="Each JS Frame"/>
187
+ <Param val="" valType="extendedCode" updates="constant" name="End Experiment"/>
188
+ <Param val="" valType="extendedCode" updates="constant" name="End JS Experiment"/>
189
+ <Param val="" valType="extendedCode" updates="constant" name="End JS Routine"/>
190
+ <Param val="" valType="extendedCode" updates="constant" name="End Routine"/>
191
+ <Param val="False" valType="bool" updates="None" name="disabled"/>
192
+ <Param val="make_press" valType="code" updates="None" name="name"/>
193
+ </CodeComponent>
194
+ </Routine>
195
+ </Routines>
196
+ <Flow>
197
+ <Routine name="presser"/>
198
+ <Routine name="getter"/>
199
+ </Flow>
200
+ </PsychoPy2experiment>