感谢@JFSebastian和他的代码,我了解到:
- 最好使用截止日期作为时间参考,而不是在每个循环中创建新的参考
- 使用截止日期可以使time.sleep的不精确度“摊销”,使比特率在所需的比特率附近振荡,但会得出正确的(并且要更稳定)的平均值。
- 您只需要使用一次time.time(),这意味着更少的计算误差。
结果,我有时会以恒定的32000 B / s振荡到31999,很少会振荡到31745。
现在我可以听到音乐而没有任何滞后或抖动!
我尝试仅使用
%运算符来使用@JFSebastian强制执行来使其余部分休眠,但KB /
s奇怪地波动,因此我决定保留最后期限实施,因为通过增加浮点值会造成不精确性。但是,总体结果足以满足我的需求。
谢谢大家。最终密码
def read(self): self.deadline += 0.020 delay = self.deadline - time.perf_counter() if delay > 0: time.sleep(delay) return self._read()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)