Documentation
use plotly::{
    layout::{GridPattern, Layout, LayoutGrid},
    Plot, Scatter,
};

pub fn mono_waveform(title: &str, signal: impl AsRef<[f32]>) {
    let signal = signal.as_ref();
    let mut plot = Plot::new();
    plot.add_trace(Scatter::new((0..signal.len()).collect(), signal.to_vec()));
    plot.set_layout(Layout::new().title(title.into()));
    plot.show();
}

pub fn stereo_waveform(title: &str, left: impl AsRef<[f32]>, right: impl AsRef<[f32]>) {
    let (l, r) = (left.as_ref(), right.as_ref());
    let mut plot = Plot::new();
    plot.add_trace(
        Scatter::new((0..l.len()).collect(), l.to_vec())
            .x_axis("x1")
            .y_axis("y1"),
    );
    plot.add_trace(
        Scatter::new((0..r.len()).collect(), r.to_vec())
            .x_axis("x2")
            .y_axis("y2"),
    );
    plot.set_layout(
        Layout::new().title(title.into()).grid(
            LayoutGrid::new()
                .rows(2)
                .columns(1)
                .pattern(GridPattern::Independent),
        ),
    );
    plot.show();
}