Hardware Synthesizer arpeggiator does not sync - Arturia MicroFreak / MIDI Clock START sent only at time zero

Hello,
I’m having problems synchronizing my Arturia MicroFreak hardware synthesizer (firmware v3.0.6.1069) with my DAW (Ardour 6.7.0 in Linux, using Jack). Read the manual and searched here before posting. Maybe I still don’t know what to search!

Symptoms:

  • The synth synchronizes to the BPM.
    • Display shows “Ext USB” and the lastest manually adjusted BPM setting. This last value seems not to matter, as BPM effectively changes when I change it Ardour.
  • The arpeggiator is not synchronizing?
    • It seems that it does not restart when I press play / the playroll starts moving. The arpeggiator is free running and then I should try stopping and replaying, many times until I luckily hit the beat.
    • It’s not a problem of drift. I tried playing for two minutes and I can hear the same spacing between a kick drum and a synth note.

Facts/Setup:

  • Microfreak:
    • Sync Source set to USB
    • Connected to PC via USB
  • Ardour:
    • 1 MIDI Track connected to synth.
    • MIDI Beatclock Generator (Mclk / MIDI Clock) enabled.
      • Without this, the arpeggiator won’t start when there’s a note sent from the DAW. It works ok without arpeggiator. So something good is happening.
    • I tried enabling and connecting MIDI Time Code (MTC) and MIDI Machine Control (MMC), but they don’t change nothing.
  • Jack:
    • MicroFreak’s MIDI input connected to MIDI Clock out and MIDI Control out.
    • MicroFreak’s MIDI input connected to relevant MIDI output track of Ardour.

Screenshot_20210702_214715

This problem is always reproducible for me. Maybe there’s a kind of MIDI message that Ardour is not sending when the playroll starts moving? Does the MicroFreak expect such a message? Could not find specifics of MIDI communication in the MicroFreak manual.

I’m posting this in both Arturia’s and Ardour’s forum, as maybe there are things relevant to both. Thanks for Ardour!

Crossposted at Arturia Forums
Edit: updated title with new findings

I found more after inspecting the MIDI Clock output in Ardour. It happens that:

  • MIDI Clock only sends a START messsage when the playroll starts moving from the start of time. When starting from another position, it sends a CONTINUE. When stopping, a STOP is sent.
  • MIDI Time Code and MIDI Machine Control send stuff, but are irrelevant.

In conclusion:

  • MicroFreak needs a START message to synchronize its internal beat clock, that is used for the arpeggiator, the sequencer, the LFO, the cycling envelope and the glissando adjustments.
  • STOP and CONTINUE messages stop the stuff that depends on the internal beat clock (arpeggiator, seq…), but that clock keeps running instead of locking its position or adjusting it according to the external beat clock. This is evidenced by the fact that if I start in sync, pause the playroll and then continue playing after some random ammount of time, the arpeggiator is not (necessarily) in sync.

I really don’t know whether this is expected behaviour or not. Maybe it is! I cannot imagine why would you want to have a free-running clock. But maybe it’s useful to start the internal clock with some offset so as to have an offbeat pattern.

Thing is, I want to record in arbitrary places, far from the start. I’ll try to manage this with some kind of MIDI plugins to convert CONTINUEs to STARTs. Or perhaps I can explicitelly send a START from Ardour? I also found that the Cubase DAW has a “Always send Start Message” option, so perhaps it’s not an uncommon problem and this deserves a Feature request for Ardour.

Always Send Start Message

MIDI clock transport commands include Start, Stop, and Continue. However, some MIDI devices do not recognize the Continue command. By activating the “Always Send Start Message” option, you can avoid this problem with specific MIDI devices.

MIDI Clock Destinations

I’ll update if I make it.

Some related? stuff I found now, for future reference:

The easiest solution I found is the RK-002 midi processor cable from Retrokits, but you need a DIN Midi connection. Works great and easy to program, you can do exactly this, and much more. There are other solutions (BomeBox, MidiProcessor Pro etc) but this is the cheapest of the bunch. Of could be great if Ardour/Mixbus could do it natively.

I wrote a Arduino sketch for the RK-002 that does exactly what you want, moreover it uses the SPP to compute the next full bar so your pattern sequencers will always start on the beat instead of somewhere random

Thanks a lot Dirk!, I could come back to this issue today. Cool suggestion! Those are neat cables, didn’t know about them. I’m new to all of this world and for now just trying to keep the hardware at the minimum, for portability and money I think, so I’ll try to avoid buying more things. Sometimes it strikes me that it’s not super easy to manipulate and generate MIDI stuff in the computer. I mean, it’s a multipurpose computing device with huge processing capacity, and real-time for MIDI speed. Maybe it’s just a lack of programs only, and that’s an incentive for us to build them. Surely I haven’t spent a lot of time researching, though.

Good news, I solved it using x42’s Rule Based MIDI Filter (or midimap), that
is

A flexible MIDI event mapper plugin using a rule-based lookup-table loaded from a config file

This worked as I wanted, sending a START whenever the playhead started moving, from any position.

A minimal configuration file that does the trick when loaded with the midimap plugin:

# midimap.lv2 - config/map file
# Lines starting with a hash (#) are ignored, as are empty lines.
# Note that: whitespace is significant (beware of trailing spaces).
#
# at first we need to set the file-format version,
midimap v1
#### strategy
## Forward all events that don't match any filter-rule as-is.
## If not set, only events matching a rule will generate output
forward-unmatched

# Pablo
# Convert Continue to Start MicroFreak uses Start to synchronize
# its internal midiclock.  Ardour only sends Start at the beginning of
# the timeline; in other start positions it only sends Continue. I
# need a Start to synchronize to the beat. Probably I will always want
# to start playing at the start of a beat.
# 251 is Continue, converted to 250, Start.
251 | 250

:+1:t4:

2 Likes