react-native-audio-api
Version:
react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification
45 lines (44 loc) • 1.47 kB
JavaScript
;
import { useMemo } from 'react';
import { useSharedValue, useAnimatedStyle, withTiming } from 'react-native-reanimated';
export function formatTime(seconds) {
if (!Number.isFinite(seconds) || seconds < 0) {
return '0:00';
}
const h = Math.floor(seconds / 3600);
const m = Math.floor(seconds % 3600 / 60);
const s = Math.floor(seconds % 60);
if (h > 0) {
return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
} else {
return `${m}:${s.toString().padStart(2, '0')}`;
}
}
export function timeFromLocationX(locationX, trackWidth, durationSeconds) {
if (trackWidth <= 0 || durationSeconds <= 0) {
return 0;
}
const pct = Math.max(0, Math.min(1, locationX / trackWidth));
return pct * durationSeconds;
}
export function useExpandableTrackHeight(trackBarHeight, trackBarHeightPressed, trackBarAnimMs) {
const height = useSharedValue(trackBarHeight);
const animatedStyle = useAnimatedStyle(() => ({
height: height.value,
borderRadius: height.value / 2
}));
return useMemo(() => ({
animatedStyle,
expand: () => {
height.value = withTiming(trackBarHeightPressed, {
duration: trackBarAnimMs
});
},
collapse: () => {
height.value = withTiming(trackBarHeight, {
duration: trackBarAnimMs
});
}
}), [animatedStyle, height, trackBarHeight, trackBarHeightPressed, trackBarAnimMs]);
}
//# sourceMappingURL=audioControlUtils.js.map