You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spotipy音频分析:遍历小节起始时间遇迭代错误及同步问题

音频小节遍历的错误修复与进度匹配方案

错误原因分析

  1. TypeError 根源:for x in int(round(bst * 1000))这行代码把整数当成可迭代对象遍历,Python直接报错——整数本身不能被循环。另外你写的for cds in bar完全多余,bar是字典,循环它只会拿到'start'、'duration'这类键名,对实现需求毫无帮助。
  2. 进度匹配失效:直接用==比较毫秒/秒转换后的数值,会因浮点运算精度丢失导致永远匹配不上。比如小节起始秒数0.36043转毫秒是360,但实际进度可能是360或361,精准相等判断必然失败。

修正后的代码

def get_audio_data():
    artist, track, tid, progress = get_current_song()
    analysis = spotify.audio_analysis(tid)
    bars = analysis["bars"]
    
    # 遍历每个音频小节
    for bar in bars:
        bar_start_sec = bar["start"]
        # 把小节起始时间转成毫秒(和进度单位统一)
        bar_start_ms = int(round(bar_start_sec * 1000))
        
        # 打印小节起始时间(按需调整输出内容)
        print(f"当前小节起始毫秒:{bar_start_ms}")
        
        # 用误差范围判断进度匹配,避免精度问题(允许±10ms误差)
        if abs(progress - bar_start_ms) <= 10:
            print("BLEEP BLOOP!")

关键修复点

  • 移除无意义的for cds in bar循环,直接从字典bar提取start值;
  • 把错误的整数循环改成直接计算小节起始毫秒值,贴合你获取节拍时间的需求;
  • 用误差范围判断替代精准相等:设置±10ms的容错范围,解决浮点精度导致的匹配失败问题,你也可以根据实际需求调整阈值(比如±5ms)。

内容的提问来源于stack exchange,提问作者error500

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:10:33