murmuraba
Version:
Real-time audio noise reduction with advanced chunked processing for web applications
50 lines (49 loc) • 1.72 kB
JavaScript
import { formatDuration as formatDurationCore, formatTime as formatTimeCore, calculateDurationStats } from '../../utils/time-utils';
/**
* Format duration from milliseconds to MM:SS format
* This is the primary duration formatter for the chunk results
*/
export const formatDuration = (milliseconds) => {
return formatDurationCore(milliseconds);
};
/**
* Legacy formatter for seconds to MM:SS format
* @deprecated Use formatDuration with milliseconds instead
*/
export const formatTime = (seconds) => {
return formatTimeCore(seconds);
};
export const formatPercentage = (value) => {
if (!isFinite(value))
return '0.0%';
return `${Math.max(0, Math.min(100, value)).toFixed(1)}%`;
};
export const formatFileSize = (bytes) => {
if (!isFinite(bytes) || bytes <= 0)
return '0 KB';
const units = ['B', 'KB', 'MB', 'GB'];
let size = bytes;
let unitIndex = 0;
while (size >= 1024 && unitIndex < units.length - 1) {
size /= 1024;
unitIndex++;
}
return `${size.toFixed(1)} ${units[unitIndex]}`;
};
export const calculateChunkStats = (chunks) => {
if (chunks.length === 0)
return null;
const validChunks = chunks.filter(chunk => chunk.isValid !== false);
const durations = chunks.map(chunk => chunk.duration);
const durationStats = calculateDurationStats(durations);
const averageLatency = validChunks.length > 0
? validChunks.reduce((sum, chunk) => sum + chunk.metrics.processingLatency, 0) / validChunks.length
: 0;
return {
totalChunks: chunks.length,
validChunks: validChunks.length,
totalDuration: durationStats.total,
averageLatency,
durationStats,
};
};