Guide
Samples inspector
The persistent Samples tab in Studio's inspector pane, for browsing original recordings and tags, previewing at native tempo and key, inserting context-correct stem forms, and requesting PHALAR fits against the playing mix.
The Samples tab is a persistent browser inside Mora Studio’s inspector pane. This guide covers what it shows about your samples and stem library, how it previews and inserts a recording, and how it requests PHALAR recommendations against the playing mix.
Studio has two sample browsers:
- Samples is a tab of the inspector pane. It stays beside the editor, and its selection and recommendations are kept when you switch between the Inspector and Samples tabs.
- Sample Explorer is a modal overlay opened with Cmd+P. It is described in Samples and slicing.
Click Samples in the inspector’s title strip, press F6 to switch the pane between Inspector and Samples, or press Cmd+Option+P to show and focus Samples. Both keys leave zen so that the pane is visible. Keys on this page are shown with macOS modifiers.
Browsing does not start music or replace the playing score.
The result list combines the indexed sample bank with the current loops selection. Rows show original filenames. Imported content hashes and native sound-bank IDs remain internal identifiers; they are not the names of your recordings.
For the selected recording, the pane shows:
- its native tempo and key, and its coordinates: a variant number, or a family and variation when
loopsgroups recordings by family; - its length, genres, duration and audio format;
- the global matching target;
- its tags, its PHALAR score when it is a recommendation, and whether its embedding is current;
- a waveform, which is a measured min/max envelope decoded in the background. Its preview cursor estimates elapsed time; it is not an acknowledgement that sound reached the output.
The pane’s buttons are Preview native, Stop, Insert and Match mix.
Type to search. Search operators include bpm:130-150, tag:synth and key:Fm. In a tag query, spaces, underscores and hyphens agree, so a metadata tag West Coast can be searched as tag:west-coast. All requested tags must belong to the same recording.
The selected recording’s tags appear as chips above the waveform. Tags (N) opens the complete alphabetical tag inventory of the library, with counts; scroll to reach every entry. The counts cover the whole library, not only the current search or loops selection. Clicking a chip or an inventory entry filters the search only; it never changes loops or the playing source.
For tags you can use in a stem or part :filter, inspect the registered stem catalog from Lisp. These forms print metadata and never change playback:
(stem-tags)
(stem-tags :melody)
(stem-tags :melody
:scope :selection)By default stem-tags counts tags across the complete registered library, including before loops is called. :scope :selection limits the counts to the selected pool. The browser’s tag counts and these catalog counts deduplicate recordings differently, so the numbers can differ.
Navigation is silent: selecting a result loads its metadata and waveform without playing it, and stops any preview this pane started.
Space (outside search) or Preview native toggles a preview of the selected recording through Studio’s audition path. A preview plays the original recording at its native tempo and key; it is not a matched audition against the playing mix. Escape or Stop ends this pane’s preview without stopping other audio.
Unmodified letters go to the search field, so typing a sample name cannot trigger the inspector’s mute, solo or hush keys. Escape does not hush in this pane; use Cmd+Shift+. for panic while Samples has focus. The complete pane key table is in Keybindings and presentation.
Return or Insert writes the selected source at the editor cursor. Insertion never evaluates the code, and it stops this pane’s preview. What it writes depends on the source and on where the cursor is.
A registered loop from the current loops selection inserts as a keyword stem form, not as raw s playback of its sound bank. In an empty expression slot, insertion writes a complete form with the loop’s role and variant:
(stem :type :bass
:n 3)When loops groups recordings by family, :n selects the family and the form also names the recording within it:
(stem :type :bass
:n 3
:v 1)With the cursor on the selector of an existing stem or part call, insertion changes that call in place. A part stays a part, and its slices, matching, filters and routing are kept. On a progression such as :n "<0 1 1>", only the number under the cursor changes. In family mode the member is written as a scalar :v; a :v progression is never overwritten.
In this lane, putting the cursor on the 0 after :n and inserting another eligible bass changes only that number:
(d1! (>> (stem :type :bass
:n 0
:p "0 1 2 3"
:match t
:filter '(:synth))
(orbit 1)))Insertion is refused, with a notice in the pane, rather than substituting another source when:
- the selected role does not match the call, such as a melody source on a
:bassselector; - the source is not eligible under the call’s
:filter; - the call’s
:filteris computed rather than literal, or the call names its own:library; - the loop is registered but outside the current
loopsselection; it is never inserted as rawsplayback; - the cursor is not on a
stemorpartselector and is in a string, comment or quoted data, which are not expression slots for a stem form.
An ordinary indexed sample, such as a one-shot, keeps s insertion: a bare name inside (s ...) or a mini-notation string, and a complete (s "name") form elsewhere.
Match mix, or Shift+Return in the pane, requests PHALAR recommendations for the stem or part call at the editor cursor. The request uses that call’s role and literal :filter; in an empty expression slot it uses the role chosen with Left and Right. The pane stops its own preview first, so an audition is not added to the query.
Mora captures four seconds of the already-running analysis input and ranks eligible candidates against that mixture. The ranked candidates replace the result list, each with its PHALAR score; select and preview them as usual. Return accepts the selected candidate: Mora checks that the exact ranked recording is still eligible at its coordinates, never substituting another family member, and writes them into the call (:n, plus :v in family mode) without evaluating. Evaluate the edit yourself with Cmd+Return.
Suppose the drum lane of this stack is already playing and the bass lane has just been added to the source, unevaluated:
(bpm 140)
(key "Fm")
(d1! (stem-stack (>> (stem :type :drums
:n 0
:match :tempo)
(cut 1)
(orbit 0))
(>> (stem :type :bass
:n 0
:match t)
(cut 2)
(orbit 1))))Put the editor cursor on the bass :n number and press Match mix. After accepting a candidate, evaluate the form: the unchanged drum lane keeps playing and the added bass lane joins it. See Stems and sample libraries for stem-stack.
The query is a measured capture of the whole analysis input, with the limits described in PHALAR stem pairing. A ranking becomes stale when the playing mix (channel patterns or mute state), the source pool, the tempo or key, or the target form changes; unrelated edits do not affect it. Unlike the inline editor request, a pane request does not wait for a running stem-stack crossfade to settle, so request after a handoff has finished. There is one current request, shared by this pane, the inline editor and the REPL; a later request cancels the earlier one.
Recommendations do not need this pane. In the editor, including in zen, Shift+Return at a typed stem or part selector shows a status line and up to five ranked rows under the form, and Option+Shift+Return accepts one. Because F6 and Cmd+Option+P leave zen, use the editor workflow to stay there. See Compose in Zen without opening Samples; the keys are also listed in Keybindings and presentation.
Source references
Repository-relative paths in the Mora source where these mechanisms are implemented.
-
src/samples-studio/sample-browser.lisp -
src/samples-studio/insertion.lisp -
src/samples-studio/sample-waveform.lisp -
src/samples-studio/stem-suggestions.lisp -
src/studio/commands-sample-browser.lisp -
src/studio/render-sample-browser.lisp -
src/mini/loop-tag-filter.lisp