89 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
		
			Executable File
		
	
	
	
	
| import findLoudness, { SwapPoint } from "./find-loudness";
 | |
| 
 | |
| const graph_density = 8000;
 | |
| 
 | |
| const threshold_at_point = 2;
 | |
| 
 | |
| const inertia_s = 0.3;
 | |
| const inertia_samples = inertia_s * graph_density;
 | |
| 
 | |
| const s = (n: number) => n / graph_density;
 | |
| 
 | |
| const minutes = (units: number) => Math.floor(s(units) / 60);
 | |
| 
 | |
| const hours = (units: number) => Math.floor(units / graph_density / 60 / 60);
 | |
| 
 | |
| const formatTime = (units: number) =>
 | |
| 	`${hours(units)}:${minutes(units)}:${Math.floor(s(units) % 60)}`;
 | |
| 
 | |
| type Mode = { left: boolean; right: boolean };
 | |
| 
 | |
| async function run() {
 | |
| 	const [left_breaks, right_breaks] = await Promise.all([
 | |
| 		findLoudness(
 | |
| 			"/tmp/leftraw",
 | |
| 			threshold_at_point,
 | |
| 			inertia_samples,
 | |
| 			"left"
 | |
| 		),
 | |
| 		findLoudness(
 | |
| 			"/tmp/rightraw",
 | |
| 			threshold_at_point,
 | |
| 			inertia_samples,
 | |
| 			"right"
 | |
| 		),
 | |
| 	]);
 | |
| 
 | |
| 	const merged = [...left_breaks, ...right_breaks].sort((a, b) =>
 | |
| 		a.position_start < b.position_start
 | |
| 			? -1
 | |
| 			: a.position_start > b.position_start
 | |
| 				? 1
 | |
| 				: 0
 | |
| 	);
 | |
| 
 | |
| 	// console.log("left breaks:", left_breaks);
 | |
| 	// console.log(`right_breaks`, right_breaks);
 | |
| 	// console.log(`merged`, merged);
 | |
| 
 | |
| 	function new_mode(m: Mode, s: SwapPoint): Mode {
 | |
| 		return { ...m, [s.label]: s.loud };
 | |
| 	}
 | |
| 
 | |
| 	function mode_to_string(mode: Mode) {
 | |
| 		if (mode.left && mode.right) {
 | |
| 			return "both";
 | |
| 		}
 | |
| 		for (const side of ["left", "right"]) {
 | |
| 			if (mode[side as keyof Mode]) {
 | |
| 				return side;
 | |
| 			}
 | |
| 		}
 | |
| 		return "none";
 | |
| 	}
 | |
| 
 | |
| 	console.log("file", `${process.cwd()}/pics/none.png`);
 | |
| 	let last_point = 0;
 | |
| 	let mode: Mode = { left: false, right: false };
 | |
| 	let last_file;
 | |
| 	let total = 0;
 | |
| 	for (let i = 2; i < merged.length; i++) {
 | |
| 		const point = merged[i];
 | |
| 		mode = new_mode(mode, point);
 | |
| 		const file = `${process.cwd()}/pics/${mode_to_string(mode)}.png`;
 | |
| 		const duration = (point.position_start - last_point) / graph_density;
 | |
| 		console.log(
 | |
| 			"duration",
 | |
| 			(point.position_start - last_point) / graph_density
 | |
| 		);
 | |
| 		console.log("file", file);
 | |
| 		last_point = point.position_start;
 | |
| 		last_file = file;
 | |
| 		total += duration * graph_density;
 | |
| 	}
 | |
| 	console.log("duration", merged[merged.length - 1].duration / graph_density);
 | |
| 	console.log("file", last_file);
 | |
| 	console.error(total, formatTime(total));
 | |
| }
 | |
| run();
 |