RPE Chart Utils
    Preparing search index...

    Module chart-utils

    Main entry point for RPE chart utilities.

    Re-exports everything from the sub-modules and provides chart-level operations: creation, validation, statistics, BPM manipulation, line creation, note factories, shader helpers, and import/export.

    Module What it provides
    chart-utils (this file) Chart/line/note CRUD, BPM, transforms, stats, validation, serialization
    events Beat↔time conversion, event creation & evaluation, batch ops
    math Vec2, Mat3, scalar math, random, noise, arrays
    easing 28 RPE easing functions, cubic bezier, derivative/integral
    position Line state, note position, scene coordinate helpers
    iterators Fluent NoteIterator / LineIterator / EventIterator
    prototype ChartBuilder / LineBuilder / NoteBuilder — fluent chart editing; wrap() / createChart() factories
    extra ExtraBuilder / EffectBuilder — fluent extra.json editing; shader parsing; animated uniforms
    types All TypeScript interfaces for RPE data structures
    import { wrap, createChart, ExtraBuilder } from './chart-utils';

    // ── Build from scratch ─────────────────────────────────────────────────
    const chart = createChart(140, 'My Chart');
    chart.addLine({ name: 'Main' })
    .moveX(0, 4, -675, 675, 'cubicOut')
    .addNote(2)
    .addNote(4, { type: 2, endBeat: 6 });

    // ── Load an existing chart ─────────────────────────────────────────────
    const raw = JSON.parse(fs.readFileSync('chart.json', 'utf8'));
    const chart = wrap(raw); // attaches fluent methods to the existing data
    chart.getLine(0).moveX(8, 12, 0, 200);

    // ── Serialize ─────────────────────────────────────────────────────────
    const json = chart.serialize();

    // ── Extra / shader effects ─────────────────────────────────────────────
    import { readFileSync } from 'fs';
    const glsl = readFileSync('shaders/glow.glsl', 'utf8');

    const extra = new ExtraBuilder(140);
    extra.addShader('/glow.glsl', glsl, 0, 32) // auto-loads defaults
    .animate('intensity', 0, 1, { easing: 'cubicOut' })
    .setRange(100, 101);
    fs.writeFileSync('extra.json', extra.serialize());
    import { createEmptyChart, addLine, addNote, addMoveXEvent, serializeChart } from './chart-utils';

    const chart = createEmptyChart(140, 'My Chart');
    const li = addLine(chart, { name: 'Main' });
    addMoveXEvent(chart, li, 0, 0, 4, -675, 675, 8);
    addNote(chart, li, 2, { type: 1 });
    const json = serializeChart(chart);

    Interfaces

    CreateLineOptions
    CreateNoteOptions
    ChartStats
    ValidationIssue

    Type Aliases

    EventChannel

    Functions

    createEmptyChart
    getLineOptions
    addLine
    removeLine
    duplicateLine
    getNoteOptions
    addNote
    addNotes
    removeNote
    removeNotes
    clearNotes
    removeEvent
    removeEvents
    removeEventLayer
    removeExtendedEvent
    addBpmChange
    removeBpmChange
    setBpm
    createDefaultEventLayer
    addEventLayer
    addInclineEvent
    addScaleXEvent
    addScaleYEvent
    addColorEvent
    addTextEvent
    addGifEvent
    addMoveXEvent
    addMoveYEvent
    addRotateEvent
    addAlphaEvent
    addSpeedEvent
    preprocess
    getChartStats
    validateChart
    serializeChart
    parseChart
    offsetChart
    mirrorChart
    mergeCharts

    References

    RpeJson → RpeJson
    JudgeLine → JudgeLine
    Note → Note
    Event → Event
    SpeedEvent → SpeedEvent
    ColorEvent → ColorEvent
    GifEvent → GifEvent
    TextEvent → TextEvent
    EventLayer → EventLayer
    Extended → Extended
    Bpm → Bpm
    RpeMeta → RpeMeta
    AlphaControl → AlphaControl
    PosControl → PosControl
    SizeControl → SizeControl
    SkewControl → SkewControl
    YControl → YControl
    Beat → Beat
    PhiraExtra → PhiraExtra
    ShaderEffect → ShaderEffect
    Video → Video
    VideoAttach → VideoAttach
    Variable → Variable
    AnimatedVariable → AnimatedVariable
    VariableEvent → VariableEvent
    ScalarVariableEvent → ScalarVariableEvent
    VectorVariableEvent → VectorVariableEvent
    BaseVariableEvent → BaseVariableEvent
    EASINGS → EASINGS
    sanitizeEasingParams → sanitizeEasingParams
    calculateEasingValue → calculateEasingValue
    easing → easing
    easingDerivative → easingDerivative
    calculateEasingIntegral → calculateEasingIntegral
    cubicBezier → cubicBezier
    EasingType → EasingType
    EASING_NAMES → EASING_NAMES
    EasingName → EasingName
    resolveEasingType → resolveEasingType
    toBeats → toBeats
    fromBeats → fromBeats
    getTimeSec → getTimeSec
    getBeat → getBeat
    initBpmList → initBpmList
    calculateValue → calculateValue
    getEventValue → getEventValue
    getEventValueAtProgress → getEventValueAtProgress
    getSpeedIntegral → getSpeedIntegral
    computeHeight → computeHeight
    evaluateEventLayer → evaluateEventLayer
    evaluateEventChannel → evaluateEventChannel
    evaluateAllEventLayers → evaluateAllEventLayers
    evaluateExtendedEvents → evaluateExtendedEvents
    ControlTypes → ControlTypes
    evaluateControl → evaluateControl
    createEvent → createEvent
    createSpeedEvent → createSpeedEvent
    createColorEvent → createColorEvent
    createTextEvent → createTextEvent
    createEventLayer → createEventLayer
    processEvents → processEvents
    processControlNodes → processControlNodes
    offsetEvents → offsetEvents
    scaleEventTimes → scaleEventTimes
    scaleEventValues → scaleEventValues
    offsetEventValues → offsetEventValues
    mirrorEventValues → mirrorEventValues
    keyframesToEvents → keyframesToEvents
    copyEvents → copyEvents
    rgbToHex → rgbToHex
    BUILTIN_SHADERS → BUILTIN_SHADERS
    BuiltinShaderName → BuiltinShaderName
    createExtra → createExtra
    parseExtra → parseExtra
    serializeExtra → serializeExtra
    CreateEffectOptions → CreateEffectOptions
    addEffect → addEffect
    removeEffect → removeEffect
    findEffects → findEffects
    findActiveEffects → findActiveEffects
    isCustomShader → isCustomShader
    isBuiltinShader → isBuiltinShader
    VariableEventOptions → VariableEventOptions
    scalarEvent → scalarEvent
    vectorEvent → vectorEvent
    animateValue → animateValue
    keyframesToAnimatedVariable → keyframesToAnimatedVariable
    pulseVariable → pulseVariable
    evaluateVariable → evaluateVariable
    AnimateOptions → AnimateOptions
    EffectBuilder → EffectBuilder
    ExtraBuilder → ExtraBuilder
    addCustomShader → addCustomShader
    CreateVideoOptions → CreateVideoOptions
    addVideo → addVideo
    removeVideo → removeVideo
    setEffectVar → setEffectVar
    removeEffectVar → removeEffectVar
    getEffectVarNames → getEffectVarNames
    isAnimated → isAnimated
    offsetExtra → offsetExtra
    sortEffects → sortEffects
    ExtraValidationIssue → ExtraValidationIssue
    validateExtra → validateExtra
    GLSL_HEADER → GLSL_HEADER
    BUILTIN_UNIFORMS → BUILTIN_UNIFORMS
    RESERVED_UNIFORMS → RESERVED_UNIFORMS
    isReservedUniform → isReservedUniform
    uniformDeclaration → uniformDeclaration
    generateShaderTemplate → generateShaderTemplate
    parseShaderUniforms → parseShaderUniforms
    uniformsToVars → uniformsToVars
    BUILTIN_SHADER_DEFAULTS → BUILTIN_SHADER_DEFAULTS
    getShaderDefaults → getShaderDefaults
    NotePredicate → NotePredicate
    NoteProcess → NoteProcess
    LinePredicate → LinePredicate
    LineProcess → LineProcess
    EventPredicate → EventPredicate
    EventProcess → EventProcess
    EventChannelType → EventChannelType
    between → between
    before → before
    after → after
    approximately → approximately
    any → any
    all → all
    NoteType → NoteType
    NoteTypeValue → NoteTypeValue
    NoteIterator → NoteIterator
    noteIterator → noteIterator
    LineIterator → LineIterator
    lineIterator → lineIterator
    EventChannelFilter → EventChannelFilter
    EventIterator → EventIterator
    eventIterator → eventIterator
    betweenTime → betweenTime
    forEachNote → forEachNote
    forEachLine → forEachLine
    forEachEvent → forEachEvent
    Vec2 → Vec2
    vec2 → vec2
    VEC2_ZERO → VEC2_ZERO
    VEC2_ONE → VEC2_ONE
    VEC2_RIGHT → VEC2_RIGHT
    VEC2_UP → VEC2_UP
    vec2Add → vec2Add
    vec2Sub → vec2Sub
    vec2Scale → vec2Scale
    vec2Negate → vec2Negate
    vec2Dot → vec2Dot
    vec2Cross → vec2Cross
    vec2Length → vec2Length
    vec2LengthSq → vec2LengthSq
    vec2Distance → vec2Distance
    vec2Normalize → vec2Normalize
    vec2Lerp → vec2Lerp
    vec2Rotate → vec2Rotate
    vec2Angle → vec2Angle
    vec2FromAngle → vec2FromAngle
    vec2Min → vec2Min
    vec2Max → vec2Max
    vec2Reflect → vec2Reflect
    vec2Project → vec2Project
    Mat3 → Mat3
    mat3Identity → mat3Identity
    mat3Translate → mat3Translate
    mat3Rotate → mat3Rotate
    mat3Scale → mat3Scale
    mat3Mul → mat3Mul
    mat3TransformVec2 → mat3TransformVec2
    mat3TRS → mat3TRS
    clamp → clamp
    lerp → lerp
    inverseLerp → inverseLerp
    remap → remap
    smoothstep → smoothstep
    smootherstep → smootherstep
    degToRad → degToRad
    radToDeg → radToDeg
    wrapAngle → wrapAngle
    angleDifference → angleDifference
    lerpAngle → lerpAngle
    fract → fract
    mod → mod
    sign → sign
    approxEqual → approxEqual
    randomRange → randomRange
    randomInt → randomInt
    randomPick → randomPick
    shuffle → shuffle
    createSeededRandom → createSeededRandom
    valueNoise1D → valueNoise1D
    valueNoise2D → valueNoise2D
    fbm2D → fbm2D
    linspace → linspace
    arange → arange
    sum → sum
    average → average
    minMax → minMax
    binarySearchRight → binarySearchRight
    groupBy → groupBy
    deepClone → deepClone
    WIDTH → WIDTH
    HEIGHT → HEIGHT
    p → p
    o → o
    d → d
    w → w
    h → h
    LineState → LineState
    getLineState → getLineState
    NotePosition → NotePosition
    getNotePosition → getNotePosition
    getNoteJudgmentPosition → getNoteJudgmentPosition
    getAllNotePositions → getAllNotePositions
    getAllNotePositionsInChart → getAllNotePositionsInChart
    findClosestNote → findClosestNote
    ChartBuilder → ChartBuilder
    LineBuilder → LineBuilder
    EventLayerBuilder → EventLayerBuilder
    NoteBuilder → NoteBuilder
    EventBuilder → EventBuilder
    wrap → wrap
    createChart → createChart