teoperator - code for making op-z and op-1 patches

teoperator

as a op-1 user I found not many tools to make patches - i.e. to convert some sound into a sample patch, or to create kits for drums or create custom splice points from other audio. there are a few tools I know of - op1.fun for building drums, a vst also for building drums, and a javascript page that can convert synths. couldn’t find the source for any of these and I still wanted to do some custom things like bulk conversions and equally spaced splice points so I opted to make my own open-source tool.

the result is this little tool called teoperator: teoperator lets you easily make drum and synth patches for the op-1 or op-z. you can use most of the functionality via the website teoperator.com and you can also use this software via a command-line program that gives you more functionality - to create a variety of patches from any kind of music file (wav, aif, mp3, flac all supported). I did a write-up of how it works, basically I had to reverse engineer pieces of the metadata in the op-1 and op-z patches.

here’s the code which also has binaries to download (you would need to install ffmpeg first):

Make a drum loop patch

currently my favorite use is to make equally spaced splice points which I do with the command-line program by running:

teoperator drum --slices 16 drumloop.wav

then you can load up these samples onto the op-1 or op-z and sequence them and they play in sync and can have all sorts of fun mangling them:

To make a synth patch just type:

teoperator synth piano.wav

Optionally, you can include the base frequency information which can be used on the op-1/opz to convert to the right pitch:

teoperator synth --freq 220 piano.wav

Make a drum kit patch

To make a drumkit patch you can convert multiple files and splice points will be set at the boundaries of each individual file:

teoperator drum kick.wav snare.wav openhat.wav closedhat.wav

Make a drum sample patch

To make a sample patch you can convert one sample and splice points will be automatically determined by transients (transient discovery is not ideal…):

teoperator drum vocals.wav

todo

  • there are likely bugs, lmk if you find them.
  • I started, but not finished, a capability to make custom synth (engine) patches for the op-1 (or even random patches)
47 Likes

all of this is amazing!
thank you

edit: does the 12s rule still apply or does this squeeze more audio into the space somehow?

4 Likes

This is really nice and useful, thank you!

Regarding randomizing patches, punji from op-forums has made a patch randomizer. I bet they’d be willing to share the code if that would help you implementing those kinds of features?

3 Likes

thanks for the kind words @glia and @vehka

yep - 12s max for drum patches. if you use the web app it will take longer audio though and automatically split it up into 12s pieces (currently with 1 second overlap, which is not editable…yet). if you are doing the splicing for loops, its better to keep your loop total length < 12 seconds.

yeah that would help a lot! a lot of the hacking was done by deduction and lots of trial and error (and many factory resets after making the op-1 mad…lol). I believe that my implementation is working for synth engine patches but I ran out of bandwidth to test every engine thoroughly. I would feel better about releasing the feature if my implementation matches up with others.

3 Likes

dude this is cool thanks for doing this can’t wait to try this out.

3 Likes

Did you (or anyone else) write code for softcut to read op1 sample files and map the slices to keys (or at least pull out the locations for whatever later use)? Hoping to do this myself but thought it best to see if anyone has already done it.

I’ve never written code for softcut to read op1 sample files. op1 sample files are super easy to read - their is JSON information right in the header you can extract with simple tools (like head and tail and jq). would be cool to see! let me know if you get that going

Yes, looks like it should go well. Hopefully will have a chance soon. I also want to add functions to split evenly ala Elektron style sample chains.