gpt4 book ai didi

python - 在pygame中从缓冲区播放声音

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

我正在尝试从 pygame 中的缓冲区播放声音。我正在使用 Python 3。
我得到了未压缩的 wav 文件 sound.wav。

我可以这样玩,而且效果很好:

sound = pygame.mixer.Sound(file='/path/to/file/sound.wav')
sound.play()

根据 pygame documentation缓冲区可以是 Python 3 字节对象,但如果我尝试:
f = open('/path/to/file/sound.wav', 'rb')
data = f.read()
sound = pygame.mixer.Sound(buffer=data)
sound.play()

这段代码可以运行,但是声音变形了。

那么,如何使用缓冲区呢?文档真的很多余,我找不到任何例子。我无法从硬盘播放声音,因为我有很多原始音频 block ,我将它们转换为 wav,但是将它们保存在硬盘上(然后读取它们)是一种缓慢且低效的方式(因为我已经将它们保存在内存中) .感谢您的帮助。

编辑:
我忘了提到我还尝试播放没有标题的原始音频。幸好感谢 @Andris评论我弄清楚 pygame 的缓冲区是什么意思。我用 pygame.mixer.init(frequency=22050, size=8, channels=1) 启动混合器所以我认为缓冲区应该是这种格式。我将 pygame.mixer.Sound(file='/path/to/file/sound.wav').get_raw() 返回的内容转储到磁盘上经过检查,我可以说它是原始音频,但频率=44100,大小=-16。

最佳答案

这里有一个完整的例子,从创建一个充满音频的内存缓冲区,然后使用 pygame 播放它:

import pygame
import subprocess

rawdata = subprocess.check_output([
'sox', '-n', '-b', '16', '-e', 'signed', '-r', '44100',
'-c', '1', '-t', 'raw', '-', 'synth', '0.1', 'sin', '700'])
pygame.mixer.pre_init(frequency=44100, size=-16, channels=1)
pygame.init()
beep = pygame.mixer.Sound(buffer=rawdata)
pygame.mixer.Sound.play(beep)
pygame.quit()

注意给 sox 的原始音频选项(采样率 44.1k,16 位有符号,1 个 channel )与给 pygame 混音器的相同。

玩得开心!

关于python - 在pygame中从缓冲区播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22095231/

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