Private
Public Access
1
0

v を更新

2026-01-03 17:58:33 +00:00
parent 0f619fa6da
commit 64e8c4e33c

28
v.md

@@ -63,23 +63,35 @@ fn main() {
let socket = UdpSocket::bind("0.0.0.0:0").unwrap(); let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
let target = "127.0.0.1:39539"; let target = "127.0.0.1:39539";
// Blink println!("Sending blink to {}", target);
for value in [0.0, 0.5, 1.0, 0.5, 0.0] {
send(&socket, target, "Blink", value); // Blink animation (same as airse-vmc do_blink)
sleep(Duration::from_millis(40)); 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) { 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 { let msg = OscMessage {
addr: "/VMC/Ext/Blend/Val".into(), addr: "/VMC/Ext/Blend/Val".to_string(),
args: vec![OscType::String(name.into()), OscType::Float(value)], args: vec![OscType::String(name.to_string()), OscType::Float(value)],
}; };
let buf = rosc::encoder::encode(&OscPacket::Message(msg)).unwrap(); let buf = rosc::encoder::encode(&OscPacket::Message(msg)).unwrap();
socket.send_to(&buf, target).unwrap(); socket.send_to(&buf, target).unwrap();
}
// Apply // Apply
let apply = OscMessage { addr: "/VMC/Ext/Blend/Apply".into(), args: vec![] }; let apply = OscMessage {
addr: "/VMC/Ext/Blend/Apply".to_string(),
args: vec![],
};
let buf = rosc::encoder::encode(&OscPacket::Message(apply)).unwrap(); let buf = rosc::encoder::encode(&OscPacket::Message(apply)).unwrap();
socket.send_to(&buf, target).unwrap(); socket.send_to(&buf, target).unwrap();
} }