python 为什么在Windows上的PyCharm中的另一个进程中使用playsound时会出现静音,如何修复?

k2fxgqgv  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(184)

从PyCharm启动时,Playsound无法在单独的进程中播放音频,而从命令行启动时,Playsound可以正常工作。
尝试实现this solution会导致不播放任何内容,尽管p.is_alive()返回True。
这是我试过的密码

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()

如果启动进程后使用p.join(),则声音会成功播放。
添加block=False或block=True没有帮助。
修改代码使进程在main()中启动,只在use_playsound函数中保留playsound调用没有任何帮助,然后设置block=False或block=True也没有任何帮助。
在p.start()后引发BaseException会播放声音。但是当我按Enter键后让程序成功退出时,声音仍然不播放。

z4iuyo4d

z4iuyo4d1#

当您从命令行启动而不是从编辑器启动时,遇到此类问题时,几乎总是路径名问题。
这是因为python路径可能不同,并且代码使用了 * 相对路径 *,假设文件test.mp3在同一个文件夹中。
要避免此错误,请使用 absolute 路径,如下所示:

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("c:\\full\\path\\to\\the\\file\\test.mp3")

if __name__ == '__main__':
    main()

另一种选择是使用对音频播放提供更多控制的不同库,如pyaudiopyglet。这些库允许您在后台播放音频,并提供控制播放的方法,如暂停和继续。

相关问题