美文网首页
python循环播放音乐新方法(针对pyinstaller打包后

python循环播放音乐新方法(针对pyinstaller打包后

作者: RedB | 来源:发表于2020-06-09 17:48 被阅读0次

    原本使用pygame循环播放mp3好好的。结果用了pyinstaller之后,非常奇怪的是,在调用pygame.mixer.music.load(path)时就会报错,报pygame.error,如下图。经过检查,path并不含中文;通过print(path)确定过path没错;而且如果直接用os.system(path)就可以播放。

    截图

    一顿百度、Google后也找不到解决办法,只能换库,于是对比之下找到了simpleaudio这个库(不推荐playsound;pydub用的播放引擎也是simpleaudio):https://simpleaudio.readthedocs.io/en/latest/#simple-example

    这次配合pyinstaller使用完全正常~ 缺点是如果用了wait_done(),则播放时会阻塞住,可以通过在子线程中循环播放解决;另外mp3文件需要转成wav格式。代码如下:

    import sys
    import os
    import simpleaudio as sa
    # 使用pyinstaller打包资源后,运行时资源会释放到/Temp/_MEI******目录下,其真实路径需要借助sys._MEIPASS获取:https://www.cnblogs.com/darcymei/p/9397173.html
    def resource_path(relative_path):
        if getattr(sys, 'frozen', False):  # 是否Bundle Resource
            base_path = sys._MEIPASS
        else:
            base_path = os.path.abspath(".")
        return os.path.join(base_path, relative_path)
    
    # 循环播放WAV文件
    def playMusic():
        wave_obj = sa.WaveObject.from_wave_file(resource_path("alert.wav"))
        while True:
            play_obj = wave_obj.play()
            play_obj.wait_done()
    

    附:python播放音频方式汇总:https://blog.csdn.net/zzc15806/article/details/80508463

    相关文章

      网友评论

          本文标题:python循环播放音乐新方法(针对pyinstaller打包后

          本文链接:https://www.haomeiwen.com/subject/nkretktx.html