Pygame 音频和缓冲区 - 这是如何工作的?

问题描述

我试图让 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 文档非常模糊..

解决方法

好吧,事实证明 SDL_mixer 库仅支持 Music 对象的文件流式传输,并且常规 Sound 对象始终加载到内存中。