WIP: fix VST3 version

This commit is contained in:
2026-02-20 22:26:35 +01:00
parent 00d6eb2f1f
commit 07e95d5b6f
6 changed files with 42 additions and 12 deletions

View File

@@ -132,12 +132,11 @@ pub fn create_editor(
cagire::state::ColorScheme::default().to_palette(); cagire::state::ColorScheme::default().to_palette();
theme::set(cagire_ratatui::theme::build::build(&palette)); theme::set(cagire_ratatui::theme::build::build(&palette));
let mut app = App::with_shared( let mut app = App::new_plugin(
Arc::clone(&variables), Arc::clone(&variables),
Arc::clone(&dict), Arc::clone(&dict),
Arc::clone(&rng), Arc::clone(&rng),
); );
app.plugin_mode = true;
app.audio.section = cagire::state::EngineSection::Settings; app.audio.section = cagire::state::EngineSection::Settings;
app.audio.setting_kind = cagire::state::SettingKind::Polyphony; app.audio.setting_kind = cagire::state::SettingKind::Polyphony;

View File

@@ -119,6 +119,7 @@ impl Plugin for CagirePlugin {
}, },
}]; }];
const MIDI_INPUT: MidiConfig = MidiConfig::MidiCCs;
const MIDI_OUTPUT: MidiConfig = MidiConfig::MidiCCs; const MIDI_OUTPUT: MidiConfig = MidiConfig::MidiCCs;
fn params(&self) -> Arc<dyn Params> { fn params(&self) -> Arc<dyn Params> {

View File

@@ -69,7 +69,7 @@ impl Forth {
if writes.is_empty() { if writes.is_empty() {
return; return;
} }
let mut new_vars = (**self.vars.load()).clone(); let mut new_vars = (*self.vars.load_full()).clone();
for (k, v) in writes { for (k, v) in writes {
new_vars.insert(k, v); new_vars.insert(k, v);
} }
@@ -99,7 +99,7 @@ impl Forth {
let mut stack = self.stack.lock(); let mut stack = self.stack.lock();
let mut outputs: Vec<String> = Vec::with_capacity(8); let mut outputs: Vec<String> = Vec::with_capacity(8);
let mut cmd = CmdRegister::new(); let mut cmd = CmdRegister::new();
let vars_snapshot = self.vars.load(); let vars_snapshot = self.vars.load_full();
let mut var_writes: HashMap<String, Value> = HashMap::new(); let mut var_writes: HashMap<String, Value> = HashMap::new();
self.execute_ops( self.execute_ops(

View File

@@ -83,15 +83,19 @@ impl App {
let variables = Arc::new(ArcSwap::from_pointee(HashMap::new())); let variables = Arc::new(ArcSwap::from_pointee(HashMap::new()));
let dict = Arc::new(Mutex::new(HashMap::new())); let dict = Arc::new(Mutex::new(HashMap::new()));
let rng = Arc::new(Mutex::new(StdRng::seed_from_u64(0))); let rng = Arc::new(Mutex::new(StdRng::seed_from_u64(0)));
Self::build(variables, dict, rng) Self::build(variables, dict, rng, false)
} }
#[allow(dead_code)] #[allow(dead_code)]
pub fn with_shared(variables: Variables, dict: Dictionary, rng: Rng) -> Self { pub fn with_shared(variables: Variables, dict: Dictionary, rng: Rng) -> Self {
Self::build(variables, dict, rng) Self::build(variables, dict, rng, false)
} }
fn build(variables: Variables, dict: Dictionary, rng: Rng) -> Self { pub fn new_plugin(variables: Variables, dict: Dictionary, rng: Rng) -> Self {
Self::build(variables, dict, rng, true)
}
fn build(variables: Variables, dict: Dictionary, rng: Rng, plugin_mode: bool) -> Self {
let script_engine = let script_engine =
ScriptEngine::new(Arc::clone(&variables), Arc::clone(&dict), Arc::clone(&rng)); ScriptEngine::new(Arc::clone(&variables), Arc::clone(&dict), Arc::clone(&rng));
let live_keys = Arc::new(LiveKeyState::new()); let live_keys = Arc::new(LiveKeyState::new());
@@ -119,11 +123,15 @@ impl App {
undo: UndoHistory::default(), undo: UndoHistory::default(),
audio: AudioSettings::default(), audio: if plugin_mode {
AudioSettings::new_plugin()
} else {
AudioSettings::default()
},
options: OptionsState::default(), options: OptionsState::default(),
panel: PanelState::default(), panel: PanelState::default(),
midi: MidiState::new(), midi: MidiState::new(),
plugin_mode: false, plugin_mode,
} }
} }

View File

@@ -867,7 +867,7 @@ impl SequencerState {
self.speed_overrides.clear(); self.speed_overrides.clear();
{ {
let vars = self.variables.load(); let vars = self.variables.load_full();
for id in self.audio_state.active_patterns.keys() { for id in self.audio_state.active_patterns.keys() {
let key = format_speed_key(&mut self.key_buf.speed, id.bank, id.pattern); let key = format_speed_key(&mut self.key_buf.speed, id.bank, id.pattern);
if let Some(v) = vars.get(key).and_then(|v: &Value| v.as_float().ok()) { if let Some(v) = vars.get(key).and_then(|v: &Value| v.as_float().ok()) {
@@ -998,7 +998,7 @@ impl SequencerState {
}; };
} }
let vars = self.variables.load(); let vars = self.variables.load_full();
let new_tempo = vars let new_tempo = vars
.get("__tempo__") .get("__tempo__")
.and_then(|v: &Value| v.as_float().ok()); .and_then(|v: &Value| v.as_float().ok());
@@ -1026,7 +1026,7 @@ impl SequencerState {
} }
if needs_removal { if needs_removal {
let mut new_vars = (**vars).clone(); let mut new_vars = (*vars).clone();
new_vars.remove("__tempo__"); new_vars.remove("__tempo__");
for id in completed { for id in completed {
new_vars.remove(format_chain_key(&mut buf, id.bank, id.pattern)); new_vars.remove(format_chain_key(&mut buf, id.bank, id.pattern));

View File

@@ -253,6 +253,28 @@ impl Default for AudioSettings {
} }
impl AudioSettings { impl AudioSettings {
pub fn new_plugin() -> Self {
Self {
config: AudioConfig::default(),
section: EngineSection::default(),
device_kind: DeviceKind::default(),
setting_kind: SettingKind::default(),
output_devices: Vec::new(),
input_devices: Vec::new(),
output_list: ListSelectState {
cursor: 0,
scroll_offset: 0,
},
input_list: ListSelectState {
cursor: 0,
scroll_offset: 0,
},
restart_pending: false,
error: None,
sample_registry: None,
}
}
pub fn refresh_devices(&mut self) { pub fn refresh_devices(&mut self) {
self.output_devices = doux::audio::list_output_devices(); self.output_devices = doux::audio::list_output_devices();
self.input_devices = doux::audio::list_input_devices(); self.input_devices = doux::audio::list_input_devices();