gpt4 book ai didi

Python:以设定的 BPM 间隔(<1s)播放音频的时间不准确

转载 作者:行者123 更新时间:2023-11-28 22:13:07 25 4
gpt4 key购买 nike

我正在尝试在 Raspberry Pi 上制作一个非常简单的节拍器,它以设定的间隔播放 .wav 文件,但时间听上去不准确。实在想不通,是不是python的时间模块这么不准?

我不认为处理播放音频的代码是瓶颈,因为如果我把它放在一个没有计时器的循环中,它会一直发出嘎嘎声。使用下面的简单代码,声音将按节拍播放几次,然后一个节拍将随机关闭,一遍又一遍。

import pygame
from time import sleep

pygame.mixer.pre_init(44100, -16, 2, 2048)
pygame.mixer.init()
pygame.init()

BPM = 160
sound = pygame.mixer.Sound('sounds/hihat1.wav')


while True:
sound.play()
sleep(60/BPM)

我希望声音每 X 毫秒重复一次,精度至少为 +/-10 毫秒左右。那不现实吗?如果是这样,请提出替代方案。

最佳答案

问题原来是使用了过大的 block 大小,这可能导致 pygame 延迟播放声音,因为较早的 block 已经排队。我的第一个建议是我希望 OP 的代码会随着时间的推移慢慢漂移,这表明这样的事情会做得更好:

import pygame
from time import time, sleep
import gc

pygame.mixer.pre_init(44100, -16, 2, 256)
pygame.mixer.init()
pygame.init()

BPM = 160
DELTA = 60/BPM

sound = pygame.mixer.Sound('sounds/hihat1.wav')
goal = time()

while True:
print(time() - goal)
sound.play()
goal += DELTA
gc.collect()
sleep(goal - time())

即跟踪“当前时间”并根据经​​过的时间调整sleep。我在每次 sleep 前明确执行“垃圾收集”(即 gc.collect()),以确保事情更具确定性。

关于Python:以设定的 BPM 间隔(<1s)播放音频的时间不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54236864/

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