SooperLooper - In Testing

Results of first quick trial with Open Stage Control server running on PC with Windows and Zynthian.
on UDP 1370
/CUIA/SCREEN_MAIN - working
/mixer/fader255 - not working
on 9951 port
/sl/0/down record- not working
I would need some tool to listen to the communication between the PC and the Zynthian. I’m not sure what exactly I’m sending by OSC.

There is a pause and mute button. You can mute each loops whilst it continues to loop out pause it to stop it looping. You can unpause to resume or trigger to start playback from beginning. You can play one (oneshot) or loop.

Thanks for this integration of SooperLooper!
I switched to branch feature/sooperlooper this week and began fiddling with sooperlooper as audio effect next to some synth and audio player (Was trying to mimic a mucial story game OST). I also discovered mixer: useful improvement too.
For now, I do not understand how to select loop to record. I was expecting the selected loop to be tied to selected layer in zynthian. Instead, selected loop in sooperlooper is the last one selected, no matter the layer you are looking at.
Is it possible to associate layer to one specific loop without selecting one each time?

Thanks again

1 Like

Hi @Milkyway! Welcome to the forum. It is great to see you here.

SooperLooper is configured to have a single, stereo input and output so you need to manually route the chain (layer) you wisth to record using that chain’s option menu. SooperLooper isn’t supposed to be a multitrack audio recorder (although in theory it could kinda be configured like one). The idea is that you feed it with some audio source/s then layer up looped recordings. You can route all the layers to it then only play the ones you want to record on each record loop.

@riban I’m getting an odd thing where sometimes the loop will alternate between stereo and left channel only. It’s happened about three times over the last week. I’ll try and get some logs when I’m back off holiday.

I’m pretty sure it’s the looper as it’s happened with audio in and internal synth layers.

SooperLooper is stereo. (It has the ability to have loops of arbitrary channels with individual inputs/outputs but we disable this, using stereo loops and common input and output pairs.) The routing to the looper is by default: left audio input to looper left input, right audio input to looper right input. If a source audio appears on only one channel (like my guitar plugged into just the left input) then the loop recording will be on just that channel. This can be resolved by deselecting system:capture_2 in the Audio Capture menu for the chain. I wonder if you are experiencing something related to this.

I have been fixing bugs related to sync and noticed that enabling sync and quantize on the sync source loop will have odd behaviour. I think this should be resolved upstream and we can add a documentation note about it. I am not sure we can avoid this automatically within code without possible issues with expected behaviour. It is possible that this is causing this problem. Try disabling sync on the sync source loop.

If you continue to experience issues after updating and trying these solutions then let me know.

Well it only appears on the left channel for one loop. Then it switches to stereo, and then switched back again every time the loop cycles. It’s a bit weird.

So, some trials and errors later, here I am:

  • on layer 1, SooperLooper

  • on layer 2, one instance of setBFree

  • on layer 3, one instance of fluidsynth

  • audio of layers 2 and 3 routed to layer 1

  • at first, midi of layer 2 and 3 also routed to layer 1 but that was before I realized CC messages were not concerned

  • midi mapping to send all CC messages from channel 2 and 3 to channel 1 (should be more specific)

  • trigger record with CC message with value 0 and 127 (by the way, what is the best approach to toggle function such as recording with a fcb1010?)

  • trigger loop change with CC message with values 0, 26, 52, 78, 104, etc (there is a slight offset between zynthian ui rotary change and loop selection when using a rotary controller on a keyboard).

Now, I am able to select synth from mixer view, then switch loop with pedal board and toggle record from this same view. There is no reminder of which loop is selected and state of record but it is manageable for short sessions I guess.

Thanks for previous advice. Do not hesitate to point out my new wrong practices.

Hi @riban,

I did another test, this time sending OSC commands from python using the pythonocs module.
Commands on UDP 1370 for CUIA work.
Commands for SooperLooper on UDP 9551 also work.
Unfortunately, I didn’t get any response for the mixer. I tried the “testing” and “feature/sooperlooper” repositories. I had the commands in the form /mixer/fader255 0.23 on port 1370.

