audio file info added, fixed right click selecting.
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
/** Em-dash used for unknown/zero values. */
|
||||
const UNKNOWN = '\u2014';
|
||||
|
||||
/**
|
||||
* Format a sample rate in Hz to a human-readable string.
|
||||
* Returns "44.1 kHz", "48 kHz", "96 kHz", etc.
|
||||
* Returns an em-dash for zero or falsy values.
|
||||
*/
|
||||
export function formatSampleRate(hz: number): string {
|
||||
if (!hz) return UNKNOWN;
|
||||
|
||||
const khz = hz / 1000;
|
||||
|
||||
// Display as integer if it's a whole number, otherwise
|
||||
// one decimal place (e.g. 44.1 kHz).
|
||||
const formatted =
|
||||
khz % 1 === 0 ? khz.toString() : khz.toFixed(1);
|
||||
|
||||
return `${formatted} kHz`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format bit depth (bits per sample) to a human-readable string.
|
||||
* Returns "16-bit", "24-bit", "32-bit", etc.
|
||||
* Returns an em-dash for zero or falsy values.
|
||||
*/
|
||||
export function formatBitDepth(bits: number): string {
|
||||
if (!bits) return UNKNOWN;
|
||||
|
||||
return `${bits}-bit`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a channel count to a human-readable string.
|
||||
* Returns "Mono", "Stereo", or "N ch" for other counts.
|
||||
* Returns an em-dash for zero or falsy values.
|
||||
*/
|
||||
export function formatChannels(n: number): string {
|
||||
if (!n) return UNKNOWN;
|
||||
if (n === 1) return 'Mono';
|
||||
if (n === 2) return 'Stereo';
|
||||
|
||||
return `${n} ch`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a bitrate in kbps to a human-readable string.
|
||||
* Returns "320 kbps", "1,411 kbps", etc.
|
||||
* Returns an em-dash for zero or falsy values.
|
||||
*/
|
||||
export function formatBitrate(kbps: number): string {
|
||||
if (!kbps) return UNKNOWN;
|
||||
|
||||
return `${kbps.toLocaleString()} kbps`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a file size in bytes to a human-readable string.
|
||||
* Uses binary units: KiB, MiB, GiB.
|
||||
* Returns an em-dash for zero or falsy values.
|
||||
*/
|
||||
export function formatFileSize(bytes: number): string {
|
||||
if (!bytes) return UNKNOWN;
|
||||
|
||||
const kib = 1024;
|
||||
const mib = kib * 1024;
|
||||
const gib = mib * 1024;
|
||||
|
||||
if (bytes >= gib) {
|
||||
return `${(bytes / gib).toFixed(1)} GB`;
|
||||
}
|
||||
|
||||
if (bytes >= mib) {
|
||||
return `${(bytes / mib).toFixed(1)} MB`;
|
||||
}
|
||||
|
||||
if (bytes >= kib) {
|
||||
return `${(bytes / kib).toFixed(1)} KB`;
|
||||
}
|
||||
|
||||
return `${bytes} B`;
|
||||
}
|
||||
Reference in New Issue
Block a user