You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

组合执行两个函数:实现asciimatics视觉与winsound.Beep蜂鸣同步播放

同步实现方案

核心思路是通过多线程实现两个任务的并行执行,解决asciimatics渲染逻辑阻塞导致的音效滞后问题。

  • 导入threading模块,将视觉渲染逻辑、蜂鸣音效逻辑拆分为两个独立函数
  • 分别为两个函数创建子线程,尽可能缩小两个线程的启动时间差,保证初始触发同步
  • 如果需要逐帧匹配音效,可在asciimatics的帧更新回调中单独启动蜂鸣子线程,避免长时间运行产生的时间偏移

可运行示例代码

from asciimatics.screen import Screen
import winsound
import threading

# 蜂鸣音效逻辑,可根据需求调整频率、时长
def beep_task():
    # 示例参数:1200Hz频率,持续600ms,和示例动画时长匹配
    winsound.Beep(1200, 600)

# 动态视觉渲染逻辑,替换为你自己的asciimatics效果即可
def visual_task(screen):
    # 示例:简单的闪烁文字效果
    for _ in range(12):
        screen.print_at("SYNC DEMO", 20, 10, colour=Screen.COLOUR_CYAN)
        screen.refresh()
        screen.wait_for_input(0.05)
        screen.clear()
        screen.refresh()
        screen.wait_for_input(0.05)

if __name__ == "__main__":
    # 创建两个子线程分别绑定音效、视觉任务
    beep_thread = threading.Thread(target=beep_task)
    visual_thread = threading.Thread(target=Screen.wrapper, args=(visual_task,))
    
    # 几乎同时启动两个线程,保证初始同步
    visual_thread.start()
    beep_thread.start()
    
    # 等待两个任务全部执行完成
    visual_thread.join()
    beep_thread.join()

注意:winsound.Beep本身是阻塞调用,不要直接放在视觉渲染的主逻辑里,必须单独开子线程触发,否则会卡住动画渲染。如果需要多个节点的音效同步,直接在对应的动画帧逻辑里新增蜂鸣子线程即可,开销很低不会影响渲染性能。

内容的提问来源于stack exchange,提问作者internguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 10:57:02