open-sound-module

An unofficial library providing tools for working with Rebel Tech's Open Sound Module.

cv

The cv module provides types for creating and working with control voltage messages. ```rust extern crate opensoundmodule;

use std::io::Read; use opensoundmodule::{CvMessage, CvAddress};

fn main() -> Result<(), failure::Error> { let mut msg = CvMessage::new(CvAddress::A, -0.3); let bytes = msg.to_vec(); let mut buf: [u8; 1024] = [0; 1024]; let n = msg.read(&mut buf)?; assert!(n == 20); Ok(())
} ```

trigger

The trigger module provides types for creating and working with trigger messages. ```rust extern crate opensoundmodule;

use std::io::Read; use opensoundmodule::{TriggerMessage, TriggerAddress};

fn main() -> Result<(), failure::Error> { let mut msg = TriggerMessage::new(TriggerAddress::B, 1); let bytes = msg.to_vec(); let mut buf: [u8; 1024] = [0; 1024]; let n = msg.read(&mut buf)?; assert!(n == 20); Ok(())
} ```

sequencer

The sequencer module provides an OscMessageSequencer trait built on Iterator, that can be used to send a series of control voltage and trigger messages. It also includes several impementations using sample::signal that represent some useful waveforms. ```rust extern crate opensoundmodule;

use opensoundmodule::OscMessageSequence; use opensoundmodule::SineSequence; use opensoundmodule::CvAddress; use std::time;

fn main() -> Result<(), failure::Error> { let rate = 4.0; let hz = 1.0; let seconds = time::Duration::from_secs(30); let mut noise = SineSequence::new(CvAddress::A, rate, hz, seconds); let _msg = noise.next(); let _delay = noise.delay(); Ok(())
} ```

client

The client module provides a Client type to simplify sending cv and trigger messages over UDP in Open Sound Control protocol. ```rust extern crate opensoundmodule;

use opensoundmodule::Client; use opensoundmodule::CvAddress; use opensoundmodule::OscMessage; use opensoundmodule::NoiseSequence; use std::time;

fn main() -> Result<(), failure::Error> { let client = Client::new("127.0.0.1:8888".to_string())?;

let msg = CvMessage::new(CvAddress::B, -1.0); client.sendoscmessage(OscMessage::CvMessage(msg))?;

let seed = 0; let rate = 4.0; let seconds = time::Duration::fromsecs(1); let mut noise = NoiseSequence::new(CvAddress::A, seed, rate, seconds); client.sendsequence(&mut noise)?; Ok(()) } ```