Check and Windows preview / check (patina) (push) Successful in 2m20s
Check and Windows preview / check (rivet) (push) Successful in 1m38s
Check and Windows preview / previews (push) Successful in 1m6s
Check and Windows preview / windows (push) Successful in 1m50s
Independent plugin release / publish (push) Successful in 8s
Independent plugin release / plan (push) Successful in 7s
Independent plugin release / build (push) Successful in 2m21s
115 lines
7.0 KiB
Markdown
115 lines
7.0 KiB
Markdown
# FL Studio acceptance test (Windows)
|
||
|
||
Record the FL Studio version, Windows version, plugin build revision, sample
|
||
rate, and audio buffer size with each test. These steps have not yet been run
|
||
against FL Studio in this environment.
|
||
|
||
## Install
|
||
|
||
1. Build with `python scripts/build-plugin.py` on Windows, or obtain a matching
|
||
Windows artifact from the configured CI workflow.
|
||
2. Copy `Rivet.clap` to
|
||
`C:\Program Files\Common Files\CLAP`, or a CLAP location scanned by your
|
||
FL Studio version. Close existing instances before replacing the binary.
|
||
3. In FL Studio's Plugin Manager, rescan plugins and locate Rivet.
|
||
Use an FL Studio version with CLAP support. Insert it as a generator.
|
||
|
||
## Creative workflow
|
||
|
||
- Open and close the editor repeatedly; verify keyboard input and controls work
|
||
at 100%, 150%, and 200% Windows display scaling, with no clipped content.
|
||
- Load the demo, generate three continuations, and audition each. The opening
|
||
must match the source; candidates should be audibly related and differ later.
|
||
- Lock a source note, regenerate, and verify pitch, velocity, start, and duration
|
||
are unchanged at each repeated position. Locks may override register/scale.
|
||
- Try four/eight bars, all scales, different seeds, and rhythm preservation.
|
||
- Accept candidate A; accept B; undo/redo. Regenerate with a different seed and
|
||
confirm accepted work remains available.
|
||
- Export selected and accepted MIDI separately. Import each into the piano roll
|
||
of an existing synth and compare note timing, duration, velocity, and length.
|
||
|
||
## Import and files
|
||
|
||
- Import a monophonic MIDI file exported from FL Studio at 96/480/960 PPQ.
|
||
- Import multitrack MIDI and select the intended note track.
|
||
- Verify useful errors for chords/overlaps, motifs longer than two bars,
|
||
unsupported meters, malformed files, and inaccessible paths.
|
||
- Cancel native dialogs. Try Unicode paths and the manual file-path controls.
|
||
- Export to an existing filename; confirm it is refused and the file is intact.
|
||
|
||
## Playback and state
|
||
|
||
- Confirm opening the editor and loading a project are silent until Preview.
|
||
- Preview, press Stop, and switch phrases rapidly; no stuck or overlapping voice.
|
||
- Preview while FL Studio's transport runs, then stop the host; audition stops.
|
||
- Enable host tempo following and change project tempo. Disable it and verify
|
||
local tempo controls audition speed. Host start must never trigger audition.
|
||
- At 44.1/48/96 kHz and several buffer sizes, confirm stable timing and no clicks
|
||
at ordinary note boundaries, dropouts, or non-finite output.
|
||
- Save a project containing locks, candidates, an accepted result, and history.
|
||
Reopen it, confirm all state is restored and preview remains stopped.
|
||
- Save/load a JSON session; reject unsupported versions without changing the
|
||
current session. Test multiple plugin instances for independent state.
|
||
|
||
Use MIDI output mode to audition production synths, or export MIDI into the
|
||
piano roll. Native MIDI drag-out is outside this release.
|
||
|
||
## Version 0.2: contextual audition and composition
|
||
|
||
- Select MIDI output in Rivet. Where FL Studio exposes wrapper MIDI
|
||
ports, set its Output port to an unused port and the target synth's Input port
|
||
to the same value; receive notes on channel 1. These are FL Studio's documented
|
||
[wrapper input/output port controls](https://www.image-line.com/fl-studio-learning/fl-studio-online-manual/html/plugins/wrapper.htm).
|
||
This specific CLAP routing path is still unverified here; check it in the
|
||
installed FL Studio version. Keep the MIDI-file export path as fallback.
|
||
- Audition through the actual production patch with the surrounding project loop.
|
||
Host tempo follows BPM only; start audition at the desired point manually.
|
||
Switching a running audition waits for the next local two-bar boundary or end.
|
||
- Test Loop on/off, same-pitch repeated notes, changing Internal/MIDI mode while
|
||
playing, rapid queued selections, Stop before a queued switch, host transport
|
||
stop, and project reload. There must be no hanging external notes.
|
||
- Import polyphonic harmony, verify gaps/changes/repetition, then compare open
|
||
and settled endings. Context is a pitch guide and does not itself emit chords.
|
||
- Test whole-note, pitch-only, and rhythm-only locks. Keep groove must retain
|
||
onset/duration; keep contour must prevent direction reversals except that a
|
||
register limit can flatten a step. Locks override other targets.
|
||
- Pin bars 3–4 from proposal A, select B, and preview/export the combined phrase.
|
||
Regenerate with another seed: pinned notes must remain exact. Change the motif
|
||
or phrase length: pins clear. Restore a version-1 session and a version-2
|
||
project with harmony, pins, and kept history.
|
||
- Evaluate artistic usefulness through the real patch: can the producer choose
|
||
a meaningful alternative, retain just its useful section, and make it his own?
|
||
Automated diversity metrics do not replace that evaluation.
|
||
|
||
## Version 0.3: gestures, branches, roles, and controllers
|
||
|
||
- Save a named source gesture and a developed two-bar gesture. Export the library
|
||
and import it into another instance: notes, locks, and performance choices
|
||
should survive; recalling keeps the destination harmony.
|
||
- Save a branch, apply Subtract to bars 3–4, restore the parent, and try Longer
|
||
gates instead. Both children should remain available. Restore each after
|
||
saving/reopening the host project. Remove leaves without losing their parent.
|
||
- Try each role mode. Route channels 1 and 2 to separate patch parts (or choose
|
||
other distinct channels). Verify every original note belongs to one role.
|
||
A host configuration must preserve channels; MIDI file export provides named
|
||
role tracks when live routing cannot do this.
|
||
- Map CC20/21 explicitly to suitable macros in the target synths. Enable each
|
||
curve, edit points, compare Rise/Arch/Pulse, and verify the actual mapped
|
||
sound follows it. A curve describes controller values, not a guaranteed
|
||
timbral or emotional result. Imported MIDI controller automation is not read.
|
||
- While MIDI plays, stop, replace the profile/controller mapping, toggle audition
|
||
mode, and reload the project. Old notes must release and old controllers must
|
||
return to their specified stop values. Opening a project remains silent.
|
||
- Estimate patch attack/release by ear. Compare 0 ms and 40–100 ms attack,
|
||
including a same-pitch loop seam and a queued selection. Warmup occurs before
|
||
the local first beat. Re-audition after BPM changes.
|
||
- Export normally and confirm notes retain musical onset positions. Enable
|
||
compensated export: confirm one bar of lead-in, early MIDI triggers, separate
|
||
named tracks, and controller reset events. Compare through the same patch.
|
||
- Locks protect musical note attributes; attack/release compensation adjusts
|
||
MIDI trigger scheduling for the patch. Judge the audible onset against the
|
||
surrounding groove rather than expecting every trigger to stay on the grid.
|
||
- Evaluate whether a saved gesture still feels like the same idea with another
|
||
patch, and whether branching makes it easy to retain useful exceptions.
|
||
The internal voices and the automated checks cannot establish artistic quality.
|