extern crate portmidi as pm;
extern crate docopt;
extern crate rustc_serialize;
use std::thread;
use std::time::Duration;
const USAGE: &'static str = r#"
portmidi-rs: monitor-device example
Usage:
monitor-device <device-id>
Options:
-h --help Show this screen.
Omitting <device-id> will list the available devices.
"#;
#[derive(Debug, RustcDecodable)]
struct Args {
arg_device_id: i32,
}
fn print_devices(pm: &pm::PortMidi) {
for dev in pm.devices().unwrap() {
println!("{}", dev);
}
}
fn main() {
let context = pm::PortMidi::new().unwrap();
let timeout = Duration::from_millis(10);
let args: Args = docopt::Docopt::new(USAGE)
.and_then(|d| d.decode())
.unwrap_or_else(|err| {
print_devices(&context);
err.exit();
});
let info = context.device(args.arg_device_id).unwrap();
println!("Listening on: {}) {}", info.id(), info.name());
let in_port = context.input_port(info, 1024).unwrap();
while let Ok(_) = in_port.poll() {
if let Ok(Some(event)) = in_port.read_n(1024) {
println!("{:?}", event);
}
thread::sleep(timeout);
}
}