gpt4 book ai didi

python io.BytesIO 和 pygame.mixer

转载 作者:行者123 更新时间:2023-12-01 02:53:34 25 4
gpt4 key购买 nike

我正在将音频 mp3 文件加载到 python io.BytesIO 缓冲区中。

然后我想用 pygame.mixer 多次播放这个音频文件。

第一次工作正常,但似乎 pygame.mixer.music.play 删除了缓冲区。

这是源代码:

import io
import time
import pygame

with open(path_to_my_mp3_file, 'rb') as in_file:
buffer = io.BytesIO(in_file.read())

pygame.mixer.init()

pygame.mixer.music.load(buffer)
pygame.mixer.music.play() # works fine !

time.sleep(1)

pygame.mixer.music.load(buffer) # the buffer seems to be cleared
pygame.mixer.music.play()

我收到此错误:

  File "test.py", line 17, in <module>
pygame.mixer.music.load(buffer)
pygame.error: Couldn't read from RWops

有什么想法吗?

谢谢

附注:

我尝试过这个:

with open(path_to_my_mp3_file, 'rb') as in_file:
buffer = in_file.read()

pygame.mixer.init()

pygame.mixer.music.load(io.BytesIO(buffer))
pygame.mixer.music.play()

time.sleep(1)

pygame.mixer.music.load(io.BytesIO(buffer))
pygame.mixer.music.play()

它可以工作,但我认为这段代码的性能较差

最佳答案

BytesIO 是一个类似文件的对象;因此,与任何流文件一样,它有一个位置,所有读写操作都发生在该位置。因为你刚刚从中读取了数据,所以该位置位于末尾,进一步读取不会执行任何操作;你应该倒带

buffer.seek(0)

将其加载到音乐中。但你不需要加载两次,因为 pygame.mixer.music 对象本身有 rewind() 方法:

pygame.mixer.music.rewind() # to the beginning

但这里也不需要它,因为 play() 方法...将音乐倒回到开头!

pygame.mixer.music.load(buffer)
pygame.mixer.music.play() # works fine !

time.sleep(1)

pygame.mixer.music.play() # and play it again!

就这么简单!

关于python io.BytesIO 和 pygame.mixer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44482149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com