Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Chord Beats Sync: Difference between revisions

From JustChords Wiki
No edit summary
No edit summary
 
Line 1: Line 1:
== Chord Beats Sync ==
== Chord Beats Sync ==


Line 5: Line 4:


This feature builds on [[Chord Beats]] — every chord must have a beat duration set, otherwise there is nothing to follow.
This feature builds on [[Chord Beats]] — every chord must have a beat duration set, otherwise there is nothing to follow.
<gallery>
File:chordBeatsSync1.png
File:chordBeatsSync2.png
</gallery>


== Clock Source ==
== Clock Source ==


JustChords gets its timing in two different ways depending on how it's running:
JustChords gets its timing in two different ways depending on how it is running:
 
* '''Standalone app (iOS, macOS Catalyst)''' — reads an external '''MIDI Clock''' source or follows the built-in '''Metronome'''.
* '''AUv3 plug-in''' — locks to the host's transport (DAW play/stop, position, tempo).
 
Open '''Settings → Chord Beats → Chord Beats Sync''' to configure the source.


'''Standalone app (iOS, macOS Catalyst)''' — reads an external '''MIDI Clock''' source.
'''Chord Beats Sync is off by default.''' Select a source to activate it. Changing the source to any non-off value immediately re-initialises the sync data for the current song no need to navigate away and back.
• '''AUv3 plug-in''' locks to the host's transport (DAW play/stop, position, tempo).


Open '''Settings → Chord Beats → Chord Beats Sync''' to configure the source. (Prior to this update the entry was located under Settings → MIDI.)
;Beats Source picker (standalone only)
Choose one of:


;Standalone — MIDI Clock Source
* '''Off''' — sync disabled (default).
• Pick a MIDI device or virtual port from the picker. Only ports that can send (sources / source-and-destination) are listed.
* '''Metronome''' the built-in JustChords metronome drives chord sync. Start the metronome and it will advance the song together with the click track.
• Choose '''None''' / '''Off''' to disable clock following. '''Off is the default'''; the feature must be explicitly enabled.
* '''MIDI Clock''' — an external MIDI Clock source drives the sync. A device picker appears below the source picker when this option is selected. Only ports that can send (sources / source-and-destination) are listed.


;AUv3
;AUv3
No clock picker — the host transport drives the sync automatically.
* No clock picker — the host transport drives the sync automatically.


;Loop Song
;Loop Song
When the song ends, sync restarts from the beginning of the first section so the song loops indefinitely. Works in both standalone and AUv3 modes.
* When the song ends, sync restarts from the beginning of the first section so the song loops indefinitely. Works in all modes.
 
== Metronome as Clock Source ==
 
Setting '''Beats Source → Metronome''' uses the JustChords built-in metronome to advance Chord Beats Sync — no external MIDI device or DAW required.
 
How it works:
 
