@Rob, would the new implementation allow me to accomplish my need?
Best regards, Jinbiao Yang(杨金骉) ----------------------------------------------------------------------------- Cell Phone: +86 13162513165 Email: [email protected] Research Associate, NYU-ECNU Institute of Brain and Cognitive Science, NYU Shanghai, 3663 North Zhongshan Road, Shanghai, China 200062 2017-07-04 18:21 GMT+08:00 杨金骉 <[email protected]>: > I'm afriad not. > I want the sound keep playing in the period no matter I press, hold, or > release the key. But your solution will stop the sound when the event > handler (check_key_status) working. > > > Best regards, > Jinbiao Yang(杨金骉) > > ------------------------------------------------------------ > ----------------- > Cell Phone: +86 13162513165 <+86%20131%206251%203165> > Email: [email protected] > > Research Associate, > NYU-ECNU Institute of Brain and Cognitive Science, > NYU Shanghai, > 3663 North Zhongshan Road, Shanghai, China 200062 > > 2017-07-04 15:06 GMT+08:00 Benjamin Moran <[email protected]>: > >> For instant key press feedback, the window.on_key_press event is the >> easiest method. >> If you want to check for held-in keys, maybe a KeyStateHandler would work. >> http://pyglet.readthedocs.io/en/latest/programming_guide/key >> board.html#remembering-key-state >> >> You could then make a function to query the key state: >> >> from pyglet.window import key >> >> window = pyglet.window.Window() >> keys = key.KeyStateHandler() >> window.push_handlers(keys) >> >> def check_key_status(dt): >> global keys >> if keys[key.J]: >> do_something() >> >> pyglet.clock.schedule_interval(check_key_status, 1/60.0) >> >> >> >> Would that work? >> >> >> >> >> On Tuesday, July 4, 2017 at 2:27:15 PM UTC+9, 杨金骉 wrote: >>> >>> Thanks for your reply! >>> >>> - Is it necessary to create your own event loop? >>> I built a toolbox for the psychological/neuroscience experiments. The >>> pyglet.app.run() might confuse the user so I sidestepped it and made a flat >>> way (e.g. http://expy.readthedocs.io/en/latest/quickstart/) for the >>> coders of experiments. >>> >>> - My project >>> I'm writing a function that enables the experiment participants to >>> adjust the volume or pitch of the sound output by pressing keyboard >>> continuously. >>> In that way, I need the sound playing track and the keyboard sensor >>> working in different threads. >>> I'll be appreciated if you have the better solution! >>> >>> >>> Best regards, >>> Jinbiao Yang(杨金骉) >>> >>> ------------------------------------------------------------ >>> ----------------- >>> Cell Phone: +86 13162513165 <+86%20131%206251%203165> >>> Email: [email protected] >>> >>> Research Associate, >>> NYU-ECNU Institute of Brain and Cognitive Science, >>> NYU Shanghai, >>> 3663 North Zhongshan Road, Shanghai, China 200062 >>> >>> 2017-07-04 12:15 GMT+08:00 Benjamin Moran <[email protected]>: >>> >>>> I don't think win.dispatch_events() will work unless it's on the main >>>> thread, but I haven't look at this code recently. >>>> Is it necessary to create your own event loop? The Player class already >>>> uses threads internally for playback. >>>> >>>> There is an example in the pyglet repositories that might be useful: >>>> https://bitbucket.org/pyglet/pyglet/src/aca0272d8f04e75f3452 >>>> 72f8e1b5027ec8091586/examples/synthesizer.py?at=default&file >>>> viewer=file-view-default >>>> >>>> If that doesn't help, could you descrbe your project more? >>>> >>>> On Monday, July 3, 2017 at 2:04:04 PM UTC+9, 杨金骉 wrote: >>>>> >>>>> No. I just used loop + dispatch_events() manually. >>>>> >>>>> >>>>> On Jul 3, 2017 1:00 PM, "Benjamin Moran" <[email protected]> wrote: >>>>> >>>>>> Are you using pyglet.app.run() in your code? >>>>>> >>>>>> >>>>>> On Sunday, July 2, 2017 at 11:29:12 PM UTC+9, 杨金骉 wrote: >>>>>>> >>>>>>> I'm building a real-time sound controller. >>>>>>> I tried to put the sound player and detector of keypress in >>>>>>> different threads, and used a variable as the messenger. Below is the >>>>>>> demo >>>>>>> code: >>>>>>> >>>>>>> ## detector >>>>>>> def wait(): >>>>>>> while True: >>>>>>> win.dispatch_events() >>>>>>> >>>>>>> shared.pressing = e['key'] # the got key >>>>>>> >>>>>>> if shared.figure_released: >>>>>>> shared.pressing = None >>>>>>> >>>>>>> time.sleep(0.01) >>>>>>> >>>>>>> >>>>>>> td = threading.Thread(target=wait) >>>>>>> td.start() >>>>>>> >>>>>>> ## player >>>>>>> while 1: >>>>>>> if shared.pressing=='k': >>>>>>> # pitch up >>>>>>> elif shared.pressing=='j': >>>>>>> # pitch down >>>>>>> >>>>>>> And then I got the error: >>>>>>> >>>>>>>> *RuntimeError: EventLoop.run() must be called from the same thread >>>>>>>> that imports pyglet.app* >>>>>>> >>>>>>> >>>>>>> >>>>>>> Why can't pyglet get the events from another thread? >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to a topic in >>>>>> the Google Groups "pyglet-users" group. >>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/to >>>>>> pic/pyglet-users/PrD2Z8O1qnI/unsubscribe. >>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>> [email protected]. >>>>>> To post to this group, send email to [email protected]. >>>>>> Visit this group at https://groups.google.com/group/pyglet-users. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> -- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "pyglet-users" group. >>>> To unsubscribe from this topic, visit https://groups.google.com/d/to >>>> pic/pyglet-users/PrD2Z8O1qnI/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> [email protected]. >>>> To post to this group, send email to [email protected]. >>>> Visit this group at https://groups.google.com/group/pyglet-users. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "pyglet-users" group. >> To unsubscribe from this topic, visit https://groups.google.com/d/to >> pic/pyglet-users/PrD2Z8O1qnI/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at https://groups.google.com/group/pyglet-users. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/pyglet-users. For more options, visit https://groups.google.com/d/optout.
