sax control
This commit is contained in:
parent
bc3b710403
commit
70d4e551b4
1 changed files with 115 additions and 55 deletions
|
@ -1,5 +1,5 @@
|
||||||
#![feature(iter_collect_into)]
|
#![feature(iter_collect_into)]
|
||||||
use std::{result, sync::Arc, thread::sleep, time::Duration};
|
use std::{ops::ControlFlow, result, sync::Arc, thread::sleep, time::Duration};
|
||||||
|
|
||||||
use anyhow::{Context, Ok, Result};
|
use anyhow::{Context, Ok, Result};
|
||||||
use common::{ControlPacket, TelemetryPacket};
|
use common::{ControlPacket, TelemetryPacket};
|
||||||
|
@ -99,49 +99,114 @@ async fn controller(mut notes: mpsc::Receiver<(Option<pitch_detection::Pitch<f32
|
||||||
let (note,vol) = note.context("channel closed")?;
|
let (note,vol) = note.context("channel closed")?;
|
||||||
if let Some(note) = note {
|
if let Some(note) = note {
|
||||||
dbg!(note.frequency);
|
dbg!(note.frequency);
|
||||||
if note.frequency < 300. {
|
if let ControlFlow::Break(_) = sax_control(&mut control, vol, ¬e) {
|
||||||
|
if let ControlFlow::Break(_) = recorder_control(&mut control, vol, note) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
send_packet(&mut controller, control).await?;
|
||||||
|
} else {
|
||||||
|
send_packet(&mut controller, ControlPacket::Twist(0.0, 0.0)).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sax_control(control: &mut ControlPacket, vol: f32, note: &pitch_detection::Pitch<f32>) -> ControlFlow<()> {
|
||||||
|
if note.frequency < 150. {
|
||||||
println!("too low");
|
println!("too low");
|
||||||
continue;
|
return ControlFlow::Break(());
|
||||||
}
|
}
|
||||||
if note.frequency > 600. {
|
if note.frequency > 270. {
|
||||||
println!("too high");
|
println!("too high");
|
||||||
continue;
|
return ControlFlow::Break(());
|
||||||
}
|
}
|
||||||
|
let note = Note::from_freq(note.frequency, Tuning::EqualTemperament);
|
||||||
//dbg!(note.clarity);
|
//dbg!(note.clarity);
|
||||||
//dbg!(vol);
|
//dbg!(vol);
|
||||||
let note = Note::from_freq(note.frequency, Tuning::EqualTemperament);
|
|
||||||
match note.pitch {
|
match note.pitch {
|
||||||
Pitch { letter: NoteLetter::A, accidental: 0} => {
|
|
||||||
println!("forward");
|
|
||||||
control = ControlPacket::Twist(1.0, 0.0);
|
|
||||||
}
|
|
||||||
Pitch { letter: NoteLetter::A, accidental: 1} => {
|
|
||||||
println!("backward");
|
|
||||||
control = ControlPacket::Twist(-1.0, 0.0);
|
|
||||||
}
|
|
||||||
Pitch { letter: NoteLetter::C, accidental: 0} => {
|
|
||||||
println!("right");
|
|
||||||
control = ControlPacket::Twist(0.0, 1.0);
|
|
||||||
}
|
|
||||||
Pitch { letter: NoteLetter::C, accidental: 1} => {
|
Pitch { letter: NoteLetter::C, accidental: 1} => {
|
||||||
println!("left");
|
println!("forward");
|
||||||
control = ControlPacket::Twist(0.0, -1.0);
|
*control = ControlPacket::Twist(1.0, 0.0);
|
||||||
}
|
}
|
||||||
Pitch { letter: NoteLetter::G, accidental: 0|1} => {
|
//Pitch { letter: NoteLetter::A, accidental: 1} => {
|
||||||
|
// println!("backward");
|
||||||
|
// *control = ControlPacket::Twist(-1.0, 0.0);
|
||||||
|
//}
|
||||||
|
Pitch { letter: NoteLetter::B, accidental: 0} => {
|
||||||
|
println!("right");
|
||||||
|
*control = ControlPacket::Twist(0.0, 1.0);
|
||||||
|
}
|
||||||
|
Pitch { letter: NoteLetter::A, accidental: 0} => {
|
||||||
|
println!("left");
|
||||||
|
*control = ControlPacket::Twist(0.0, -1.0);
|
||||||
|
}
|
||||||
|
Pitch { letter: NoteLetter::G, accidental: 1} => {
|
||||||
println!("fire");
|
println!("fire");
|
||||||
control = ControlPacket::Fire;
|
*control = ControlPacket::Fire;
|
||||||
}
|
}
|
||||||
Pitch { letter: NoteLetter::F, accidental: 1} => {
|
Pitch { letter: NoteLetter::F, accidental: 1} => {
|
||||||
println!("stop flat");
|
println!("stop flat");
|
||||||
control = ControlPacket::Stop;
|
*control = ControlPacket::Stop;
|
||||||
|
}
|
||||||
|
pitch => {
|
||||||
|
if vol > 3000. {
|
||||||
|
println!("rly loud");
|
||||||
|
//control = ControlPacket::FireOverride(1.0);
|
||||||
|
dbg!(pitch);
|
||||||
|
} else {
|
||||||
|
dbg!(pitch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ControlFlow::Continue(())
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn recorder_control(control: &mut ControlPacket, vol: f32, note: pitch_detection::Pitch<f32>) -> ControlFlow<()> {
|
||||||
|
if note.frequency < 300. {
|
||||||
|
println!("too low");
|
||||||
|
return ControlFlow::Break(());
|
||||||
|
}
|
||||||
|
if note.frequency > 600. {
|
||||||
|
println!("too high");
|
||||||
|
return ControlFlow::Break(());
|
||||||
|
}
|
||||||
|
let note = Note::from_freq(note.frequency, Tuning::EqualTemperament);
|
||||||
|
//dbg!(note.clarity);
|
||||||
|
//dbg!(vol);
|
||||||
|
match note.pitch {
|
||||||
|
Pitch { letter: NoteLetter::A, accidental: 0} => {
|
||||||
|
println!("forward");
|
||||||
|
*control = ControlPacket::Twist(1.0, 0.0);
|
||||||
|
}
|
||||||
|
Pitch { letter: NoteLetter::A, accidental: 1} => {
|
||||||
|
println!("backward");
|
||||||
|
*control = ControlPacket::Twist(-1.0, 0.0);
|
||||||
|
}
|
||||||
|
Pitch { letter: NoteLetter::C, accidental: 0} => {
|
||||||
|
println!("right");
|
||||||
|
*control = ControlPacket::Twist(0.0, 1.0);
|
||||||
|
}
|
||||||
|
Pitch { letter: NoteLetter::C, accidental: 1} => {
|
||||||
|
println!("left");
|
||||||
|
*control = ControlPacket::Twist(0.0, -1.0);
|
||||||
|
}
|
||||||
|
Pitch { letter: NoteLetter::G, accidental: 0|1} => {
|
||||||
|
println!("fire");
|
||||||
|
*control = ControlPacket::Fire;
|
||||||
|
}
|
||||||
|
Pitch { letter: NoteLetter::F, accidental: 1} => {
|
||||||
|
println!("stop flat");
|
||||||
|
*control = ControlPacket::Stop;
|
||||||
}
|
}
|
||||||
Pitch { letter: NoteLetter::F, accidental: 0} => {
|
Pitch { letter: NoteLetter::F, accidental: 0} => {
|
||||||
println!("stop");
|
println!("stop");
|
||||||
control = ControlPacket::Stop;
|
*control = ControlPacket::Stop;
|
||||||
}
|
}
|
||||||
Pitch { letter: NoteLetter::E, accidental: 0} => {
|
Pitch { letter: NoteLetter::E, accidental: 0} => {
|
||||||
println!("stop");
|
println!("stop");
|
||||||
control = ControlPacket::Stop;
|
*control = ControlPacket::Stop;
|
||||||
//if let result::Result::Ok(command) = auto_rx.try_recv() {
|
//if let result::Result::Ok(command) = auto_rx.try_recv() {
|
||||||
// control = command;
|
// control = command;
|
||||||
//}
|
//}
|
||||||
|
@ -155,12 +220,7 @@ async fn controller(mut notes: mpsc::Receiver<(Option<pitch_detection::Pitch<f32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ControlFlow::Continue(())
|
||||||
send_packet(&mut controller, control).await?;
|
|
||||||
} else {
|
|
||||||
send_packet(&mut controller, ControlPacket::Twist(0.0, 0.0)).await?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send_packet(controller: &mut BufWriter<OwnedWriteHalf>, control: ControlPacket) -> Result<(), anyhow::Error> {
|
async fn send_packet(controller: &mut BufWriter<OwnedWriteHalf>, control: ControlPacket) -> Result<(), anyhow::Error> {
|
||||||
|
|
Loading…
Reference in a new issue