react-native-audio-api
Version:
react-native-audio-api provides system for controlling audio in React Native environment compatible with Web Audio API specification
51 lines (50 loc) • 1.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.formatTime = formatTime;
exports.timeFromLocationX = timeFromLocationX;
exports.useExpandableTrackHeight = useExpandableTrackHeight;
var _react = require("react");
var _reactNativeReanimated = require("react-native-reanimated");
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')}`;
}
}
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;
}
function useExpandableTrackHeight(trackBarHeight, trackBarHeightPressed, trackBarAnimMs) {
const height = (0, _reactNativeReanimated.useSharedValue)(trackBarHeight);
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
height: height.value,
borderRadius: height.value / 2
}));
return (0, _react.useMemo)(() => ({
animatedStyle,
expand: () => {
height.value = (0, _reactNativeReanimated.withTiming)(trackBarHeightPressed, {
duration: trackBarAnimMs
});
},
collapse: () => {
height.value = (0, _reactNativeReanimated.withTiming)(trackBarHeight, {
duration: trackBarAnimMs
});
}
}), [animatedStyle, height, trackBarHeight, trackBarHeightPressed, trackBarAnimMs]);
}
//# sourceMappingURL=audioControlUtils.js.map