ci: add Logic AU input regression smoke and clean vendor-fork workflows - #4
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3cd1306fa2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| voice_id, | ||
| channel: group as u8, | ||
| note, | ||
| velocity: params.velocity / 127.0, |
There was a problem hiding this comment.
Treat StartNote velocity as normalized
When a host uses the extended MusicDeviceStartNote API, MusicDeviceNoteParams::mVelocity is already normalized to [0, 1]; dividing it by 127 makes a full-velocity note arrive at the plugin as approximately 0.0079, producing nearly silent instruments. The validation above likewise accepts the wrong [0, 127] range, and the smoke host masks this by sending the nonstandard value 96.0; validate against 1.0 and forward the value directly.
Useful? React with 👍 / 👎.
| .map(|layout| { | ||
| u32::from(layout.main_input_channels.is_some()) | ||
| + layout.aux_input_ports.len() as u32 | ||
| }) | ||
| .unwrap_or(0), |
There was a problem hiding this comment.
Initialize bus topology from the plugin's default layout
For a mono-only, surround-only, or otherwise non-stereo plugin, the wrapper still constructs n_channels as 2, so this lookup finds no layout and reports zero input elements before the host has had a chance to negotiate a format. Hosts commonly query the element count and current stream format before setting either one; such units therefore appear to have no input bus (and StreamFormat property info is also rejected) despite advertising a valid layout. Seed the initial channel count/topology from the first AUDIO_IO_LAYOUTS entry rather than assuming stereo.
Useful? React with 👍 / 👎.
Summary
AudioBufferList.mDatareplacementMakeConnectionRoot cause covered
The historical Logic silence regression could return
noErrwhile producing silence when the wrapper dropped the validAudioTimeStampor read its scratch buffers after the host replacedmDatapointers with zero-copy source buffers. The new host reproduces both behaviors against the bundled Gain AU and requires non-silent output.Validation
scripts/au_logic_input_smoke.sh(macOS): passed withcallback_status=0,render_status=0,rendered_samples=16384,silent=falseswiftc -O scripts/au_logic_input_smoke/LogicPullHost.swiftbash -n scripts/au_logic_input_smoke.shgit diff --checkThe branch still contains no changes to the pre-existing untracked
.DS_Store,.openswarm/, oropenswarm.jsonartifacts.