Feat: background head-preload for sample libraries
This commit is contained in:
@@ -15,11 +15,11 @@ use soft_ratatui::embedded_graphics_unicodefonts::{
|
||||
};
|
||||
use soft_ratatui::{EmbeddedGraphics, SoftBackend};
|
||||
|
||||
use cagire::init::{init, InitArgs};
|
||||
use cagire::engine::{
|
||||
build_stream, AnalysisHandle, AudioStreamConfig, LinkState, MidiCommand, ScopeBuffer,
|
||||
SequencerHandle, SpectrumBuffer,
|
||||
};
|
||||
use cagire::init::{init, InitArgs};
|
||||
use cagire::input::{handle_key, InputContext, InputResult};
|
||||
use cagire::input_egui::convert_egui_events;
|
||||
use cagire::settings::Settings;
|
||||
@@ -218,6 +218,11 @@ impl CagireDesktop {
|
||||
|
||||
self.audio_sample_pos.store(0, Ordering::Release);
|
||||
|
||||
let preload_entries: Vec<(String, std::path::PathBuf)> = restart_samples
|
||||
.iter()
|
||||
.map(|e| (e.name.clone(), e.path.clone()))
|
||||
.collect();
|
||||
|
||||
match build_stream(
|
||||
&new_config,
|
||||
new_audio_rx,
|
||||
@@ -227,7 +232,7 @@ impl CagireDesktop {
|
||||
restart_samples,
|
||||
Arc::clone(&self.audio_sample_pos),
|
||||
) {
|
||||
Ok((new_stream, info, new_analysis)) => {
|
||||
Ok((new_stream, info, new_analysis, registry)) => {
|
||||
self._stream = Some(new_stream);
|
||||
self._analysis_handle = Some(new_analysis);
|
||||
self.app.audio.config.sample_rate = info.sample_rate;
|
||||
@@ -236,7 +241,18 @@ impl CagireDesktop {
|
||||
self.sample_rate_shared
|
||||
.store(info.sample_rate as u32, Ordering::Relaxed);
|
||||
self.app.audio.error = None;
|
||||
self.app.audio.sample_registry = Some(std::sync::Arc::clone(®istry));
|
||||
self.app.ui.set_status("Audio restarted".to_string());
|
||||
|
||||
if !preload_entries.is_empty() {
|
||||
let sr = info.sample_rate;
|
||||
std::thread::Builder::new()
|
||||
.name("sample-preload".into())
|
||||
.spawn(move || {
|
||||
cagire::init::preload_sample_heads(preload_entries, sr, ®istry);
|
||||
})
|
||||
.expect("failed to spawn preload thread");
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
self.app.audio.error = Some(e.clone());
|
||||
|
||||
Reference in New Issue
Block a user