OSC messages for column beat tracking

This commit is contained in:
2025-06-22 18:52:57 +02:00
parent cfa2f1709e
commit b4f51548b3
16 changed files with 441 additions and 272 deletions

View File

@@ -62,4 +62,22 @@ impl OscController {
Err(_) => Err(LooperError::Osc(std::panic::Location::caller())), // Channel closed
}
}
pub fn column_beats_changed(&self, column: usize, beats: usize) -> Result<()> {
let message = osc::Message::ColumnBeatsChanged { column, beats };
match self.sender.try_send(message) {
Ok(true) => Ok(()),
Ok(false) => Err(LooperError::Osc(std::panic::Location::caller())), // Channel full
Err(_) => Err(LooperError::Osc(std::panic::Location::caller())), // Channel closed
}
}
pub fn column_beat_changed(&self, column: usize, beat: usize) -> Result<()> {
let message = osc::Message::ColumnBeatChanged { column, beat };
match self.sender.try_send(message) {
Ok(true) => Ok(()),
Ok(false) => Err(LooperError::Osc(std::panic::Location::caller())), // Channel full
Err(_) => Err(LooperError::Osc(std::panic::Location::caller())), // Channel closed
}
}
}

View File

@@ -3,21 +3,16 @@ use futures::SinkExt;
const CLIENT_BUFFER_SIZE: usize = 32;
pub struct Osc {
pub struct Osc<const COLS: usize, const ROWS: usize> {
receiver: kanal::AsyncReceiver<osc::Message>,
listener: osc_server::platform::PlatformListener,
broadcaster: tokio::sync::broadcast::Sender<osc::Message>,
shadow_state: osc::State,
shadow_state: osc::State<COLS, ROWS>,
}
impl Osc {
/// Create new OSC server and controller with configurable matrix size and tempo
pub async fn new(
socket_path: &str,
columns: usize,
rows: usize,
tempo: f32,
) -> Result<(Self, OscController)> {
impl<const COLS: usize, const ROWS: usize> Osc<COLS, ROWS> {
/// Create new OSC server and controller with configurable tempo
pub async fn new(socket_path: &str, tempo: f32) -> Result<(Self, OscController)> {
// Create platform listener (server)
let listener = osc_server::platform::create_listener(socket_path).await?;
@@ -32,7 +27,7 @@ impl Osc {
receiver,
listener,
broadcaster,
shadow_state: osc::State::new(columns, rows, tempo),
shadow_state: osc::State::new(tempo),
};
Ok((server, controller))
@@ -110,4 +105,4 @@ impl Osc {
Ok(())
}
}
}