繁体   English   中英

您如何在子进程中中断函数的执行,以使用Pyglet播放和暂停音频?

[英]How do you interrupt execution of a function in a child process, to play and pause audio with Pyglet?

我正在用Python编写一个应用程序(肯定不适合该任务,但无论如何我都在做)。 该应用程序的一部分需要一个音频播放器,我正在使用它,因为它似乎最易于使用,并且会执行我需要的功能(加载OGG,MP3和WAV;播放音频;暂停音频) ;获取当前时间戳记。

我知道我需要在一个单独的子进程中运行音频内容(或者,多进程处理这个问题,我想这是一个子进程)。 但是,运行pyglet.app.run()基本上会锁定该过程,直到音频播放完毕。 我看不到使进程暂停的方法,因为您无法从进程外部访问进程的地址空间(因此,我无法运行该进程,然后再运行player.pause())。

总的来说,我有些困惑,不胜感激如何使多处理与Pyglet一起工作,以便我可以随意播放和暂停音频(这全部实现在GUI中,GUI处理了很多其他事情,好)。

像大多数GUI框架一样,pyglet使用所谓的“事件循环”。 这是从pyglet.app.run()开始的事情。 实际上,它阻止了当前线程(而不是进程),并计划了GUI框架内发生的所有事件。 如果您想在两者之间运行自己的东西,则必须通过事件循环来完成,请参阅https://pyglet.readthedocs.io/zh-CN/latest/programming_guide/time.html#guide-calling-functions-periodically

另外,您可以尝试创建一个新线程(而不是进程),但是在访问可能也从pyglet事件循环访问的内容时,您必须小心。

GUI框架通常是单线程的,并且通常也不是线程安全的(我不了解有关pyglet的详细信息)。 如果创建其他线程,则在与另一个线程的事件循环进行交互时必须非常小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM