Fix the Windows build of vst3-host; bump version to 0.2.1

The vst3 bindings' enum constants use the C default enum type, which is i32 on
Windows and u32 elsewhere. The bus helpers took u32 and the process-context
flags were assigned to a u32 field directly, so the release build failed on all
three Windows targets. Type the helpers with the bindings' own aliases and cast
the flags once.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Brandon ThomasandClaude Opus 5.5 committed 2026-10-08 08:39:10 -04:00
1 parent b9c70400f9
commit ef47ab59d0
3 files changed
+27 -24

No files matched your search

Generated
+18 -18
View File
@@ -3361,7 +3361,7 @@ dependencies = [
[[package]]
name = "soundcraft"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"eframe",
"egui",
@@ -3376,7 +3376,7 @@ dependencies = [
[[package]]
name = "soundcraft-au-host"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"log",
"serde",
@@ -3386,7 +3386,7 @@ dependencies = [
[[package]]
name = "soundcraft-audio-io"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"log",
"proptest",
@@ -3398,7 +3398,7 @@ dependencies = [
[[package]]
name = "soundcraft-automation"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"log",
"serde_json",
@@ -3408,7 +3408,7 @@ dependencies = [
[[package]]
name = "soundcraft-clap-host"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"clap-sys",
"libloading",
@@ -3420,7 +3420,7 @@ dependencies = [
[[package]]
name = "soundcraft-cli"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"serde_json",
"soundcraft-audio-io",
@@ -3431,7 +3431,7 @@ dependencies = [
[[package]]
name = "soundcraft-dsp"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"log",
"proptest",
@@ -3442,7 +3442,7 @@ dependencies = [
[[package]]
name = "soundcraft-engine"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"log",
"proptest",
@@ -3462,7 +3462,7 @@ dependencies = [
[[package]]
name = "soundcraft-midi"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"proptest",
"serde",
@@ -3472,7 +3472,7 @@ dependencies = [
[[package]]
name = "soundcraft-mix"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"log",
"rayon",
@@ -3488,7 +3488,7 @@ dependencies = [
[[package]]
name = "soundcraft-model"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"proptest",
"serde",
@@ -3501,7 +3501,7 @@ dependencies = [
[[package]]
name = "soundcraft-playback"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"cpal",
"log",
@@ -3514,7 +3514,7 @@ dependencies = [
[[package]]
name = "soundcraft-time"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"proptest",
"serde",
@@ -3524,7 +3524,7 @@ dependencies = [
[[package]]
name = "soundcraft-ui-egui"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"egui",
"egui_kittest",
@@ -3549,7 +3549,7 @@ dependencies = [
[[package]]
name = "soundcraft-video"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"image",
"proptest",
@@ -3560,7 +3560,7 @@ dependencies = [
[[package]]
name = "soundcraft-vst3-host"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"libloading",
"log",
@@ -3575,7 +3575,7 @@ dependencies = [
[[package]]
name = "soundcraft-web"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"eframe",
"egui",
@@ -5122,7 +5122,7 @@ checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
[[package]]
name = "xtask"
version = "0.2.0"
version = "0.2.1"
dependencies = [
"serde_json",
]
+1 -1
View File
@@ -4,7 +4,7 @@ members = ["crates/*", "apps/*", "xtask"]
default-members = ["crates/*", "apps/*", "xtask"]
[workspace.package]
version = "0.2.0"
version = "0.2.1"
edition = "2024"
license = "MIT OR Apache-2.0"
rust-version = "1.90"
+8 -5
View File
@@ -1059,19 +1059,19 @@ impl Instance {
self.active
}
fn bus_count(&self, media: u32, dir: u32) -> i32 {
fn bus_count(&self, media: sv::MediaTypes, dir: sv::BusDirections) -> i32 {
// SAFETY: valid component.
unsafe { self.component.getBusCount(media as sv::MediaType, dir as sv::BusDirection) }.clamp(0, MAX_BUSES)
}
fn arrangement(&self, dir: u32, index: i32) -> Option<sv::SpeakerArrangement> {
fn arrangement(&self, dir: sv::BusDirections, index: i32) -> Option<sv::SpeakerArrangement> {
let p = self.processor()?;
let mut arr: sv::SpeakerArrangement = 0;
// SAFETY: valid processor; `arr` is writable.
ok(unsafe { p.getBusArrangement(dir as sv::BusDirection, index, &mut arr) }).then_some(arr)
}
fn bus_channels(&self, dir: u32, index: i32) -> u32 {
fn bus_channels(&self, dir: sv::BusDirections, index: i32) -> u32 {
if let Some(arr) = self.arrangement(dir, index) {
return arr.count_ones().min(MAX_BUS_CHANNELS);
}
@@ -1095,7 +1095,7 @@ impl Instance {
let (din, dout) = (sv::BusDirections_::kInput, sv::BusDirections_::kOutput);
let nin = self.bus_count(audio, din);
let nout = self.bus_count(audio, dout);
let current = |s: &Self, dir: u32, n: i32| -> Vec<sv::SpeakerArrangement> {
let current = |s: &Self, dir: sv::BusDirections, n: i32| -> Vec<sv::SpeakerArrangement> {
(0..n).map(|i| s.arrangement(dir, i).unwrap_or(sv::SpeakerArr::kStereo)).collect()
};
let want = if mono { sv::SpeakerArr::kMono } else { sv::SpeakerArr::kStereo };
@@ -1166,7 +1166,10 @@ impl Instance {
self.context.tempo = 120.0;
self.context.timeSigNumerator = 4;
self.context.timeSigDenominator = 4;
self.context.state = sv::ProcessContext_::StatesAndFlags_::kTempoValid | sv::ProcessContext_::StatesAndFlags_::kTimeSigValid;
// The flag constants are the C default enum type: i32 on Windows, u32 elsewhere.
#[allow(clippy::unnecessary_cast)]
let flags = (sv::ProcessContext_::StatesAndFlags_::kTempoValid | sv::ProcessContext_::StatesAndFlags_::kTimeSigValid) as u32;
self.context.state = flags;
self.host.latency_changed.store(false, Ordering::Relaxed);
Ok(layout)
}