使用 OSC 更新 GANSpace 中的滑块
Using OSC to update sliders in GANSpace
我正在尝试从 GANSpace with messages from python-osc 更新 interactive.py 中的滑块。
理想情况下,on_draw 函数在收到一系列 OSC 消息后应该 运行。
但是我在实现它时遇到了麻烦,因为 serve.forever() 函数正在阻塞,我不知道如何实现异步版本。
当我这样做时:
def set_slider_osc(addr, args):
print("[{0}] ~ {1}".format(args, addr))
#print(re.split('/',addr)[2])
if "/0" in addr:
ui_state.sliders[0].set(args)
if "/1" in addr:
ui_state.sliders[1].set(args)
async def loop():
while not pending_close:
root.update()
app.update()
on_draw()
reposition_toolbar()
await asyncio.sleep(0)
async def init_main():
setup_model()
setup_ui()
resample_latent()
pending_close = False
dispatcher = dispatcher.Dispatcher()
dispatcher.map("/Chroma/*", set_slider_osc)
server = AsyncIOOSCUDPServer(("127.0.0.1", 8000), dispatcher, asyncio.get_event_loop())
transport, protocol = await server.create_serve_endpoint() # Create datagram endpoint and start serving
await loop() # Enter main loop of program
transport.close() # Clean up serve endpoint
root.destroy()
#
if __name__=='__main__':
await init_main()
我得到一个错误,我尝试 运行 'await' 在一个函数之外,而我尝试的另一种方式似乎已经有一个主循环 运行ning,因此不能' t 运行 一个新的..
我知道要求人们安装 GANSpace,但希望有人能阐明如何做到这一点。
await
不能在用 async def
定义的函数之外使用。您正试图在函数之外使用它。解决方法是在事件循环中 运行 init_main
。
import asyncio
asyncio.run(init_main())
我正在尝试从 GANSpace with messages from python-osc 更新 interactive.py 中的滑块。 理想情况下,on_draw 函数在收到一系列 OSC 消息后应该 运行。 但是我在实现它时遇到了麻烦,因为 serve.forever() 函数正在阻塞,我不知道如何实现异步版本。
当我这样做时:
def set_slider_osc(addr, args):
print("[{0}] ~ {1}".format(args, addr))
#print(re.split('/',addr)[2])
if "/0" in addr:
ui_state.sliders[0].set(args)
if "/1" in addr:
ui_state.sliders[1].set(args)
async def loop():
while not pending_close:
root.update()
app.update()
on_draw()
reposition_toolbar()
await asyncio.sleep(0)
async def init_main():
setup_model()
setup_ui()
resample_latent()
pending_close = False
dispatcher = dispatcher.Dispatcher()
dispatcher.map("/Chroma/*", set_slider_osc)
server = AsyncIOOSCUDPServer(("127.0.0.1", 8000), dispatcher, asyncio.get_event_loop())
transport, protocol = await server.create_serve_endpoint() # Create datagram endpoint and start serving
await loop() # Enter main loop of program
transport.close() # Clean up serve endpoint
root.destroy()
#
if __name__=='__main__':
await init_main()
我得到一个错误,我尝试 运行 'await' 在一个函数之外,而我尝试的另一种方式似乎已经有一个主循环 运行ning,因此不能' t 运行 一个新的..
我知道要求人们安装 GANSpace,但希望有人能阐明如何做到这一点。
await
不能在用 async def
定义的函数之外使用。您正试图在函数之外使用它。解决方法是在事件循环中 运行 init_main
。
import asyncio
asyncio.run(init_main())