EP-2350 Ting Customizable samples and effects via config.json

The EP-2350 “Ting” microphone is powered by the Raspberry Pi RP2350 microcontroller (that explains the model number), which when connected to a computer will mount a writable disk and includes basic instructions for setting up a config.json file and a sample document, to override any of the factory presets.

There are TEN effects available, several with multiple parameters, controllable by the user via the handle position, “trigger”, and shake. The demo file also shows an example of how effects can be layered to create a patch preset of effects, which explains how the two factory presets of echo and echo+spring are achieved.

What a neat device!

Firmware Update

Boot loader is accessed by holding the handle button and double clicking the button above the USB-C port, and must be held during the entirety of loading the firmware on and during the update. The factory firmware boot loader disk attached as “RP2350” and after upgrade to the Nov, 4 v1.0.5 presented as the documented “TING BOOT” disk.

From the pdf on the device regarding config.yaml

I don’t fully understand the "row" components of the example presets. If these are zero-indexed (as inferred from the gentle reminder "name": "We count from zero", then is the "lfo": { "row": 3, "param": "echo" line affecting the { "effect": "DELAY" (which is 3rd in the list, but index 2, and has an echo param) or the { "effect": "SAMPLE" element (which is 4th in the list, but index 3, and lacks an echo param) of the list?

example

{
  "name": "We count from zero",
  "samples": [
    { "pos": 1, "file": "samples/whistle1.wav","playmode": "oneshot" },
    { "pos": 0, "file": "live1/loop.wav","playmode": "startstop" },
    { "file": "horn.wav","playmode": "hold" },
    { "file": "live1/shottis.wav","playmode": "oneshot" }
  ],
  "presets": [
    {
      "pos": 0,
      "list": [
        { "effect": "HARMONY", "pitch": 2.0, "BUS": 2 },
        { "effect": "REVERB", "time": 0.1, "dry-level": 1.0 },
        { "effect": "DELAY","time": 0.5, "dry-level": 0.0, "echo": 0.5, "BUS": 1 },
        { "effect": "SAMPLE", "speed": 1.0 }
      ],
      "handle": { "row": 1, "param": "time","depth": 0.6 },
      "shake": { "row": 2, "param": "echo", "depth": 1.0 },
      "lfo": { "row": 3, "param": "echo", "depth": 1.0,
      "mpy": 1.0, "shape": "random", "phase": 0, "speed", 4.0 },
      "trigger": { "row": 3 }
    },
    {
      "pos": 2,
      "list": [
        { "effect": "HARMONY", "pitch": 2.0 },
        { "effect": "SAMPLE", "speed": 2.0 },
        { "effect": "REVERB", "time": 1.0, "spring": 0.5 },
        { "effect": "DELAY", "time": 0.1, "echo": 0.5 }
      ],
      "handle": { "row": 2, "param": "pitch", "depth": -0.2 },
      "trigger": { "row": 1 }
    }
  ]
}

effects


BALANCE:
  balance [0.0, 1.0]
DELAY:
  time [0.0, 1.2]
  lowpass-cutoff [0.0, 1.0]
  highpass-cutoff [0.0, 1.0]
  wet-level [0.0, 1.0]
  dry-level [0.0, 1.0]
  echo [0.0, 1.0]
  cross-feed [0.0, 1.0]
  balance [0.0, 1.0]
DIST:
  amount [0.0, 40.0]
  highpass-cutoff [0.0, 1.0]
  lowpass-cutoff [0.0, 1.0]
  mix [0.0, 1.0]
HARMONY:
  dry-level [0.0, 1.0]
  pitch [0.50, 2.0]
HIGHPASS:
  cutoff [0.0, 1.0]
LOWPASS:
  cutoff [0.0, 1.0]
SAMPLE:
  speed [0.0, 4.0]
  pitch [-24.0, 24.0]
  level [0.0, 1.0]
  balance [0.0, 1.0]
REVERB:
  dry-level [0.0, 1.0]
  wet-level [0.0, 1.0]
  time [0.0, 1.0]
  spring-mix [0.0, 1.0]
  highpass-cutoff [0.0, 1.0]
RING:
  frequency [0.0, 20000.0]
  mix [0.0, 1.0]
SSB:
  frequency [-20000.0, 20000.0]

LFO shapes


  [ sine, square, sawtooth, random ]
8 Likes

Awesome work, and thanks for sharing!

I was looking at RP2350s and audio hats for it yesterday, and hoping that someone makes a DIY version of the ting…

2 Likes

I’ve played with the config file a lot to dial in vocal effects for the Ting and it’s absolutely awesome.

Things I know:

  • Handle, Shake, and LFO can modify effects as well as sample playback parameters (pitch, volume, pan, etc)
  • Placement of the Sample effect can disable playback entirely–not 100% sure what’s going on there; talking to support about it
  • Sample playback can also be run through effects

Things I’m not sure about yet:

  • Can you apply multiple LFOs? Can handle/shake modulate multiple parameters, and if so what’s the syntax for that?
  • How do you use buses? Can you set different mix amounts for different buses?
1 Like