Cj_C_cc 2024-03-07 21:38 采纳率: 40%
浏览 60

使用streamlit+pygame在线上部署音频播放报错:pygame.error: mixer not initialized

使用streamlit部署在网页上,用pygame.mixer来播放midi音乐总是报错。报错出现在一切和mixer相关的代码上,只要涉及到这个就报错。如下为报错的代码:


```python
Traceback (most recent call last):

  File "/home/adminuser/venv/lib/python3.9/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 535, in _run_script

    exec(code, module.__dict__)

  File "/mount/src/ceshi/ceshi.py", line 136, in <module>

    play_music('Blue Danube - Johann Strauss Jr..mid')

  File "/mount/src/ceshi/ceshi.py", line 113, in play_music

    pygame.mixer.music.load(file_path)

pygame.error: mixer not initialized

然后网上都说是什么音频设备没插什么的。但是,最大的问题是,在本地开发streamlit的时候这个代码是可以在浏览器正常运行,音乐也是可以正常播放的。但是将其部署到github上,app用streamlit部署后再在浏览器打开这个网站,就没办法播放了。网址是:https://ceshi1.streamlit.app/。在网页最后,点击下载音乐,等待,然后点击播放音乐,就报错了。
然后我的代码中与之相关的代码是:
```python
import pygame
pygame.init()
# pygame.mixer.init()
def play_music(file_path):
    pygame.mixer.music.load(file_path)
    pygame.mixer.music.play()

备注:如果不注释掉pygame.mixer.init(),报错的就是它;如果注释掉它,报错的就是pygame.mixer.music.load(file_path)或pygame.mixer.music.play()。

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-07 21:39
    关注

    引自免费微信小程序:皆我百晓生

    在Streamlit应用中使用pygame.mixer时出现mixer not initialized错误,这通常意味着pygame的音频模块没有被正确初始化。考虑到你在本地开发环境中能够正常运行代码,而在部署到GitHub并使用streamlit部署后出现问题,这可能与部署环境中的音频支持或某些配置有关。

    针对这一问题,请尝试以下解决方案:

    1. 确保 pygame.mixer 初始化: 虽然你提到注释掉 pygame.mixer.init() 会报错,但是在部署环境下可能仍需要显式初始化 mixer。请尝试在 play_music 函数之前添加初始化代码:
    import pygame
    
    def play_music(file_path):
        pygame.mixer.init()  # 确保在加载和播放音乐前初始化mixer
        pygame.mixer.music.load(file_path)
        pygame.mixer.music.play()
    
    1. 设置混音器缓冲大小: 在某些情况下,可能需要为pygame.mixer指定合适的缓冲大小,尤其是在云端部署时可能存在限制。可以尝试这样设置:
    pygame.mixer.pre_init(44100, -16, 2, 2048)  # 根据实际情况调整参数
    pygame.init()
    pygame.mixer.init()
    
    1. 检查部署环境音频支持: 部署在云服务器上的应用程序可能默认没有音频输出设备。你需要确认你的云服务提供商是否支持音频输出,或者是否有额外的配置步骤来启用音频。

    2. 使用虚拟音频设备: 如果部署环境不支持音频输出,你可能需要安装一个虚拟音频设备(如在Linux上可以是 pulseaudio-dummy-module),以便让pygame能够“播放”声音。

    3. 调试日志和权限: 检查部署过程中的日志以查看是否存在音频设备访问权限或其他系统级别的错误。

    由于这是一个线上环境的问题,所以直接提供代码修复不一定能解决所有情况,你可能还需要根据实际部署环境的具体情况进行排查和调整。如果以上方法都不能解决问题,建议查阅GitHub Pages、Heroku或你所使用的云平台的相关文档,看看是否有特定的音频支持指南。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月7日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画