Skip to content

Commit

Permalink
refactor(audio::process): replace rubato with dasp
Browse files Browse the repository at this point in the history
  • Loading branch information
dev-msp committed Apr 19, 2024
1 parent 7994239 commit a9302f6
Show file tree
Hide file tree
Showing 4 changed files with 239 additions and 179 deletions.
200 changes: 120 additions & 80 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 6 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ edition = "2021"
[dependencies]
anyhow = "1.0.81"
cpal = "0.14.0"
dasp = { version = "0.11.0", features = ["all"] }
hound = "3.5.1"
itertools = "0.12.1"
# linfa = "0.7.0"
thiserror = "1.0.58"
webrtc-vad = "0.4.0"
whisper-rs = { git = "https://github.com/tazz4843/whisper-rs", branch = "master", features = [ "metal", "whisper-cpp-log" ] }
sttx = { git = "https://github.com/dev-msp/sttx", branch = "main" }

itertools = "0.12.1"
# linfa = "0.7.0"
thiserror = "1.0.58"
clap = { version = "4.5.4", features = ["derive"] }
regex = "1.10.4"
tracing = { version = "0.1.40", features = ["log"] }
Expand All @@ -23,6 +25,6 @@ log = "0.4.21"
crossbeam = "0.8.4"
serde = { version = "1.0.197", features = ["derive"] }
serde_json = "1.0.115"
rubato = "0.15.0"

actix-web = "4.5.1"
tokio = { version = "1.37.0", features = ["full"] }
73 changes: 50 additions & 23 deletions src/audio/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -235,30 +235,57 @@ where

let cfg: cpal::StreamConfig = supported_config.clone().into();
let cfg_inner = cfg.clone();
let resampler = super::process::Processor::<f32, S>::new(chan.clone(), cfg_inner.clone(), 512)
.expect("failed to create resampler");

let resampler = Arc::new(Mutex::new(resampler));
{
let resampler_send = resampler.clone();
let stream = device.build_input_stream(
&cfg,
move |data, _| {
resampler_send
.lock()
.expect("failed to lock resampler")
.write_input_data(data)
.expect("failed to write data");
},
move |err| log::trace!("an error occurred on stream: {}", err),
)?;
stream.play()?;
controller.recording();

controller.wait_for(RecordState::Stopped);
if cfg.channels == 1 {
let resampler =
super::process::Processor::<f32, S, 1>::new(chan.clone(), cfg_inner.clone(), 512)
.expect("failed to create resampler");

let resampler = Arc::new(Mutex::new(resampler));
{
let resampler_send = resampler.clone();
let stream = device.build_input_stream(
&cfg,
move |data, _| {
resampler_send
.lock()
.expect("failed to lock resampler")
.write_input_data(data)
.expect("failed to write data");
},
move |err| log::trace!("an error occurred on stream: {}", err),
)?;
stream.play()?;
controller.recording();

controller.wait_for(RecordState::Stopped);
}
} else if cfg.channels == 2 {
let resampler =
super::process::Processor::<f32, S, 2>::new(chan.clone(), cfg_inner.clone(), 512)
.expect("failed to create resampler");

let resampler = Arc::new(Mutex::new(resampler));
{
let resampler_send = resampler.clone();
let stream = device.build_input_stream(
&cfg,
move |data, _| {
resampler_send
.lock()
.expect("failed to lock resampler")
.write_input_data(data)
.expect("failed to write data");
},
move |err| log::trace!("an error occurred on stream: {}", err),
)?;
stream.play()?;
controller.recording();

controller.wait_for(RecordState::Stopped);
}
} else {
panic!("unsupported channel count");
}
let mut resampler = resampler.lock().expect("failed to lock resampler");
resampler.flush_to_sink()?;
Ok(cfg)
}

Expand Down
Loading

0 comments on commit a9302f6

Please sign in to comment.