OSC messages for column beat tracking
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user