微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 对象始终加载到内存中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。