【发布时间】: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