diff --git a/v.md b/v.md index 9e6b893..67287a4 100644 --- a/v.md +++ b/v.md @@ -60,27 +60,39 @@ use std::thread::sleep; use std::time::Duration; fn main() { - let socket = UdpSocket::bind("0.0.0.0:0").unwrap(); - let target = "127.0.0.1:39539"; + let socket = UdpSocket::bind("0.0.0.0:0").unwrap(); + let target = "127.0.0.1:39539"; - // Blink - for value in [0.0, 0.5, 1.0, 0.5, 0.0] { - send(&socket, target, "Blink", value); - sleep(Duration::from_millis(40)); - } + println!("Sending blink to {}", target); + + // Blink animation (same as airse-vmc do_blink) + for i in 0..=5 { + let value = if i <= 2 { i as f32 / 2.0 } else { (5 - i) as f32 / 2.0 }; + println!(" Blink: {}", value); + blink(&socket, target, value); + sleep(Duration::from_millis(30)); + } + + println!("Done"); } -fn send(socket: &UdpSocket, target: &str, name: &str, value: f32) { - let msg = OscMessage { -addr: "/VMC/Ext/Blend/Val".into(), - args: vec![OscType::String(name.into()), OscType::Float(value)], - }; - let buf = rosc::encoder::encode(&OscPacket::Message(msg)).unwrap(); - socket.send_to(&buf, target).unwrap(); +fn blink(socket: &UdpSocket, target: &str, value: f32) { + // Send all three Blink blend shapes (like airse-vmc) + for name in &["Blink", "Blink_L", "Blink_R"] { + let msg = OscMessage { + addr: "/VMC/Ext/Blend/Val".to_string(), + args: vec![OscType::String(name.to_string()), OscType::Float(value)], + }; + let buf = rosc::encoder::encode(&OscPacket::Message(msg)).unwrap(); + socket.send_to(&buf, target).unwrap(); + } - // Apply - let apply = OscMessage { addr: "/VMC/Ext/Blend/Apply".into(), args: vec![] }; - let buf = rosc::encoder::encode(&OscPacket::Message(apply)).unwrap(); - socket.send_to(&buf, target).unwrap(); + // Apply + let apply = OscMessage { + addr: "/VMC/Ext/Blend/Apply".to_string(), + args: vec![], + }; + let buf = rosc::encoder::encode(&OscPacket::Message(apply)).unwrap(); + socket.send_to(&buf, target).unwrap(); } ``` \ No newline at end of file