ConvertWithMoss icon indicating copy to clipboard operation
ConvertWithMoss copied to clipboard

REQ: Please add support for TE OP-XY multisample patches

Open krunchr opened this issue 11 months ago • 1 comments

Thanks for ConvertWithMoss, which has already helped me a lot. I have owned an OP-XY from Teenage Engineering for some time now. I would be delighted if you could find the time to support this device in ConvertWithMoss at some point.

  • The OP-XY supports multisamples and reads the root key and loop markers from the sample chunk of wave files. However, compiling your own multisamples on the device is tedious and not yet fully developed.
  • Its dedicated format for multisample patches is relatively open: It consists of a folder containing the individual wave files and a .json file with the mapping and meta information (example below).
  • There is a online multisample patch generator that works perfectly but does not convert any other sample formats. You can drag the individual samples onto it and the tool then automatically generates a patch file for the XY (provided the wave files contain the tags).

Here is an example for the .json file mentioned above:

{ "engine": { "bendrange": 13653, "highpass": 0, "modulation": { "aftertouch": { "amount": 30719, "target": 4096 }, "modwheel": { "amount": 32767, "target": 10240 }, "pitchbend": { "amount": 16383, "target": 0 }, "velocity": { "amount": 16383, "target": 0 } }, "params": [ 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384 ], "playmode": "poly", "portamento.amount": 0, "portamento.type": 32767, "transpose": 0, "tuning.root": 0, "tuning.scale": 0, "velocity.sensitivity": 10240, "volume": 16466, "width": 3072 }, "envelope": { "amp": { "attack": 0, "decay": 20295, "release": 16383, "sustain": 14989 }, "filter": { "attack": 0, "decay": 16895, "release": 19968, "sustain": 16896 } }, "fx": { "active": false, "params": [ 19661, 0, 7391, 24063, 0, 32767, 0, 0 ], "type": "svf" }, "lfo": { "active": false, "params": [ 19024, 32255, 4048, 17408, 0, 0, 0, 0 ], "type": "element" }, "octave": 0, "platform": "OP-XY", "regions": [ { "framecount": 238140, "gain": 0, "hikey": 48, "lokey": 0, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 48, "reverse": false, "sample": "horizon C2.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 }, { "framecount": 238140, "gain": 0, "hikey": 54, "lokey": 49, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 54, "reverse": false, "sample": "horizon F#2.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 }, { "framecount": 238140, "gain": 0, "hikey": 60, "lokey": 55, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 60, "reverse": false, "sample": "horizon C3.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 }, { "framecount": 238140, "gain": 0, "hikey": 66, "lokey": 61, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 66, "reverse": false, "sample": "horizon F#3.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 }, { "framecount": 238140, "gain": 0, "hikey": 72, "lokey": 67, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 72, "reverse": false, "sample": "horizon C4.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 }, { "framecount": 238140, "gain": 0, "hikey": 78, "lokey": 73, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 78, "reverse": false, "sample": "horizon F#4.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 }, { "framecount": 238140, "gain": 0, "hikey": 84, "lokey": 79, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 84, "reverse": false, "sample": "horizon C5.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 }, { "framecount": 238140, "gain": 0, "hikey": 90, "lokey": 85, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 90, "reverse": false, "sample": "horizon F#5.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 }, { "framecount": 238140, "gain": 0, "hikey": 127, "lokey": 91, "loop.crossfade": 0, "loop.end": 238140, "loop.onrelease": true, "loop.enabled": true, "loop.start": 158760, "pitch.keycenter": 95, "reverse": false, "sample": "horizon B5.wav", "sample.end": 238140, "sample.start": 0, "tune": 0 } ], "type": "multisampler", "version": 4 }

krunchr avatar Jan 31 '25 09:01 krunchr

Once I am done with Deluge I can take a look at doing this, as I have an XY too.

gramster avatar Mar 06 '25 20:03 gramster