* Start the metronome from the Metronome tool panel. Chord sync begins at the same instant as the first audio click.
* The metronome's '''Count-In''' beats are respected: the song does not advance during the count-in bars, so the first section fires together with beat 1 of the actual pattern.
* Beat timing is anchored to the audio engine's hardware clock (mach_absolute_time), so the chord highlight and the click land on the same sample — there is no software loop drift.
* Stopping the metronome stops chord sync and clears the section selection.
 
;Metronome → Send MIDI Clock (independent setting)
The metronome also has a separate toggle — '''Settings → Metronome → Send MIDI Clock''' — that broadcasts 24 PPQ MIDI Clock pulses to connected MIDI ports. This is independent of whether Chord Beats Sync is on or off:
 
* '''Send MIDI Clock ON, Beats Source = Metronome''' — the metronome clicks advance both Chord Beats Sync in the app AND drives external gear with a MIDI clock signal.
* '''Send MIDI Clock ON, Beats Source = MIDI Clock''' (or Off) — the metronome sends MIDI clock to external gear only; chord sync is driven by the external MIDI clock (or disabled).
* '''Send MIDI Clock OFF, Beats Source = Metronome''' — chord sync advances with the metronome, but no MIDI clock is broadcast.
 
In all cases where Send MIDI Clock is on, pulses are scheduled inline by the audio engine's tick scheduler (sample-accurate timestamps referenced to the same audio timeline as the metronome clicks), replacing the earlier software-loop approach. This makes the outgoing MIDI clock more stable at high tempos and long sessions.
 
== MIDI Clock Source ==
 
When '''Beats Source → MIDI Clock''' is selected, JustChords listens to an incoming MIDI Clock signal (24 PPQ) from any connected device or app. The device picker lists only ports that transmit MIDI (sources and source-and-destination ports). Choose '''None''' to leave the MIDI clock source unset while keeping sync in MIDI Clock mode.


== MIDI Out ==
== MIDI Out ==


Chord Beats Sync can broadcast what's happening in the song over MIDI. The MIDI Out settings are only visible when MIDI is enabled (Settings → MIDI → Enable MIDI). The standalone app has '''MIDI Out''' (one channel); the AUv3 plug-in has both '''MIDI Out 1''' and '''MIDI Out 2''', each configured independently.
Chord Beats Sync can broadcast what is happening in the song over MIDI. The MIDI Out settings are only visible when MIDI is enabled (Settings → MIDI → Enable MIDI). The standalone app has '''MIDI Out''' (one channel); the AUv3 plug-in has both '''MIDI Out 1''' and '''MIDI Out 2''', each configured independently.


;User MIDI Messages (always on for Out 1)
;User MIDI Messages (always on for Out 1)
JustChords always emits these on the primary output:
JustChords always emits these on the primary output:


Song is displayed
* Song is displayed
Section selection
* Section selection
Section deselection
* Section deselection
MIDI Button events
* MIDI Button events


These are the "user-driven" messages that don't depend on the playhead.
These are the "user-driven" messages that do not depend on the playhead.


;Chords (per output)
;Chords (per output)
Choose how chord data is sent:
Choose how chord data is sent:


'''Off''' — no chord messages.
* '''Off''' — no chord messages.
'''Chords (Note On/Off)''' — sends each chord as standard MIDI Note On / Note Off events, so any synth or sampler can play along.
* '''Chords (Note On/Off)''' — sends each chord as standard MIDI Note On / Note Off events, so any synth or sampler can play along.
'''Tone Packet Protocol''' — sends chord information as TonePacket messages, useful for receivers that understand chord identity rather than raw notes.
* '''Tone Packet Protocol''' — sends chord information as TonePacket messages, useful for receivers that understand chord identity rather than raw notes.


;Anticipation (per output)
;Anticipation (per output)
How early chord-change messages should be sent before the beat the chord actually starts on:
How early chord-change messages should be sent before the beat the chord actually starts on:


'''Off''' — fire exactly on the beat.
* '''Off''' — fire exactly on the beat.
'''1/4 beat''', '''1/8 beat''', '''1/16 beat''' — send the chord change slightly ahead, useful so external instruments have time to react and don't sound late. Anticipation is ignored for the very first beat of a section (no pre-roll).
* '''1/4 beat''', '''1/8 beat''', '''1/16 beat''' — send the chord change slightly ahead, useful so external instruments have time to react and do not sound late. Anticipation is ignored for the very first beat of a section (no pre-roll).


;Send first chord on song display / section select
;Send first chord on song display / section select
When enabled, opening a song or selecting a section immediately emits its first chord — handy for hearing the starting chord before the transport begins.
* When enabled, opening a song or selecting a section immediately emits its first chord — handy for hearing the starting chord before the transport begins.


== Shifting Section MIDI Messages (Delay / Anticipation) ==
== Shifting Section MIDI Messages (Delay / Anticipation) ==
The '''Section selection''' and '''Section deselection''' MIDI messages can be shifted in beats so they don't fire exactly on the section boundary. The offset is set per MIDI action in the song's '''Arrangement / Song Structure''' and '''only takes effect in Chord Beats Sync mode'''.
 
The '''Section selection''' and '''Section deselection''' MIDI messages can be shifted in beats so they do not fire exactly on the section boundary. The offset is set per MIDI action in the song's '''Arrangement / Song Structure''' and '''only takes effect in Chord Beats Sync mode'''.


;How to Set It
;How to Set It
Edit the song's Song Structure and open a MIDI action item.
* Edit the song's Song Structure and open a MIDI action item.
Pick a '''Trigger''' — ''Section selection'' or ''Section deselection''.
* Pick a '''Trigger''' — ''Section selection'' or ''Section deselection''.
A stepper (0–100 beats) appears, labelled '''Delay''' or '''Anticipation''' depending on the trigger.
* A stepper (0–100 beats) appears, labelled '''Delay''' or '''Anticipation''' depending on the trigger.


;Behavior
;Behavior
'''Section selection → Delay''' — sends the message ''N'' beats '''after''' the section starts.
* '''Section selection → Delay''' — sends the message ''N'' beats '''after''' the section starts.
'''Section deselection → Anticipation''' — sends the message ''N'' beats '''before''' the section ends.
* '''Section deselection → Anticipation''' — sends the message ''N'' beats '''before''' the section ends.
'''0''' (default) — fires exactly on the boundary.
* '''0''' (default) — fires exactly on the boundary.


The offset is measured in whole beats on the Chord Beats timeline and is applied per MIDI action, so several actions on the same section can use different shifts.
The offset is measured in whole beats on the Chord Beats timeline and is applied per MIDI action, so several actions on the same section can use different shifts.
Line 74: Line 108:
When the clock is running:
When the clock is running:


The chord currently sounding is highlighted in the song view.
* The chord currently sounding is highlighted in the song view.
The active section is highlighted, and JustChords auto-scrolls to keep it on screen.
* The active section is highlighted, and JustChords auto-scrolls to keep it on screen.
When the section ends, JustChords advances to the next section automatically; if '''Loop Song''' is on it wraps back to the start.
* When the section ends, JustChords advances to the next section automatically; if '''Loop Song''' is on it wraps back to the start.
When the transport stops, all sounding notes are released and the section selection clears.
* When the transport stops, all sounding notes are released and the section selection clears.
• '''Changing the clock source''' to any non-off value immediately re-initialises the sync data — no need to navigate away and back.
 
== MIDI Clock Output (Metronome) ==
 
When the built-in metronome is used as the clock source, MIDI clock pulses (24 PPQ) are generated inline by the audio engine's tick scheduler. Each pulse carries a sample-accurate hardware timestamp anchored to the same audio timeline as the metronome clicks, resulting in tighter sync with external instruments compared to earlier software-loop-based scheduling. MIDI Start / Stop messages bracket the session automatically.


== Section Navigation Over MIDI ==
== Section Navigation Over MIDI ==
Line 88: Line 117:
While sync is active you can pre-queue a different section:
While sync is active you can pre-queue a different section:


Tap a section header in the song view to set it as the "next section". When the current section ends, JustChords switches to it and emits the corresponding Section Selection MIDI message.
* Tap a section header in the song view to set it as the "next section". When the current section ends, JustChords switches to it and emits the corresponding Section Selection MIDI message.
Looping a single section keeps repeating it until you queue a different one or stop the transport.
* Looping a single section keeps repeating it until you queue a different one or stop the transport.


== Tips ==
== Tips ==


'''Set Chord Beats first.''' Without beat counts, there is nothing for the clock to follow. Enable Chord Beats in Song View settings and set beat values per chord in the Song Editor's Chord Beats syntax.
* '''Set Chord Beats first.''' Without beat counts there is nothing for the clock to follow. Enable Chord Beats in Song View settings and assign beat values per chord in the Song Editor's Chord Beats syntax.
'''AUv3 in a DAW''' is the simplest way to test the feature — start playback in the DAW and the song should follow.
* '''Metronome source''' is the quickest way to try the feature without any external gear — tap the metronome to start, and the song follows.
'''Standalone''' setups typically use an external sequencer, drum machine or MIDI clock app as the source.
* '''AUv3 in a DAW''' is the simplest way to lock to a project timeline — start playback in the DAW and the song will follow.
'''Chord Beats Sync is off by default.''' Open Settings → Chord Beats → Chord Beats Sync and select a source to activate it.
* '''Standalone with external gear''' (drum machine, sequencer, MIDI clock app) — use Beats Source → MIDI Clock and select the device.
If anticipation makes external instruments fire too early, lower it; if they sound late, raise it.
* '''Chord Beats Sync is off by default.''' Open Settings → Chord Beats → Chord Beats Sync and select a source to activate it.
MIDI Out settings (Song MIDI and Chord data) are only shown when MIDI is enabled under Settings → MIDI.
* '''Send MIDI Clock''' (metronome setting) and '''Beats Source''' (chord sync setting) are independent. You can broadcast a MIDI clock to outboard gear regardless of which source is driving chord sync, and vice versa.
* If anticipation makes external instruments fire too early, lower it; if they sound late, raise it.
* MIDI Out settings (Song MIDI and Chord data) only appear when MIDI is enabled under Settings → MIDI.

Latest revision as of 17:15, 27 July 2026

Chord Beats Sync

Chord Beats Sync drives JustChords from an external clock so the app follows the music in real time. As the clock advances, JustChords highlights the active chord and section, auto-scrolls the song, and sends MIDI out to other instruments / apps based on the chord under the playhead.

This feature builds on Chord Beats — every chord must have a beat duration set, otherwise there is nothing to follow.

Clock Source

JustChords gets its timing in two different ways depending on how it is running:

  • Standalone app (iOS, macOS Catalyst) — reads an external MIDI Clock source or follows the built-in Metronome.
  • AUv3 plug-in — locks to the host's transport (DAW play/stop, position, tempo).

Open Settings → Chord Beats → Chord Beats Sync to configure the source.

Chord Beats Sync is off by default. Select a source to activate it. Changing the source to any non-off value immediately re-initialises the sync data for the current song — no need to navigate away and back.

Beats Source picker (standalone only)

Choose one of:

  • Off — sync disabled (default).
  • Metronome — the built-in JustChords metronome drives chord sync. Start the metronome and it will advance the song together with the click track.
  • MIDI Clock — an external MIDI Clock source drives the sync. A device picker appears below the source picker when this option is selected. Only ports that can send (sources / source-and-destination) are listed.
AUv3
  • No clock picker — the host transport drives the sync automatically.
Loop Song
  • When the song ends, sync restarts from the beginning of the first section so the song loops indefinitely. Works in all modes.

Metronome as Clock Source

Setting Beats Source → Metronome uses the JustChords built-in metronome to advance Chord Beats Sync — no external MIDI device or DAW required.

How it works:

  • Start the metronome from the Metronome tool panel. Chord sync begins at the same instant as the first audio click.
  • The metronome's Count-In beats are respected: the song does not advance during the count-in bars, so the first section fires together with beat 1 of the actual pattern.
  • Beat timing is anchored to the audio engine's hardware clock (mach_absolute_time), so the chord highlight and the click land on the same sample — there is no software loop drift.
  • Stopping the metronome stops chord sync and clears the section selection.
Metronome → Send MIDI Clock (independent setting)

The metronome also has a separate toggle — Settings → Metronome → Send MIDI Clock — that broadcasts 24 PPQ MIDI Clock pulses to connected MIDI ports. This is independent of whether Chord Beats Sync is on or off:

  • Send MIDI Clock ON, Beats Source = Metronome — the metronome clicks advance both Chord Beats Sync in the app AND drives external gear with a MIDI clock signal.
  • Send MIDI Clock ON, Beats Source = MIDI Clock (or Off) — the metronome sends MIDI clock to external gear only; chord sync is driven by the external MIDI clock (or disabled).
  • Send MIDI Clock OFF, Beats Source = Metronome — chord sync advances with the metronome, but no MIDI clock is broadcast.

In all cases where Send MIDI Clock is on, pulses are scheduled inline by the audio engine's tick scheduler (sample-accurate timestamps referenced to the same audio timeline as the metronome clicks), replacing the earlier software-loop approach. This makes the outgoing MIDI clock more stable at high tempos and long sessions.

MIDI Clock Source

When Beats Source → MIDI Clock is selected, JustChords listens to an incoming MIDI Clock signal (24 PPQ) from any connected device or app. The device picker lists only ports that transmit MIDI (sources and source-and-destination ports). Choose None to leave the MIDI clock source unset while keeping sync in MIDI Clock mode.

MIDI Out

Chord Beats Sync can broadcast what is happening in the song over MIDI. The MIDI Out settings are only visible when MIDI is enabled (Settings → MIDI → Enable MIDI). The standalone app has MIDI Out (one channel); the AUv3 plug-in has both MIDI Out 1 and MIDI Out 2, each configured independently.

User MIDI Messages (always on for Out 1)

JustChords always emits these on the primary output:

  • Song is displayed
  • Section selection
  • Section deselection
  • MIDI Button events

These are the "user-driven" messages that do not depend on the playhead.

Chords (per output)

Choose how chord data is sent:

  • Off — no chord messages.
  • Chords (Note On/Off) — sends each chord as standard MIDI Note On / Note Off events, so any synth or sampler can play along.
  • Tone Packet Protocol — sends chord information as TonePacket messages, useful for receivers that understand chord identity rather than raw notes.
Anticipation (per output)

How early chord-change messages should be sent before the beat the chord actually starts on:

  • Off — fire exactly on the beat.
  • 1/4 beat, 1/8 beat, 1/16 beat — send the chord change slightly ahead, useful so external instruments have time to react and do not sound late. Anticipation is ignored for the very first beat of a section (no pre-roll).
Send first chord on song display / section select
  • When enabled, opening a song or selecting a section immediately emits its first chord — handy for hearing the starting chord before the transport begins.

Shifting Section MIDI Messages (Delay / Anticipation)

The Section selection and Section deselection MIDI messages can be shifted in beats so they do not fire exactly on the section boundary. The offset is set per MIDI action in the song's Arrangement / Song Structure and only takes effect in Chord Beats Sync mode.

How to Set It
  • Edit the song's Song Structure and open a MIDI action item.
  • Pick a TriggerSection selection or Section deselection.
  • A stepper (0–100 beats) appears, labelled Delay or Anticipation depending on the trigger.
Behavior
  • Section selection → Delay — sends the message N beats after the section starts.
  • Section deselection → Anticipation — sends the message N beats before the section ends.
  • 0 (default) — fires exactly on the boundary.

The offset is measured in whole beats on the Chord Beats timeline and is applied per MIDI action, so several actions on the same section can use different shifts.

What Sync Does in the UI

When the clock is running:

  • The chord currently sounding is highlighted in the song view.
  • The active section is highlighted, and JustChords auto-scrolls to keep it on screen.
  • When the section ends, JustChords advances to the next section automatically; if Loop Song is on it wraps back to the start.
  • When the transport stops, all sounding notes are released and the section selection clears.

Section Navigation Over MIDI

While sync is active you can pre-queue a different section:

  • Tap a section header in the song view to set it as the "next section". When the current section ends, JustChords switches to it and emits the corresponding Section Selection MIDI message.
  • Looping a single section keeps repeating it until you queue a different one or stop the transport.

Tips

  • Set Chord Beats first. Without beat counts there is nothing for the clock to follow. Enable Chord Beats in Song View settings and assign beat values per chord in the Song Editor's Chord Beats syntax.
  • Metronome source is the quickest way to try the feature without any external gear — tap the metronome to start, and the song follows.
  • AUv3 in a DAW is the simplest way to lock to a project timeline — start playback in the DAW and the song will follow.
  • Standalone with external gear (drum machine, sequencer, MIDI clock app) — use Beats Source → MIDI Clock and select the device.
  • Chord Beats Sync is off by default. Open Settings → Chord Beats → Chord Beats Sync and select a source to activate it.
  • Send MIDI Clock (metronome setting) and Beats Source (chord sync setting) are independent. You can broadcast a MIDI clock to outboard gear regardless of which source is driving chord sync, and vice versa.
  • If anticipation makes external instruments fire too early, lower it; if they sound late, raise it.
  • MIDI Out settings (Song MIDI and Chord data) only appear when MIDI is enabled under Settings → MIDI.