Vendor helgoboss/helgobox (ReaLearn) as basis for custom UI fork

Stripped upstream git history; starting point for replacing the native
SWELL/Win32 mapping UI with something more suited to bulk editing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Paul Lipscomb
2026-07-15 17:38:29 -04:00
parent 583ed77a67
commit e58f06d9fa
2232 changed files with 685575 additions and 1 deletions
@@ -0,0 +1,33 @@
= Adjust clips
Now that you know how to create and play clips, you might want change them a bit.
== Editing the clip source
If you are dealing with MIDI clips, you can easily edit the clip xref:key-concepts.adoc#source[]:
. Double-click the xref:user-interface/matrix-area.adoc#slot-cell-content[] area of the desired slot. This should open the clip source in REAPER's MIDI editor.
. Make changes in the MIDI editor. Any change should be applied right away if the clip is currently playing.
. You can also use the playback controls of REAPER's MIDI editor or arrange view. As soon as you use them, the clip will stop playing in Playtime and you can play it within REAPER instead. As long as the MIDI editor is open, the clip is mirrored by a regular REAPER MIDI item positioned on the xref:key-concepts.adoc#column-track[].
. Close the MIDI editor.
Any change can be undone using Playtime's xref:helgobox::app/user-interface/title-bar.adoc#title-bar-undo[] function.
[[feature-clip-settings]]
== Adjusting clip properties
Each clip has certain properties in addition to its actual source, which you can adjust.
=== 1. Select the slot
Select the desired slot by clicking the xref:user-interface/matrix-area.adoc#slot-cell-content[] area.
This will show the properties of the clip within that slot in the xref:user-interface/inspector/clip.adoc[] on the right side.
=== 2. Adjust clip properties
Now go ahead and check what properties xref:user-interface/inspector/clip.adoc[are available] in the inspector.
We will just take the example of the *pitch* property. Find the xref:user-interface/inspector/clip.adoc#inspector-clip-pitch[] setting, move your mouse over the number *0.00* semitones and use your mouse wheel or any other xref:helgobox::app/user-interface/general.adoc#drag-field[] interaction to change the pitch. For example, to *12.00* semitones, which corresponds to one octave.
The new pitch will be applied right away or according to the xref:user-interface/inspector/matrix/playback.adoc#inspector-matrix-start-timing[matrix start timing].
@@ -0,0 +1,105 @@
= Create an arrangement
Maybe you want to use Playtime for live improvisation only, in which case the basic usage guide would end here. But chances are, you want to go further than that and turn your Playtime matrix into a proper REAPER arrangement at some point.
This is also important if you xref:advanced-usage-scenarios/control-with-items.adoc[control Playtime with items] or xref:advanced-usage-scenarios/meta-clips.adoc[use meta clips] and your goal is to include the output of Playtime in the final rendering. Unlike traditional instrument plug-ins, Playtime doesn't participate in rendering! footnote:direct-output[It's possible that this will be added in the future by introducing a new mode of operation.] Which is why you first need to turn the output into a conventional REAPER arrangement.
There are two ways of building an arrangement.
[[feature-export-to-arrangement]]
== Export matrix content
You can export parts of the matrix to the arrangement directly:
=== 1. Make a time selection (optional)
You can influence the start and length of the export on the timeline by creating a time selection on the REAPER timeline. If you don't do that, the length will correspond to the longest exported clip.
=== 2. Export the desired content
* If you want to export all clips in the matrix, right-click the xref:user-interface/matrix-area.adoc#matrix-cell[] and choose xref:user-interface/menus/matrix-menu.adoc#matrix-export-to-arrangement[].
* If you want to export all clips in a particular column, right-click the corresponding xref:user-interface/matrix-area.adoc#column-cell[] and choose xref:user-interface/menus/column-menu.adoc#column-export-to-arrangement[].
* If you want to export all clips in a particular row, right-click the corresponding xref:user-interface/matrix-area.adoc#row-cell[] and choose xref:user-interface/menus/row-menu.adoc#row-export-to-arrangement[].
* If you want to export the primary clip of a slot, right-click the corresponding xref:user-interface/matrix-area.adoc#slot-cell[] and choose xref:user-interface/menus/slot-menu.adoc#slot-export-primary-clip-to-arrangement[].
.Quickly export different parts of your song
[TIP]
====
Maybe you have named the matrix rows so that they represent different parts of your song, such as _Verse_, _Chorus_, _Bridge_ and _Solo_. Now you want to export those parts like this:
* 2x Verse
* 1x Chorus
* 1x Bridge
* 1x Verse
* 1x Solo
* 2x Chorus
Making such an export can be done very quickly just by using keyboard keys:
. Select the _Verse_ row cell
. Press key kbd:[A] 2 times (the shortcut for exporting the selected cell to the arrangement)
. Select the _Chorus_ row cell
. Press key kbd:[A] 1 time
. ...
This works nicely because after exporting a row, Playtime automatically moves the play cursor or the complete time selection to the right.
====
[[feature-arrangement]]
== Record and write a sequence
Another way to export an arrangement is to record a Playtime performance and write the result to the arrangement. This is done using Playtime's built-in xref:user-interface/toolbar.adoc#toolbar-matrix-sequencer[]:
=== 1. Start recording a new matrix sequence
Press the xref:user-interface/toolbar.adoc#toolbar-record-matrix-sequence[] button in the xref:user-interface/toolbar.adoc#toolbar-matrix-sequencer[] of the xref:user-interface/toolbar.adoc[].
This will always create a new sequence and never overwrite an existing one, so you can press this anytime.
=== 2. Perform your song within Playtime
Playtime will record all play and stop interactions with your matrix.
=== 3. Stop recording the sequence
Press the xref:user-interface/toolbar.adoc#toolbar-record-matrix-sequence[] button again to stop recording.
=== 4. Play sequence (optional)
If you want, you can play the sequence directly within Playtime by pressing the xref:user-interface/toolbar.adoc#toolbar-play-stop-matrix-sequence[].
=== 5. Write the sequence to the arrangement
If you are satisfied, you can write the sequence to the REAPER tracks by pressing xref:user-interface/toolbar.adoc#toolbar-write-to-arrangement[].
== The translation from clips to items
What happens in both cases is that Playtime translates its xref:key-concepts.adoc#clip[clips] into REAPER items.
Ideally, the items - when played back by REAPER - should sound exactly as the clips in Playtime. If you detect deviations, please open a bug report in the link:https://github.com/helgoboss/helgobox/issues[Helgobox issue tracker].
[TIP]
====
The resulting items are played back by REAPER alone. Those are conventional REAPER items, there is no connection to Playtime anymore!
That also means that if you share the REAPER project file with other people, they won't need a Playtime installation to play back the arrangement.
====
.Deep-dive: Translation from clips to items
****
When translating clips to items, Playtime may set track, item or take properties.
Here are some noteworthy translations:
Free item positioning::
Playtime enables free item positioning for a track as soon as it detects that some items written to the same track would overlap in time. This usually happens when two clips play at the same time on the same track. Not enabling it would lead to a hard-to-see overlap.
Time base::
If the clip is configured to xref:user-interface/inspector/clip.adoc#inspector-clip-sync-to-project-tempo[synchronize to the project tempo], it chooses item time base *Beats (auto-stretch at tempo changes)*, because this reflects how Playtime itself would behave when changing the tempo. With this mode, REAPER may automatically create stretch markers.
+
If the clip is configured to *not* synchronize to the project tempo, it chooses item timebase *Time* (if start timing is xref:user-interface/inspector/clip.adoc#inspector-clip-start-timing-immediately[]) or *Beats (position only)* (the the start timing is quantized), because those settings resemble Playtime's clip playing behavior best.
Play rate::
For audio clips, the play rate is always set to the ratio between the clip's xref:user-interface/inspector/clip.adoc#inspector-clip-tempo[] and the project tempo.
****
@@ -0,0 +1,163 @@
= Create clips
Playtime is all about xref:key-concepts.adoc#clip[clips], small snippets of audio or MIDI that you can freely play together with other clips to compose a larger musical piece.
Before we can play a clip, we need to create one. Let's do this!
== 1. Create a column
At first, we need to make some space for the clip within the xref:key-concepts.adoc#matrix[].
Press the xref:user-interface/matrix-area.adoc#matrix-add-column[] button on the right of xref:user-interface/matrix-area.adoc#matrix-cell-settings[] to add a new xref:key-concepts.adoc#column[].
You should then see a new column named "Column 1" with empty slots that can take our new clip.
[TIP]
.Column track
====
This didn't just create a new column, it also created a new REAPER track with the same name, the so-called xref:key-concepts.adoc#column-track[]. Playtime will play clips within this column through that track.
====
IMPORTANT: Exactly as in REAPER, Playtime columns don't have a type. They can always play both, audio and MIDI clips. The xref:user-interface/track-area.adoc#track-panel-input-type-indicator[] looks a bit as if the column would have a special type, but it really just reflects the input currently selected for recording clips.
.Alternatives
****
Use matrix templates::
Instead of creating the column manually, you could also have started with a template by pressing xref:user-interface/matrix-area.adoc#matrix-mixed-template-button[] in the xref:user-interface/matrix-area.adoc#matrix-template-panel[], for example.
Import existing tracks::
Maybe you have existing tracks already that you want to use as xref:key-concepts.adoc#column-track[column tracks]. In that case, select them, right-click xref:user-interface/matrix-area.adoc#matrix-cell-settings[] and choose xref:user-interface/menus/matrix-menu.adoc#matrix-insert-column-for-each-selected-track[].
****
== 2. Create a clip
There are many ways to create a new clip. Let's explore the most common ones.
[[feature-import]]
=== Import an existing audio or MIDI file
Maybe you have an existing audio or MIDI file somewhere on your computer. Simply drag it from your favorite file manager or from REAPER's media explorer onto one of the empty slots! See xref:user-interface/matrix-area.adoc#slot-drag-and-drop[] for details.
.Alternatives
****
Use file picker::
You can pick the file using Playtime's own file picker by right-clicking an empty slot and pressing xref:user-interface/menus/slot-menu.adoc#slot-import-files[].
****
[[import-item]]
=== Import an existing REAPER item
Maybe you have an existing item on a REAPER track that you want to turn into a Playtime clip.
. Select the item
. Right-click an empty slot and choose xref:user-interface/menus/slot-menu.adoc#slot-import-selected-item[]
This does more than just importing the audio file or MIDI data from the item: It also translates many of the item's properties, such as the item cut and pitch, to Playtime clip properties.
[[create-empty-midi-clip]]
=== Create an empty MIDI clip
If you want to start entering MIDI notes from scratch, simply double-click the slot. This will create an empty MIDI clip with the length of 1 bar.
[[feature-record]]
=== Record a clip
Playtime offers plenty of ways to record clips directly. The most common one is to record a xref:key-concepts.adoc#loop[] of rhythmic material while Playtime is playing.
In this example, we are going to record an audio loop to a click:
==== 1. Start playback
Start playback in Playtime by pressing the xref:user-interface/toolbar.adoc#toolbar-start-stop-playback[] button in the transport section of the toolbar or simply by pressing the kbd:[Space] key. The xref:user-interface/toolbar.adoc#toolbar-visual-metronome[] in the middle of the Playtime text logo should start running.
==== 2. Turn on metronome
Turn on the metronome by pressing the xref:user-interface/toolbar.adoc#toolbar-metronome[] button in the tempo section of the toolbar. You should now hear the metronome clicking.
[[choose-track-input]]
==== 3. Choose track input
Press xref:user-interface/track-area.adoc#track-panel-input[] in the track panel below the column in order to choose the audio input channel(s) from which you want to record.
TIP: If you don't see the input section, increase the height of the track panel a bit by grabbing the resize handle above the track panels and dragging it up.
==== 4. Arm track
Press the round xref:user-interface/track-area.adoc#track-panel-arm[] button. It should turn red and record buttons should appear in all empty slots of that column.
CAUTION: If you record from a microphone and don't wear a headphone, you probably should turn off input monitoring by pressing xref:user-interface/track-area.adoc#track-panel-input-monitoring-off[]. Otherwise, you might hear loud feedback.
==== 5. Get ready
At this point, you can try making some noise. Do you see something in the xref:user-interface/track-area.adoc#track-panel-volume[meter]? Good! Now, get ready for recording!
==== 6. Start recording
Shortly after the start of a bar, press the xref:user-interface/matrix-area.adoc#slot-cell-record[] button in an empty slot. You should see a count-down which will reach zero exactly when the next bar starts. The record button will turn red and Playtime will record whatever you play.
[[stop-recording]]
==== 7. Stop recording
Press the red xref:user-interface/matrix-area.adoc#slot-cell-record[] button again to indicate that you want to stop recording. The button will start to blink and turn into a xref:user-interface/matrix-area.adoc#slot-cell-trigger[play button] as soon as the next bar starts. Playtime will play back your recording repeatedly.
==== 8. Be happy
Congratulations, you have recorded your first xref:key-concepts.adoc#loop[]. If you didn't get the timing right, don't worry. After some attempts, you will get the hang of it. Plus, Playtime offers quite a few ways to make recording clips less stressful.
.Variations
****
There are many variations of above recording procedure. Let's look at a few aspects that you can do differently:
Record MIDI instead of audio::
If you want to record MIDI, choose a MIDI device in step <<choose-track-input>>. You probably also want to put an instrument on the FX chain of the xref:key-concepts.adoc#column-track[] by pressing the xref:user-interface/track-area.adoc#track-panel-fx-chain[] button, or route the track to an external MIDI synthesizer by pressing the xref:user-interface/track-area.adoc#track-panel-routing[] button.
Record a one-shot instead of a loop::
If you want to record material that should play just once without being repeated, open the xref:user-interface/inspector/matrix/recording.adoc[] and uncheck the xref:user-interface/inspector/matrix/recording.adoc#inspector-matrix-recording-looped[] checkbox. If you do that, the recorded material will *not* immediately be played back after recording.
Stop recording automatically::
Find it too stressful having to press the stop button *while* you are playing? Often we know in advance how many beats or bars we want to record. You can tell Playtime by opening the xref:user-interface/inspector/matrix/recording.adoc[], enabling xref:user-interface/inspector/matrix/recording.adoc#inspector-matrix-limit-recording-length[] and choosing the desired xref:user-interface/inspector/matrix/recording.adoc#inspector-matrix-recording-length[]. After that, Playtime will stop clip recordings automatically.
Wait longer until the recording starts::
Find it too stressful having to grab your instrument within the short time period after pressing the record button? One way to get more time is to adjust the xref:key-concepts.adoc#clip-start-timing[]. For example, you could set xref:user-interface/inspector/matrix/playback.adoc#inspector-matrix-start-timing[] to *4 bars* instead of just *1 bar*. Or you do it just for one specific column.
+
However, this approach has downsides. It will also have an effect on playing clips. Plus, you might have to wait quite long to get your turn. The next variation might suit you better.
Record in stopped state with count-in::
There's another way to give you more time to prepare. So far we have always recorded while Playtime was already playing, but we can also start recording while it's still stopped. That gives us the possibility of an arbitrarily long count-in phase. See xref:further-concepts/matrix.adoc#count-in-recording[].
[[record-via-foot-switch]] Record via foot switch::
One more way to give you more time is to start recording with your foot instead of your hand. For this, Playtime offers the possibility to start recording clips via MIDI. In addition, it offers the convenient xref:user-interface/toolbar.adoc#toolbar-smart-record[] toolbar button, which makes it possible to use just one button - or foot switch - to record into the next non-occupied slot.
+
. Press the xref:user-interface/toolbar.adoc#toolbar-show-hide-midi-triggers[] button in the toolbar. This should reveal a small MIDI trigger area on the right sight of the xref:user-interface/toolbar.adoc#toolbar-smart-record[] button.
. Press that MIDI trigger area. It should turn red.
. Press the MIDI foot switch connected to your MIDI keyboard. Playtime should pick it up. If not, see xref:user-interface/toolbar.adoc#midi-trigger-troubleshooting[].
. Press the MIDI foot switch to start recording.
. Press it again to stop recording.
+
TIP: You can hide the MIDI trigger areas at any time by pressing the xref:user-interface/toolbar.adoc#toolbar-show-hide-midi-triggers[] button again. They will remain active!
Record with tempo detection and without click::
All the approaches that we have talked about so far require a metronome or another clip to provide a rhythmical reference. However, imagine you want to do a looper-style live improvisation, without metronome. In that case, you can do a xref:further-concepts/matrix.adoc#feature-tempo-detection[].
Record non-rhythmic material::
Playtime suites itself very much for rhythmic material. But what if you want to record something that's tempo-independent? In that case, you probably want two things:
* Recording should start immediately, no need to wait until the next bar.
* Playtime shouldn't time-stretch your clip later on when changing the project playback tempo.
+
--
You can simply achieve that by setting the xref:user-interface/inspector/matrix/playback.adoc#inspector-matrix-start-timing[] in the xref:user-interface/inspector/matrix/playback.adoc[] to xref:user-interface/inspector/clip.adoc#inspector-clip-start-timing-immediately[]. If you want to use this behavior just for a specific column, you can xref:user-interface/inspector/column/playback.adoc#inspector-column-start-timing[override this setting on column level] instead!
--
MIDI overdub::
Maybe you already have a MIDI clip and want to slowly add some notes by playing them on your keyboard:
+
. Select the desired (looped) MIDI clip by clicking the xref:user-interface/matrix-area.adoc#slot-cell-content[] area.
. In the xref:user-interface/inspector/clip.adoc[] on the right side, press the xref:user-interface/inspector/clip.adoc#inspector-clip-overdub[] button. The clip should start playing repeatedly.
. Play some MIDI notes on your music keyboard. They will be recorded into the playing clip. You will hear them on the next repetition.
. When you are done, press the same button again.
TIP: Many of the above aspects can be combined, which gives you a maximum of flexibility.
****
@@ -0,0 +1,28 @@
= Use grid controllers
[[feature-grid]]
.Grid controllers are optional!
TIP: You don't need a xref:key-concepts.adoc#grid-controller[] to use Playtime! However, using one adds a tactile dimension to the clip-launching experience, making Playtime feel more like a distinct musical instrument. Its a fun way to enhance interaction and creativity.
If your xref:key-concepts.adoc#grid-controller[] is on the xref:supported-controllers.adoc[list of supported devices], here's how you set it up:
. Ensure that Playtime is running and you see its xref:user-interface.adoc[].
. If the device is already connected to the USB port, **disconnect it** and wait a few seconds!
. **Connect** the device to the USB port.
. After waiting for a few seconds, Playtime should show a green success notice at the bottom of the screen.
After that, the device should visually reflect the contents of the Playtime xref:key-concepts.adoc#matrix[] and you should be able to control the matrix with it.
In addition, the device should now appear in the xref:realearn:ROOT:user-interface/settings-dialog.adoc#controllers[ReaLearn controllers] section of the xref:helgobox::app/user-interface/settings-dialog.adoc[]. This is also the place where you can manually set up the device in case it was not auto-detected.
== Troubleshooting
If the device is not detected, please proceed as follows:
* Execute REAPER action xref:realearn::reaper-actions.adoc#auto-detect-controllers-with-logging[] and copy the output to the clipboard.
* If the controller is not in the xref:supported-controllers.adoc[list of supported devices], create a https://github.com/helgoboss/helgobox/discussions/categories/ideas[feature request], naming your controller and including the copied info.
* If the controller is in the list, write an email to info@helgoboss.org, naming your controller and including the copied info.
== Related videos
video::tkyNCGOVumw[youtube, list=PL0bFMT0iEtAgjbtAN-lp6d_-vLA_YUP8O]
@@ -0,0 +1,136 @@
= Play clips
As soon as you have some clips in the matrix, you can play them!
Unlike items on the REAPER timeline, you can start and stop clips totally freely. There are no rules, which makes Playtime very suitable for improvisation.
[[feature-play]]
== Playing clips using the app
The obvious way to play a clip is to use your mouse: Press the xref:user-interface/matrix-area.adoc#slot-cell-trigger[] button of its containing xref:key-concepts.adoc#slot[]:
* If Playtime's transport was stopped before you pressed the button (see xref:user-interface/toolbar.adoc#toolbar-start-stop-playback[] button in the toolbar), Playtime and your clip should start playing immediately.
* If Playtime's transport was playing already, the clip should start playing according to the configured xref:key-concepts.adoc#clip-start-timing[], by default at the next bar.
You can stop the clip by pressing the xref:user-interface/matrix-area.adoc#slot-cell-trigger[same button] again, which now appears as a stop icon. The clip should stop playing according to the configured xref:key-concepts.adoc#clip-stop-timing[].
.Playtime pipes audio and MIDI directly to the column tracks!
NOTE: Playtime "magically" plays the clip's MIDI or audio content directly through the xref:key-concepts.adoc#column-track[column track] of the containing column. It doesn't use any sends for this! In fact, the xref:helgobox::plug-in.adoc[] itself doesn't produce any audio or MIDI data at all. footnote:direct-output[It's possible that this will be added in the future by introducing a new mode of operation.]
TIP: You can xref:helgobox::app/user-interface/keyboard-shortcuts.adoc#esc[hide] or xref:helgobox::app/user-interface/title-bar.adoc#title-bar-close-window[close] the app window at any time. This will not affect playback or recording. Playtime also works without its user interface!
[[feature-keys]]
== Playing clips using a MIDI keyboard
Playtime allows you to play your clips by pressing keys on your MIDI keyboard:
. Press the xref:user-interface/toolbar.adoc#toolbar-show-hide-midi-triggers[] button. This should reveal small MIDI trigger areas on the right side of each slot cell.
. Press the MIDI trigger area of the slot that you want to play. It should turn red.
. Press a key on your MIDI keyboard. Playtime should pick it up. If not, see xref:user-interface/toolbar.adoc#midi-trigger-troubleshooting[].
. Press the key once. The clip should start playing.
. Press the key again. The clip should stop.
.Variations
****
Play as long as you press the key::
By default, pressing the key toggles between _playing_ and _stopped_. You can change that, for example on column level, by setting the column property xref:user-interface/inspector/column/playback.adoc#inspector-column-trigger-mode[] to xref:user-interface/inspector/column/playback.adoc#inspector-column-trigger-mode-momentary[] in the xref:user-interface/inspector/column.adoc[]. Then pressing the key down will start playback and releasing it will stop playback. This goes very well with xref:key-concepts.adoc#clip-start-timing[] xref:user-interface/inspector/clip.adoc#inspector-clip-start-timing-immediately[].
Restart when pressing the key again::
Another xref:user-interface/inspector/column/playback.adoc#inspector-column-trigger-mode[] is xref:user-interface/inspector/column/playback.adoc#inspector-column-trigger-mode-retrigger[]: Tapping the key once will start playback and tapping it again will trigger a restart.
Play with different velocities::
Maybe you want to play the clip with a lower volume when hitting the key softly and with a higher volume when hitting it hard. You can achieve this and fine-tune the effect by adjusting the matrix property xref:user-interface/inspector/matrix/playback.adoc#inspector-matrix-velocity-sensitivity[] in the xref:user-interface/inspector/matrix.adoc[]. It is of course also adjustable on xref:user-interface/inspector/column/playback.adoc#inspector-column-velocity-sensitivity[column] and xref:user-interface/inspector/clip.adoc#inspector-clip-velocity-sensitivity[clip] level.
****
.Suitable for finger drumming!
[NOTE]
====
Triggering clips via MIDI happens in real-time! As with any other instrument plug-in that you use in REAPER, the latency depends on the block size set in REAPER.
So if you use xref:key-concepts.adoc#clip-start-timing[] xref:user-interface/inspector/clip.adoc#inspector-clip-start-timing-immediately[] and set the block size in REAPER menu:Options[Preferences/Settings... > Device] low enough (e.g. 256 samples), you will not perceive any delay between pressing the key and hearing the sound.
====
.Is Playtime a sampler?
[TIP]
====
When playing Playtime via MIDI, it works a bit like a sampler. But instead of playing single tones, it is optimized to trigger complete musical _phrases_. And not just audio phrases, also MIDI sequences.
You are basically working on a higher level. Each of the triggered phrases in turn can trigger samplers or synthesizers ... or even xref:advanced-usage-scenarios/meta-clips.adoc[Playtime itself].
====
== Playing multiple clips
The fun starts when playing multiple clips simultaneously.
=== Columns in exclusive mode
By default, playback within one column is limited to just one slot. We call this xref:user-interface/inspector/column/playback.adoc#inspector-column-exclusive-mode[], because one slot has the exclusive right of playing.
.Exclusive mode
====
Let's say you have clip A in the first column cell and clip B in the second column cell.
. Trigger clip A and wait until it started playing
. Now, trigger clip B
You will see that clip A stops and clip B takes over.
====
*The consequence is:* If you want to play multiple slots simultaneously, you would need to create a new column. Musically, that makes a lot of sense. It is very common in clip launchers to have one column per instrument. And one instrument can normally only play one phrase at a time. Alternating between those phrases is often exactly what people want.
[[feature-non-exclusive-columns]]
=== Columns in non-exclusive mode
Playtime is a quite relaxed fellow and allows you to opt out of the exclusive mode. The easiest way to do this is to press the xref:user-interface/matrix-area.adoc#column-cell-exclusive-mode[] button in the xref:user-interface/matrix-area.adoc#column-cell[].
After disabling exclusive mode, you can play multiple clips within that column, as your heart desires.
=== Playing in sync
Usually when playing multiple clips within a clip launcher, one expects those clips to play perfectly xref:key-concepts.adoc#in-sync[in sync] with each other. This "perfectly in sync" is by default given in Playtime, but it all depends on how each of the clips is configured.
If you have messed with xref:key-concepts.adoc#clip-start-timing[], xref:user-interface/inspector/clip.adoc#inspector-clip-start-position[], xref:user-interface/inspector/clip.adoc#inspector-clip-length[] or xref:user-interface/inspector/clip.adoc#inspector-clip-sync-to-project-tempo[], your clips might get out of sync. If this happens, and you don't know why, revisit xref:key-concepts.adoc#in-sync[] to deepen your understanding.
=== Row and column transport buttons
You can play all clips in a row at once by pressing the xref:user-interface/matrix-area.adoc#row-cell-play-scene[] button at the very left.
You can permanently stop all clips in a column at once by pressing the xref:user-interface/matrix-area.adoc#column-cell-stop[] button in the xref:user-interface/matrix-area.adoc#column-cell[] at the top of the column. Double-clicking this button stops the clips abruptly.
You can permanently stop all clips in the complete matrix at once by pressing the xref:user-interface/matrix-area.adoc#matrix-cell-stop[] button in the xref:user-interface/matrix-area.adoc#matrix-cell[] at the top-left of the matrix area. Double-clicking this button stops the clips abruptly.
== Starting and stopping Playtime playback
Playtime's playback can be started and stopped xref:helgobox::key-concepts.adoc#instance[instance-wide], using either the xref:user-interface/toolbar.adoc#toolbar-start-stop-playback[] button in the xref:user-interface/toolbar.adoc#toolbar-transport-section[] or the kbd:[Space] key.
Stopping Playtime playback doesn't just stop all playing slots, it also memorizes which ones it stopped, so that next time you start playback, they will play again. We call those memorized slots xref:further-concepts/slot.adoc#ignited-slot[ignited slots]. Ignited slots have a circle around their xref:user-interface/matrix-area.adoc#slot-cell-trigger[play button].
Starting Playtime playback will automatically start all ignited slots. If you don't want that, press the xref:user-interface/matrix-area.adoc#matrix-cell-stop[] or xref:user-interface/matrix-area.adoc#column-cell-stop[] button to un-ignite the slots.
.Alternatives
****
Conducting a count-in by tapping tempo::
A neat way to start playback with a new tempo is to stop playback and repeatedly press the xref:user-interface/toolbar.adoc#toolbar-tap-tempo[] button in a "1, 2, 3, 4"-style count-in.
****
== Playing together with the REAPER arrangement
=== Starting playback within REAPER
Maybe you already have some items on the REAPER timeline that you want to improvise over using Playtime. All you need to do for this is to start playback within REAPER:
. Click somewhere into the REAPER main window in order to switch focus to REAPER.
. Press kbd:[Space] to start REAPER playback.
Playtime will now play synchronized to the arrangement. Changing the REAPER play cursor position will automatically retrigger Playtime's clip so that they stay in sync.
=== Full transport synchronization
Maybe you would like to always play together with the REAPER arrangement, even if you start playback within Playtime:
. Set xref:user-interface/inspector/matrix/playback.adoc#inspector-matrix-transport-sync[] in the xref:user-interface/inspector/matrix.adoc[] to *Full*
. Press kbd:[Space] within Playtime.
REAPER should start playing as well.
@@ -0,0 +1,60 @@
= Prepare
At first, we need to do some preparations.
== 1. Start REAPER
Playtime runs within REAPER, so at first you need to start REAPER.
== 2. Set up your audio and MIDI devices
If you haven't done it already, you should let REAPER know which audio and MIDI devices you are planning to use with it, because Playtime will use them as well!
. Open the REAPER preferences via menu:Options[Preferences/Settings...]
. In the section menu:Audio[Device], configure your audio input and output.
. In the section menu:Audio[MIDI Inputs], configure your MIDI input devices, such as music keyboards.
. In the section menu:Audio[MIDI Outputs], configure your MIDI output devices, such as hardware synthesizers.
If you want to know more about this process, please consult the one and only link:https://www.reaper.fm/userguide.php[REAPER user guide].
[[fire-up-playtime]]
== 3. Fire up Playtime
Press the image:screenshots/playtime-toolbar-icon.png[Playtime,width=50, pdfwidth=8mm] button in REAPER's main toolbar, or use any of the alternative ways to start Playtime (described in xref:installation.adoc[]).
After pressing the button, you should see the Playtime window with an empty xref:key-concepts.adoc#matrix[]:
.Playtime window with empty matrix
image::generated/screenshots/main/main-screen-empty.png[]
You can press kbd:[Shift+Cmd/Ctrl+P] to show/hide the Playtime window at any time.
At this point, you could directly continue with xref:usage/create.adoc[], but I strongly recommend to read the following deep dive, as it will improve your understanding of how Playtime works!
.Deep dive: Playtime button
****
Pressing the button actually does multiple things in one go:
. Create a new REAPER track named "Playtime" at the very top of the project.
. Arm the track and set its input to "MIDI: All: All channels".
. Add an xref:helgobox::key-concepts.adoc#instance[instance] of the Helgobox plug-in to the track's FX chain.
. Open the xref:helgobox::app.adoc[] associated with that new Helgobox instance.
. Navigate to the Playtime section of the App.
. Create a xref:key-concepts.adoc#matrix[Playtime Matrix] in this Helgobox instance.
If you wanted, you could do all of those steps manually instead:
* Right-click REAPER's track control panel and choose menu:Insert virtual instrument on new track...[]
* Double-click instrument plug-in "VSTi: Helgobox - ReaLearn & Playtime (Helgoboss)"
* Optionally rename the track to "Playtime"
* In the xref:helgobox::plug-in/user-interface.adoc[Helgobox plug-in window], press menu:Menu[Show app].
* In the xref:helgobox::app/user-interface.adoc[Helgobox app window], press the image:screenshots/playtime-toolbar-icon.png[Playtime,width=30] button in the xref:helgobox::app/user-interface/navigation-bar.adoc[] on the left.
* Press the button btn:[Create a Playtime Matrix]
What we learn from that:
* Playtime is built into Helgobox, which is an instrument plug-in, so there needs to be an instance of it somewhere in your project. *→ This is a good thing because it means that you can xref:usage/play.adoc[play] it like an instrument!*
* A new Helgobox instance doesn't have a xref:key-concepts.adoc#matrix[Playtime Matrix] by default.
You first need to create one.
*→ This means Playtime doesn't consume any CPU and memory if you don't use it!*
****
@@ -0,0 +1,12 @@
= Render
At the end, you probably want to render/mix-down/export the arrangement xref:usage/arrangement.adoc[created in the previous step] to an audio file.
All you need to do is to use REAPER's built-in render functionality as usual:
. Open menu:File[Render...]
. Change options if desired
. Press the btn:[Render] button
That's it! Playtime doesn't change anything about the rendering process. In fact, it's not involved anymore at this point.
@@ -0,0 +1,42 @@
= Structure the song
Playtime's xref:user-interface/matrix-area.adoc[] suits itself for organizing the clips into a musical structure.
== Rename slots
Renaming a slot is as easy as selecting the xref:user-interface/matrix-area.adoc#slot-cell[] and pressing kbd:[F2], or right-clicking the cell and selecting xref:user-interface/menus/slot-menu.adoc#slot-rename-primary-clip[].
== Add more columns
You can add more columns, for example one column per instrument.
You can rename a column or its corresponding xref:key-concepts.adoc#column-track[] by selecting the xref:user-interface/matrix-area.adoc#column-cell[] and pressing kbd:[F2], or right-clicking the cell and selecting xref:user-interface/menus/column-menu.adoc#column-rename-column-or-track[].
== Drag and drop things
You can freely drag and drop slot contents or other things. Check out the following links to learn more about it:
* xref:user-interface/matrix-area.adoc#column-drag-and-drop[]
* xref:user-interface/matrix-area.adoc#row-drag-and-drop[]
* xref:user-interface/matrix-area.adoc#slot-drag-and-drop[]
== Add more rows
You can add more rows if you are running out of vertical space for your clips. Just press the xref:user-interface/matrix-area.adoc#matrix-add-row[] button or right-click a xref:user-interface/matrix-area.adoc#row-cell[] and choose xref:user-interface/menus/row-menu.adoc#row-insert-row-below[].
Renaming works just as with columns.
== Use colors to spice things up
There are two things in a xref:key-concepts.adoc#matrix[] that can get individual colors: Tracks and clips.
In order to change the color of a track, click the xref:user-interface/track-area.adoc#track-panel-label[] to select the track. Then change the color in the xref:user-interface/inspector/track.adoc[] on the right. This sets the color of the REAPER track.
In order to change the color of an individual clip, select the xref:user-interface/matrix-area.adoc#slot-cell[] and change the color in the xref:user-interface/inspector/clip.adoc[] on the right.
[[feature-scenes]]
== Build scenes
One particular way to make use of rows of the matrix is to consider a row as a xref:key-concepts.adoc#scene[] - a part within a song. By organizing your clips into scenes, the scene column on the left of the matrix basically turns into a playlist for your song, which is very convenient if you want to xref:usage/arrangement.adoc[turn the song into an arrangement].
One function which greatly helps to build scenes (apart from drag-and-drop and copy-and-paste) is xref:user-interface/menus/row-menu.adoc#row-build-scene-from-currently-playing-clips[], which you can access by right-clicking the xref:user-interface/matrix-area.adoc#row-cell-label[] of an empty row.