Skip to content

DynamicZeroCrossing

Defined in: packages/pleco-xa/src/loop/primitives.js:15

Dynamic Zero Crossing with Micro Crossfades. Maintains musical accuracy while ensuring clean audio boundaries. All-static API: use DynamicZeroCrossing.snap(...) / .optimizeLoopBoundaries(...).

new DynamicZeroCrossing(): DynamicZeroCrossing

DynamicZeroCrossing

static findNearestZeroCrossing(audioData, centerSample, searchWindow): any

Defined in: packages/pleco-xa/src/loop/primitives.js:80

Find nearest zero crossing within search window

Float32Array<ArrayBufferLike>

Audio samples

number

Target sample position

number

Samples to search around center

any

  • { sample: number, confidence: number, distanceFromMusical: number }

static generateMicroCrossfade(crossfadeInfo): object

Defined in: packages/pleco-xa/src/loop/primitives.js:118

Generate crossfade data for smooth loop transitions

any

Crossfade configuration ({ crossfadeDuration })

object

fadeIn: Float32Array

fadeOut: Float32Array

length: number


static optimizeLoopBoundaries(audioData, musicalLoop, sampleRate): any

Defined in: packages/pleco-xa/src/loop/primitives.js:23

Find optimal loop boundaries with zero crossing alignment

Float32Array<ArrayBufferLike>

Raw audio samples

any

{ start: 0-1, end: 0-1 } musical loop points

number

Audio sample rate

any

  • Optimized loop with crossfade data

static snap(audioData, startSample, endSample, searchWindow?): [number, number]

Defined in: packages/pleco-xa/src/loop/primitives.js:145

Snap raw start/end sample indices to the nearest zero-crossing within ±searchWindow samples.

Float32Array<ArrayBufferLike>

number

initial start index (samples)

number

initial end index (samples)

number = 441

window half-width in samples (≈10 ms @ 44.1 kHz)

[number, number]

[snappedStart, snappedEnd] sample indices