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

Windows下PyCharm多进程调用playsound无声音问题及解决方法

问题描述
  • 在PyCharm中启动程序时,使用multiprocessing启动独立进程调用playsound无法播放音频,但命令行启动正常
  • 尝试多进程调用playsound的方案后,进程状态p.is_alive()返回True,但无声音输出
  • 若在p.start()后调用p.join(),音频可正常播放,但会阻塞主进程,不符合独立进程的需求
  • 调整playsound的block参数(block=True/False)、修改进程启动位置(在main()中启动进程)均无效
  • 在p.start()后主动抛出BaseException时能播放声音,但按Enter让程序正常退出时仍无声音

测试代码如下:

import multiprocessing
from playsound import playsound

def use_playsound(audio_file):
    p = multiprocessing.Process(target=playsound, args=(audio_file,))
    p.start()
    print(p.is_alive())
    input("press ENTER to stop playback")
    p.terminate()

def main():
    use_playsound("test.mp3")

if __name__ == '__main__':
    main()
解决方案

方案1:修改PyCharm运行配置

PyCharm默认运行配置可能限制子进程的资源访问,调整步骤如下:

  1. 打开PyCharm的「Run/Debug Configurations」
  2. 找到当前运行的配置,勾选「Emulate terminal in output console」选项
  3. 重新运行程序,子进程音频输出即可正常工作

方案2:改用线程替代多进程

playsound本身是阻塞式调用,用线程而非多进程可避开PyCharm的子进程限制,同时实现非阻塞播放:

import threading
from playsound import playsound

def use_playsound(audio_file):
    t = threading.Thread(target=playsound, args=(audio_file,))
    t.daemon = True  # 主线程退出时自动终止线程
    t.start()
    print(t.is_alive())
    input("press ENTER to stop playback")

def main():
    use_playsound("test.mp3")

if __name__ == '__main__':
    main()

方案3:指定playsound音频后端

部分场景下,PyCharm环境中playsound默认后端无法正常工作,可手动指定后端(以Windows平台为例):

import multiprocessing
from playsound import playsound

def use_playsound(audio_file):
    # 指定使用winmm后端(Windows平台)
    p = multiprocessing.Process(target=playsound, args=(audio_file,), kwargs={"backend": "winmm"})
    p.start()
    print(p.is_alive())
    input("press ENTER to stop playback")
    p.terminate()

def main():
    use_playsound("test.mp3")

if __name__ == '__main__':
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:30:42