sampler: replace red x with record instruction

This commit is contained in:
🪞👃🪞 2025-05-11 01:36:14 +03:00
parent b9c101081b
commit ee2efd1c26

View file

@ -137,45 +137,53 @@ fn draw_viewer (sample: Option<&Arc<RwLock<Sample>>>) -> impl Content<TuiOut> +
ThunkRender::new(move|to: &mut TuiOut|{ ThunkRender::new(move|to: &mut TuiOut|{
let [x, y, width, height] = to.area(); let [x, y, width, height] = to.area();
let area = Rect { x, y, width, height }; let area = Rect { x, y, width, height };
let (x_bounds, y_bounds, lines): ([f64;2], [f64;2], Vec<Line>) = if let Some(sample) = &sample {
if let Some(sample) = &sample { let sample = sample.read().unwrap();
let sample = sample.read().unwrap(); let start = sample.start as f64;
let start = sample.start as f64; let end = sample.end as f64;
let end = sample.end as f64; let length = end - start;
let length = end - start; let step = length / width as f64;
let step = length / width as f64; let mut t = start;
let mut t = start; let mut lines = vec![];
let mut lines = vec![]; while t < end {
while t < end { let chunk = &sample.channels[0][t as usize..((t + step) as usize).min(sample.end)];
let chunk = &sample.channels[0][t as usize..((t + step) as usize).min(sample.end)]; let total: f32 = chunk.iter().map(|x|x.abs()).sum();
let total: f32 = chunk.iter().map(|x|x.abs()).sum(); let count = chunk.len() as f32;
let count = chunk.len() as f32; let meter = 10. * (total / count).log10();
let meter = 10. * (total / count).log10(); let x = t as f64;
let x = t as f64; let y = meter as f64;
let y = meter as f64; lines.push(Line::new(x, min_db, x, y, Color::Green));
lines.push(Line::new(x, min_db, x, y, Color::Green)); t += step / 2.;
t += step / 2.; }
} Canvas::default()
( .x_bounds([sample.start as f64, sample.end as f64])
[sample.start as f64, sample.end as f64], .y_bounds([min_db, 0.])
[min_db, 0.], .paint(|ctx| {
lines for line in lines.iter() {
) ctx.draw(line);
} else { }
( //FIXME: proportions
[0.0, width as f64], //let text = "press record to finish sampling";
[0.0, height as f64], //ctx.print(
vec![ //(width - text.len() as u16) as f64 / 2.0,
Line::new(0.0, 0.0, width as f64, height as f64, Color::Red), //height as f64 / 2.0,
Line::new(width as f64, 0.0, 0.0, height as f64, Color::Red), //text.red()
] //);
) }).render(area, &mut to.buffer);
}; } else {
Canvas::default() Canvas::default()
.x_bounds(x_bounds) .x_bounds([0.0, width as f64])
.y_bounds(y_bounds) .y_bounds([0.0, height as f64])
.paint(|ctx| { for line in lines.iter() { ctx.draw(line) } }) .paint(|ctx| {
.render(area, &mut to.buffer); let text = "press record to begin sampling";
ctx.print(
(width - text.len() as u16) as f64 / 2.0,
height as f64 / 2.0,
text.red()
);
})
.render(area, &mut to.buffer);
}
}) })
} }