From 8db3bead13441a5882d8689dfc6a9f09c82375d9 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 25 Mar 2026 16:47:22 +0100 Subject: feat: masks, properties refactor, shaders, storage migrations, and more --- apps/web/src/constants/retime-constants.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 apps/web/src/constants/retime-constants.ts (limited to 'apps/web/src/constants/retime-constants.ts') diff --git a/apps/web/src/constants/retime-constants.ts b/apps/web/src/constants/retime-constants.ts new file mode 100644 index 00000000..7b18b61c --- /dev/null +++ b/apps/web/src/constants/retime-constants.ts @@ -0,0 +1,30 @@ +export const DEFAULT_RETIME_RATE = 1; +export const MIN_RETIME_RATE = 0.01; +export const MAX_RETIME_RATE = 5; +export const MAX_PITCH_PRESERVE_RATE = 10; + +export function clampRetimeRate({ rate }: { rate: number }): number { + if (!Number.isFinite(rate) || rate <= 0) { + return DEFAULT_RETIME_RATE; + } + + return Math.min(Math.max(rate, MIN_RETIME_RATE), MAX_RETIME_RATE); +} + +export function canMaintainPitch({ rate }: { rate: number }): boolean { + if (!Number.isFinite(rate) || rate <= 0) { + return false; + } + + return clampRetimeRate({ rate }) <= MAX_PITCH_PRESERVE_RATE; +} + +export function shouldMaintainPitch({ + rate, + maintainPitch, +}: { + rate: number; + maintainPitch?: boolean; +}): boolean { + return maintainPitch === true && canMaintainPitch({ rate }); +} -- cgit v1.3.1