Did you send /mixer/heartbeat to port 1370? This registers the client for tallies and must be sent every minute to keep the registration active. (Actually the timeout is 120s.)

I can’t reproduce this. I have recorded tone to two loops and I never see either go to left only.

From a 7" Touchscreen or zynthian-pedal.local if you must.

It looks like you have set a high font size. The text doesn’t fit well.

Yeah it’s visibility for a 7"screen on the pedal board from standing…

Old eyes and stuff…

1 Like

We could try to improve it. Have you tried to disable bottom buttons? Only to see if it improve things …

1 Like

Is that with the version committed this evening? There were some changes to layout (although not font).

Quite better! We will try to improve it anyway :wink:

Hi @zynthianers! SooperLooper is in the testing branch!! Yesssss!!

Here the mandatory :face_with_monocle:

And a shot from my Z2 prototype:

Nice shot, i know …

Please, test and send more :face_with_monocle:!!!

Enjoy!

4 Likes

A quick overview:

  • A looper with up to 6 separate loops. Each loop may be any length (limited by memory - in the order of 30s) and can be synchronised or free running.
  • All controls are via normal Zynthian control screens (4 controls per page) which can be mapped to MIDI controllers. Default mapping start at CC102.
  • Many of the most used controls and indications are shown in a touch enabled GUI where the list of control pages would be. This has a grid of 12 buttons at the top used to control operation, up to 6 loop indications each with current time, loop duration and state indicated plus a mute button, button to add loops (long press a loop to remove it). Click on a loop to select it. At the bottom is a meter indicating of input level on which are overlaid the trigger threshold (yellow bar) and input level control (red triangle). There are three other draggable sliders controlling audio levels.
  • There are two system presets:
    • default: Loop 1 is free running and subsequent loops are synchronised to loop 1.
    • sync2clock: Loop 1 is synchronised to internal (JACK) clock and transport. Subsequent loops are synchronised to loop 1. Loop 1 will wait for the next bar before starting / stopping recording. Start step sequencer looping, hit SooperLooper record during a loop and start to record at next bar (loop) then hit record again to stop recording at end of bar (loop).
  • Use Audio Capture in chain options menu to enable / disable physical audio inputs. Default is stereo recording. Disabling one input results in mono from the remaining input to both channels of the stereo recording.
  • Use Audio Output in chain options menu of other chains to route their audio to SooperLooper. Default is for SooperLooper to record from physical audio inputs only.
  • Or you could just add SooperLooper as an effect in the main mixbus chain which will feed your mix of all engines to it. For some workflows this may be the simplest solution.
  • dry (monitor) affects how much input signal feeds the output without influencing what is recorded.
  • wet affects the output level of a loop’s recorded audio, like a mixer within the looper influencing relative levels of each loop contributing to the chain output.
  • Trigger record to start a recording. Audio is recorded to the selected loop until record is pressed again. If synchronised / quantised then the start and end will wait for the sync source trigger (more on this later).
  • Trigger overdub to layer a new audio recording over an existing recorded loop. New audio is added to the loop on each cycle with playback looping at the end of each loop.
  • feedback influences how much of the existing recording contributes to the new recording. Default is 100%.
  • Add loops to allow multi-track recording with each loop allowing build up of layered recording. (You can record to multiple loops simultaneously if you are quick enough on the controls but this workflow is not optimised and of limited use.)
  • multiply overdubs a loop but does not build up layers on each loop. Instead it loops playback of existing audio but extends the loop duration.
    replace replaces existing loop with new recording - similar to record but constrained by loop duration.
    substitute is similar to replace but the existing audio is played during the substitution.
    insert adds new audio within an existing recording, extending the loop.
    undo / redo allow previous record actions to be reverted. The quantity of undo actions is limited by memory - I think just a few, maybe three or four. The control for this has three positions so acts like a rocker switch. CCW to undo, CW to redo.
    trigger starts playback of the selected loop from its start. This can be synchronised with the sync source by asserting playback sync.
    oneshot will play the loop from the start just once then mute.
    reverse changes direction of playback. If loop is quantised to a sync source then reverse operates at the sync point.
    pause stops playback of the selected loop. Playback will resume from the paused position. (Use trigger to resume from start of loop.)
    Each loop may be muted which silences the loop’s audio output but the loop continues to run.
    The speed, pitch and length of each loop may be adjusted. I have not played with these options much - let me know how you use them and any improvements you may consider in UI. SooperLooper also supports a _scratch_effect. This is not presented in Zynthian. If you have a real use for such a feature (not just idle curiosity) then raise a feature request to expose this feature.
    Loop operations and behaviour can be influenced by the synchronisation and quantisation options.
  • sync to defines to what a loop is synchronised:
    • Internal - not used with current implementation but would allow free running with own tempo control
    • MidiClock - use MIDI clock, start, stop and continue signals to synchronise SooperLooper. Although this works there is no mechanism within Zynthian to route MIDI clock to SooperLooper. It can be done manually under the bonnet.
    • Jack/Host - Lock to Zynthian clock, i.e. step sequencer. (Should also work with MIDI file player but not tested.)
  • None - free running (similar to Internal)
  • Loop x - any loop. Default is to sync to loop 1.
  • enable sync must be on for a loop for it to synchronise otherwise the loop will free run.
  • relative sync is an odd control. Synchronisation occurs using loop duration but will start from when the operation is triggered, i.e. within a loop then ends at the same point within the next loop cycle allowing for an offset recording.
  • quantize defines how a recording will start:
    • off: recording begins immediately
    • cycle: recording begins at the start / end of the original loop
    • 8th: not used in Zynthian (relates to internal tempo)
    • loop: like cycle but acts at end of current loop length (after any extension, e.g. multiplying)
  • round defines how a recording will stop. When enabled the recording will continue to occur until end of loop.
  • play feedback - you tell me!!!
  • There are three individual controls influencing what is quantised (locked to a sync point):
    • overdub quant: enable to trigger start / end of overdubs to the sync source, e.g. start overdub at start of loop
    • mute quant: when enabled a mute operation will occur at sync point, e.g. mute audio at end of loop
    • replace quant: affects the various record (not overdub) operations. Note that an issue with SooperLooper (upstream issue) means that this setting is always asserted when a preset is loaded.
  • threshold sets the audio level threshold at which a recording (or overdub) will start. Default is off so recordings start immediately (or at sync point). This is handy for starting the initial recording when you play your first note. It is very sensitive so will normally be set very low unless your audio source is particularly noisy. The input level meter shows the threshold overlaid as a yellow line allowing comparison between the input audio and threshold level.
  • Settings can be saved as presets and presets (except the two system defaults) can be deleted or renamed.
  • Loop audio is saved with each preset allowing restoration of a previous session. Loops are paused when restored which may require some manipulation of playback sync to synchronise them. (I want to improve this.) Deleting a preset also deletes its audio files. Saved audio is the last, layered state, i.e. undo is not available. Snapshots store the preset name so will not necessarily restore the current recorded state. Save the session as a preset before saving a snapshot to restore the current state.

The default preset disables sync for loop 1 and quantises all loops to loop 1. This is a good starting point for general looping. It allows you to build up loops on loop 1 and to add new loops that will be time locked to loop 1. Don’t enable sync on loop 1 whilst it is quantized to itself otherwise you will see odd behaviour.

There can only be one instance of a SooperLooper engine so once you have added it to a chain it will not appear in the list of available audio plugins. (Oh yeah, that is where you find it - audio chain or audio effects.)

Let me know how you use it and whether you find yourself always adjusting certain parameters for your workflow. It may be advantageous to add system presets for common workflows. (You can save your own for weird workflows!)

Enjoy!

8 Likes