:
-- 波江人六进制计时器（小节:节拍，固定3位，不足补ℓ）
-- setup
fps = comp:GetPrefs("Comp.FrameFormat.Rate") or 24;  -- 工程帧率
bpm = 67;                                            -- 歌曲速度
beatUnit = 4;                                        -- 4/4拍，每小节4拍
secondsPerBeat = 60 / bpm;                           -- 每拍多少秒
-- setup end

-- 波江人数字符号映射表
symbols = { [0]="ℓ", [1]="I", [2]="V", [3]="λ", [4]="+", [5]="V̶" };

-- 十进制转波江人六进制（固定位数，不足补ℓ）
function toBase6Fixed(n, digits)
    if n == 0 then
        return string.rep(symbols[0], digits);       -- 如果n=0，直接返回digits个ℓ
    end
    local result = {};
    while n > 0 do
        local remainder = n % 6;
        table.insert(result, 1, symbols[remainder]);
        n = math.floor(n / 6);
    end
    -- 补齐到指定位数
    while #result < digits do
        table.insert(result, 1, symbols[0]);         -- 在前面补ℓ
    end
    return table.concat(result);
end


-- 计算当前时间对应的小节和节拍
currentTime = time / fps;                             -- 当前播放秒数
totalBeats = currentTime / secondsPerBeat;            -- 总拍数（含小数）
bar = math.floor(totalBeats / beatUnit) + 1;          -- 当前小节（从1开始）
beat = math.floor(totalBeats % beatUnit) + 1;         -- 当前节拍（1-4）

-- 输出：小节和节拍都显示为3位波江数字
return toBase6Fixed(bar, 3) .. ":" .. symbols[beat];