【问题标题】:Pygame audio and buffers - how does this work?Pygame 音频和缓冲区 - 这是如何工作的?
【发布时间】:2021-02-22 07:48:29
【问题描述】:

我正在尝试让 8 个 16 位 44khz 立体声 wav 文件同时在只有 512MB 内存的树莓派板上同时播放。

我的 Python 不断崩溃,出现一个相当不起眼的错误:Killed,所以我决定用 python 控制台看看。当我以以下方式将 wav 文件添加到混音器时,我注意到在 htop 中,Python 内存使用量随着我添加的文件的大小而增加:

pygame.mixer.init(buffer=4096)
pygame.mixer.Channel(0).play(pygame.mixer.Sound("sample_0.wav"), loops=-1)
pygame.mixer.Channel(1).play(pygame.mixer.Sound("sample_1.wav"), loops=-1)
pygame.mixer.Channel(2).play(pygame.mixer.Sound("sample_2.wav"), loops=-1)
...

我对 pygame 混音器工作原理的理解是,它充当 SDL_mixer 的前端,据我所知,它应该在传递要打开的文件时自动进行分块/缓冲。

这是预期的操作吗? pygame 是否会将整个文件加载到内存中,如果是这样,那是故意的吗?缓冲区的目的是什么?

是否打算让用户手动将音频拆分为缓冲区?看起来不是这样,但是 pygame 文档很模糊..

【问题讨论】:

  • 您的样品有多大?
  • 每个大约 50-100MB。我曾考虑将它们降到 22khz 或使用单声道,但理想情况下,最好有一个解决方案,我不必在不影响保真度的情况下将所有内容加载到内存中。

标签: python pygame raspberry-pi sdl sdl-2


【解决方案1】:

好的,事实证明 SDL_mixer 库仅支持从文件流式传输 Music 对象,而常规 Sound 对象总是加载到内存中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多