VST and JUCE screenshot update.

This commit is contained in:
Johannes Findeisen 2026-11-06 18:32:25 +01:00
commit cda05294f5
9 changed files with 82 additions and 1 deletions

View file

@ -20,6 +20,16 @@ Synthesis is the real xtc **Soft Keys** implementation, called through
uses a separate PIC build of the C archive with JACK/FLTK disabled; the installed
application and existing build directories are not modified.
## Screenshots
![Actual JUCE Soft Keys editor](../screenshots/juce-soft-keys-editor.png)
The native editor rendered at 2× scale, with effects enabled and -6 dB output;
no audio device is opened for this capture. Also see
[the JUCE VST3 in xtc's instrument chooser](../screenshots/juce-vst3-instrument.png)
and [capture commands and context](../screenshots/README.md#steinberg-and-juce-sdk-integration-phases-106107).
The editor image is separate from xtc's FLTK host, which does not embed it.
## Licensing and dependency impact
The inspected JUCE checkout is 9.0.4, revision

View file

@ -28,6 +28,17 @@ check without adding a C++ runtime or network dependency to libxtc.
See [the example instructions](../examples/steinberg/README.md) for SDK versions,
build commands, validation and ASIO diagnostics.
## Screenshots
![SDK Half Gain loaded in xtc's insert graph](../screenshots/steinberg-sdk-track-insert.png)
The actual SDK-built effect in xtc's host. See its
[identity dialog](../screenshots/steinberg-sdk-identity.png), the
[SDK Sine instrument chooser](../screenshots/steinberg-sdk-instrument.png) and
[capture commands](../screenshots/README.md#steinberg-and-juce-sdk-integration-phases-106107).
These examples have no custom editor; the screenshots show xtc's host interface
with playback stopped. They do not demonstrate ASIO hardware operation.
## ASIO and VST2 scope
ASIO is native driver I/O, separate from VST plugin hosting. The optional Windows

View file

@ -6,7 +6,8 @@ VST3 insert chains.
The gallery captures are actual rendered application windows and menus on a
1440 × 960 virtual X11 screen. The promotional `overview.png` is a designed
composite of cropped, proportionally scaled captures with added headings; the
other captures have no mockups, compositing or image edits.
other captures have no mockups, compositing or image edits. The JUCE editor
image below uses its separately documented direct component-rendering path.
![xtc promotional overview: arrangement, piano roll, mixer and modular effects](overview.png)
@ -29,6 +30,52 @@ APIs and GUI history/preparation paths. Original projects, media and user
configuration are not overwritten. Black margins are the virtual desktop;
floating views show the actual detached windows together.
## Steinberg and JUCE SDK integration (Phases 106–107)
Captured on 2026-11-06 from the built SDK examples, with no fabricated UI.
![JUCE Soft Keys native editor](juce-soft-keys-editor.png)
The 1560 × 980 image is rendered directly from the actual JUCE editor, with
filter/reverb enabled and output at -6 dB. It shows the parameter controls,
preset buttons and on-screen keyboard without opening an audio device.
![Steinberg SDK Half Gain loaded in xtc's track insert graph](steinberg-sdk-track-insert.png)
- [Steinberg SDK effect identity and current adapter limits](steinberg-sdk-identity.png)
- [Steinberg SDK Sine instrument discovered by xtc](steinberg-sdk-instrument.png)
- [JUCE VST3 instrument discovered by xtc](juce-vst3-instrument.png)
The four 1440 × 960 FLTK captures load the actual SDK-built VST3 bundles.
The Steinberg examples have no custom editor; xtc displays its host graph and
metadata. The JUCE native editor above is rendered separately: xtc's C host
currently uses plugin defaults and does not embed native VST3 editors or expose
their controller parameters. Unsupported class counts in the choosers include
non-instrument/controller classes; they do not mean the selected synth failed.
The host is stopped and meters are idle. No ASIO interface is shown or implied.
See [Steinberg integration](../docs/STEINBERG.md) and
[JUCE integration](../docs/JUCE.md).
After building both SDK examples, reproduce only these host captures with:
```sh
make build/capture_screenshots
XTC_CAPTURE_STEINBERG_BUNDLE="$PWD/build/steinberg-sdk/VST3/Release/xtc-sdk-examples.vst3" \
XTC_CAPTURE_JUCE_BUNDLE="$PWD/build/juce/XtcJuceSynth_artefacts/Release/VST3/xtc JUCE Synth.vst3" \
xvfb-run -a -s '-screen 0 1440x960x24' \
./build/capture_screenshots "$PWD/screenshots"
```
This uses the existing capture prerequisites and temporary project isolation;
it preserves the other gallery images, including `overview.png`.
To reproduce the JUCE editor image, remove or move the existing destination
first (the command refuses overwrites):
```sh
xvfb-run -a ./build/juce/xtc-juce-render_artefacts/Release/xtc-juce-render \
--snapshot "$PWD/screenshots/juce-soft-keys-editor.png"
```
## MIDI devices, defaults and file exchange (Phases 100–105)
- [Open MIDI input dropdown with real host devices](preferences-midi-input-devices.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View file

@ -105,6 +105,19 @@ int main(int argc,char **argv) {
check(s->make_chord({4,7}));check(s->strum_chords(30,false));piano_view();capture("creative-strum-result");
window.do_callback();std::puts("Creative workflow captures completed.");return 0;
}
if(const char *sdk=std::getenv("XTC_CAPTURE_STEINBERG_BUNDLE")) {
const char *juce=std::getenv("XTC_CAPTURE_JUCE_BUNDLE");
if(!juce || !std::filesystem::exists(sdk) || !std::filesystem::exists(juce))
throw std::runtime_error("Supply existing Steinberg and JUCE bundles for SDK captures");
reset();
check(window.add_track_effect(0,sdk,0));
auto *inserts=window.track_inserts();inserts->select_track(0);tab("Track inserts");
capture("steinberg-sdk-track-insert");
dialog("steinberg-sdk-identity",[&]{check(inserts->inspect_slot());});
dialog("steinberg-sdk-instrument",[&]{unsigned int index=0;xtc_choose_plugin(sdk,48000,index,true);});
dialog("juce-vst3-instrument",[&]{unsigned int index=0;xtc_choose_plugin(juce,48000,index,true);});
window.do_callback();std::puts("Real Steinberg/JUCE SDK host captures completed.");return 0;
}
if(std::getenv("XTC_CAPTURE_HOST_VST3")) {
reset();capture("compact-workspace");
auto *create=dynamic_cast<Fl_Menu_Button *>(named(window,"Create"));if(!create)throw std::runtime_error("Missing Create dropdown");