Oopsy = Electrosmith Daisy via Max/MSP gen~

Cwejman, Livewire, TipTop Audio, Doepfer etc... Get your euro on!

Moderators: Kent, luketeaford, Joe.

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Mon Dec 28, 2020 2:06 pm



I've really been looking forward to announcing this!

*Oopsy* is a way to embed the precise flexibility of Max/MSP's gen~, from microtemporal scheduling to single-sample feedback loops, into the hands-on flexibility and performative happy accidents of modular analog and digital hardware, using Daisy-enabled devices such as the Eurorack DaisyPatch.

I got excited about Daisy hardware when I heard about the kickstarter, and backed the DaisyPatch immediately, as I'm really fascinated by the possibility of putting the capacities of digital signal processing and control in gen~ into the midst of modular analog and digital hardware. The folks at Electrosmith kindly sent me some other Daisy hardware, and in spare moments over the past months I put together this Oopsy package to streamline the mapping of gen~ to the Daisy hardware.

Right now Oopsy is in beta but it's working great for the most part. It's now open sourced on the ElectoSmith Github, and I'll be continuing to add more features, hardware support (e.g. Noise Engineering's Versio), examples, and posting videos into the youtube channel above.

What?
- What is gen~? An open-ended domain of audio-processing inside of Max/MSP, which regenerates its optimized machine code with every edit you make, allowing a variety of things that are difficult or impossible to patch normally, like sample accurate granular scheduling and single sample feedback for complex filters. Also the code can be exported as C++ for use outside of Max for embedded devices etc. Also gen~ was kind of my PhD thesis 🙂
- What is Daisy? A fantastic kickstarted DSP platform that runs in Eurorack, guitarpedals, synths, etc.-- with a few commercial users already like Noise Engineering Desmodus Versio, the QuBit Surface & Data Bender, etc.
- What does Oopsy do? It snoops your Max patch, exports and snoops and the C++ code of each gen~ it finds, and wraps that up in a bundle of code to make it work with the Daisy with some nifty mappings. So, every time you hit Ctrl-S to save, it can rebuild & upload to your Daisy hardware.

Where:
- Get Oopsy from https://github.com/electro-smith/oopsy
- Get Max/MSP + gen~ from https://cycling74.com
- Get Daisy from https://www.electro-smith.com/daisy
- Oopsy on the Electrosmith forum: https://forum.electro-smith.com/t/meet- ... OEDUMXZ8nc


HOW TO USE IT:
- First, install per the instructions on the Github site at https://github.com/electro-smith/oopsy
- Drop an oopsy object into any Max patcher with one or more gen~ objects in it, and every time you save the patch it will generate code and try to upload to the Daisy hardware. Or, start from one of the template patchers.
- Choose the desired samplerate (lower if you hit CPU limits).
- If the Daisy is plugged in by USB, and ready to flash, every save in Max will upload to the hardware. (Currently making it flash-ready requires pressing the two buttons on the Daisy board, but hopefully soon this won't be required.)

OLED DISPLAY:
- On the DaisyPatch and the DaisyField, Oopsy adds several pages to view on the OLED display: hold the encoder and rotate to switch pages (hold SW1 and press SW2 on the Field); tap encoder or rotate to select and modify options on each page (SW1 and SW2 on the Field).

AUDIO IO:
- Regular [in] and [out] objects in gen~ map to the audio hardware ports. Any undefined outputs will duplicate defined outputs. The DaisyPatch outputs have a very wide voltage range, you may want attentuation in your patch!
- It's a kind of basic general purpose scope too. Use the scope OLED page to view various audio IO channels with different display styles and zoom levels.

CONTROL INPUTS (knobs, switches, cv, gate, etc):
- In gen~, use [param knob1], [param switch2] etc. to access these. The OLED param page shows params along with mapped controls and current values.
- You can append a label like [param knob1_wetmix], which will show on the [param] OLED page.
- Most controls range 0..1 by default, but this can be changed by setting @min and @max on the [param] object. CV inputs map 0-5v to this range.
- Hardware inputs might have a little electronic noise, which can be filtered using abstractions such as [oopsy.ctrl.smooth3].
- Oopsy will automap unused manual controls like knobs, switches to any unmapped params. Any additional unmapped params can be modified on the DaisyPatch OLED param page using the encoder.

CONTROL OUTPUTS (cv/gate/led etc.):
- Use [out 5 cv1], [out 6 gate] etc -- using any gen~ out number that hasn't been used for audio or another purpose.
- The gen~ outs expect ranges of 0..1 (unipolar) or -1..1 (bipolar). These ranges become 0-5v on cv/gate outputs.
- Gate outs have very low latency, but triggers/gates shorter than a couple of ms might be missed, use [oopsy.gate.min] to ensure they are long enough.

MIDI:
- Oopsy provides a few objects for handling raw MIDI IO within gen~ patching for maximum flexibility, as well as streamlined MIDI mappings for specific midi events such as continuous controllers, drum note velocities and so on, e.g. using [out 6 midi_cc1] etc. MIDI IO activity is displayed next to the CPU indicator on the OLED. See the midi example patches for more details.

MULTIAPP:
- If you have more than one gen~ object in the patch, Oopsy will combine them into a 'multi-app' firmware: each app will be available to switch between on the hardware. On the DaisyPatch and DaisyField, Use the OLED app page to switch between them. On the Petal use the encoder ring.
- App changing is fast -- about 2ms -- and silent. MIDI-enabled Daisy devices will switch app in response to MIDI program change messages.
- So it could be a kind of Disting or O_C kind of thing if you want :hihi:

PERFORMANCE:
- Several OLED pages display the CPU use percentage. The Seed LED also displays this as the pulsewidth of its 1Hz flash.
- Watch out for algorithms with for/while loops that might cause sudden CPU spikes, these may cause dropouts or freezes.
- Multiple apps do not use any extra runtime memory, but do add up to program memory; flashing will fail if too much program memory is used. Runtime memory use is displayed on the OLED console page. Oopsy will use fast SRAM for the core algorithm and most data resources, and will fall back to slower SDRAM for larger delays and data storage.
- Exporting for 96kHz uses about twice the CPU as for 48kHz.

Suggestions/ideas/patch shares/etc. very welcome!

hippasus
Common Wiggler
Posts: 228
Joined: Sun Feb 02, 2014 10:47 pm
Location: Helsinki

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by hippasus » Mon Dec 28, 2020 2:43 pm

Wow, great work!!. Thank you for sharing the details. I don't have a module but I did get the daisy board, it is now ready for more experimentations. Do you mind to share your phd work, it sound really interesting.
Cheers

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Mon Dec 28, 2020 2:50 pm

Sure -- it's not on a public URL but ping me a request on researchgate:
https://www.researchgate.net/publicatio ... ional_Arts

Oopsy doesn't have generic support for the bare board yet, but most of what it needs is whipping up a JSON config file according to whatever you have hooked into the pins. It's in the roadmap to make this a bit more easy to configure, but if you look at the existing configs in the /source folder it should hopefully make sense! E.g., here's the DaisyPod's: https://github.com/electro-smith/oopsy/ ... y.pod.json

User avatar
deftinwulf
Veteran Wiggler
Posts: 680
Joined: Sun Nov 03, 2013 10:34 am

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by deftinwulf » Mon Dec 28, 2020 4:07 pm

This is surely going to be an amazing platform for DaisyPatch owners to use. Sorry for a noobish question, but will this ever be usable on other Daisy-core devices, like the Qu-Bit Surface?

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Mon Dec 28, 2020 5:32 pm

Yes, likely over the next month or so more Daisy core devices should be added.

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Thu Dec 31, 2020 6:59 am

Forgot to mention -- they have an end of year sale with 10% off right now at https://www.electro-smith.com

AnalogDigits
Common Wiggler
Posts: 108
Joined: Fri Nov 20, 2020 4:11 pm

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by AnalogDigits » Fri Jan 01, 2021 12:14 am

Holy cow. Very impressive. :wow: :mygod:

Having just received a Patch and a Pod last week, this is super-exciting to see.
Thanks for all that you’ve put into this!

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Fri Jan 01, 2021 8:12 pm

Update for 1/1/2021: Noise Engineering (Desmodus/Imitor/etc.) Versio support will be in the next update, hopefully pushed out this week ;)

stringtapper
Common Wiggler
Posts: 218
Joined: Wed Oct 11, 2017 3:04 pm
Location: Denton, TX

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by stringtapper » Tue Jan 05, 2021 5:29 am

Very interesting project!

I have done a fair share of Gen~ work over the past 8 years, mostly coding filters and effects from the ground up and doing some physical modeling stuff.

So how does the Daisy compare to similar units like the Owl or the Mod Duo?

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Tue Jan 05, 2021 7:12 am

Hi @stringtapper, yes I recognize you from chatting about gen patching on the c74 forums over the years!

I haven't used the Owl or Mod Duo systems and wasn't involved in the gen integration there so I can't say first hand. They both look great but I'm probably not the best person to ask about comparing them; and of course it depends what you are looking for!

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Tue Jan 05, 2021 7:57 am

I realize that wasn't a super helpful reply, so at least I can provide links and basic info I know or can find about them below:

Daisy is based on an embedded DSP platform using ARM Cortex-M7, 8mb/64mb. Software is open source. Supports Max, PD, Faust, etc. Load multiple apps on a hardware. Upload Max patches from within Max using Oopsy (or on a console using Node.js), or from other hosts via a website, and USB cable.
Euro modules: Electrosmith also create Daisy-based desktop/stompbox formats which are all supported by Oopsy.
The embedded DSP platform (Seed) is available for custom DIY projects (https://www.electro-smith.com/daisy/daisy); support for this in Oopsy will come soon.

OWL software is open source. Supports Max, PD, Faust, etc. Big patch library already exists. Load multiple apps on a hardware. Upload Max patches to hardware via the rebeltech.org website and a USB cable.
Euro modules: Owl/Max tutorial: https://www.rebeltech.org/2016/11/10/ow ... g-started/
Rebeltech also create Owl-based desktop/stompbox formats with Max export support.

MOD Devices seems to be based on an Arduino shield, which you can order and use for custom hardware. Hexa-core 64 bit ARM CPU. 48kHz audio. Classic/USB MIDI IO. 2x2 audio IO, 2x2 cv IO. Has a web-based visual programmer that looks like stompbox chains; a kind of plugin network. Max/gen~ patchers are converted to plugins, so you can network several together or rearrange them along with other plugins, which is neat. Upload to cloud compiler via the Mod Duo package within Max, the command line and USB. Huge library of plugins for it.
I couldn't find a euro module by Mod Devices (thought they had one but I guess I was wrong) -- there are desktop & footpedals:
https://www.moddevices.com/products
Max/gen~ tutorial https://wiki.moddevices.com/wiki/Max_gen~ and more info: https://cycling74.com/feature/modduo

Someone please correct me if I got any of that wrong! :sstorm:
Last edited by grrrwaaa on Thu Jan 07, 2021 7:23 am, edited 2 times in total.

stringtapper
Common Wiggler
Posts: 218
Joined: Wed Oct 11, 2017 3:04 pm
Location: Denton, TX

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by stringtapper » Tue Jan 05, 2021 12:47 pm

grrrwaaa wrote:
Tue Jan 05, 2021 7:57 am
I realize that wasn't a super helpful reply, so at least I can provide links and basic info I know or can find about them below:

Daisy is based on an embedded DSP platform using ARM Cortex-M7, 8mb/64mb. Software is open source. Supports Max, PD, Faust, etc. Load multiple apps on a hardware. Upload Max patches from within Max using Oopsy (or on a console using Node.js), or from other hosts via a website, and USB cable.
Euro modules: Electrosmith also create Daisy-based desktop/stompbox formats which are all supported by Oopsy.
The embedded DSP platform (Seed) is available for custom DIY projects (https://www.electro-smith.com/daisy/daisy); support for this in Oopsy will come soon.

OWL is based on ARM Cortex M4. 192kb/1Mb flash/RAM. Software is open source. Supports Max, PD, Faust, etc. Big patch library already exists. Load multiple apps on a hardware. Upload Max patches to hardware via the rebeltech.org website and a USB cable.
Euro modules: Owl/Max tutorial: https://www.rebeltech.org/2016/11/10/ow ... g-started/
Rebeltech also create Owl-based desktop/stompbox formats with Max export support.

MOD Devices seems to be based on an Arduino shield, which you can order and use for custom hardware. Hexa-core 64 bit ARM CPU. 48kHz audio. Classic/USB MIDI IO. 2x2 audio IO, 2x2 cv IO. Has a web-based visual programmer that looks like stompbox chains; a kind of plugin network. Max/gen~ patchers are converted to plugins, so you can network several together or rearrange them along with other plugins, which is neat. Upload to cloud compiler via the Mod Duo package within Max, the command line and USB. Huge library of plugins for it.
I couldn't find a euro module by Mod Devices (thought they had one but I guess I was wrong) -- there are desktop & footpedals:
https://www.moddevices.com/products
Max/gen~ tutorial https://wiki.moddevices.com/wiki/Max_gen~ and more info: https://cycling74.com/feature/modduo

Someone please correct me if I got any of that wrong! :sstorm:
Wow, ok! Really didn't expect you to do all that research, but I do appreciate it!

The Daisy environment looks like it's a few steps beyond the other two, what with multiple Eurorack modules. Very cool!

stringtapper
Common Wiggler
Posts: 218
Joined: Wed Oct 11, 2017 3:04 pm
Location: Denton, TX

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by stringtapper » Tue Jan 05, 2021 6:54 pm

grrrwaaa wrote:
Tue Jan 05, 2021 7:12 am
Hi @stringtapper, yes I recognize you from chatting about gen patching on the c74 forums over the years!
Oh snap, you're Graham Wakefield.* I saw the Oopsy post over at C74 but didn't see it was you posting. Now the Ph.D. comment makes sense. Well that makes it even more exciting knowing you're behind it.

Dammit, now I gotta get one of these modules! :mrgreen:


*Just one of the co-authors of Gen. No biggie. :woah: :hail:

antisvin
Learning to Wiggle
Posts: 35
Joined: Sun Jan 01, 2017 9:58 am
Location: Mother Russia

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by antisvin » Wed Jan 06, 2021 8:19 am

Ok, since Graham asked for corrections, I will make a few:

1. Daisy doesn't have USB MIDI (yet). OWL has it, now it even has USB audio support.

2. Daisy Patch doesn't have I2C port (Daisy itself does, but those pins are configured for other functions on Patch)

3. There are 2 generations of OWL board. They first one was used by OWL modular/pedal, everything else is on second generation board. OWL2 had a slight MCU upgrade, SDRAM chip was increased to 8Mb and better audio codec. It also added USB host to some devices (Magus, Lich).

4. Speaking of euro modules, Rebeltech also made eurorack version of Magus (for anyone needing 20 CV channels and OLED display).

5. Daisy Patch has AC coupled inputs, making it not usable for V/Oct control via codec inputs. This is my biggest annoyance. Second biggest is MCU model with 128kb of internal flash.

Also, the big difference between OWL and Daisy is that OWL firmware is acting like an OS for your patches. There is an actual RTOS that runs on it, allowing to load patches dynamically. There's no direct access to hardware from user patches, instead of that OWL provides various abstractions. This also allows running the same patch binary on different hardware.

With Daisy you're running a single firmware image that accesses hardware directly. And with Oopsy you'll be able to switch sub patches, but you can't overwrite one of them without reflashing the whole firmware.

As for ModDuo - I don't know much about their hardware. But looks like it runs Linux, so it should probably be compared to something like Bela or Qu-Bit Nebula rather than baremetal code running on MCU.

mouren
Learning to Wiggle
Posts: 27
Joined: Fri Mar 15, 2019 9:26 pm

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by mouren » Wed Jan 06, 2021 1:49 pm

This is awesome, Graham!

Thank you! I backed the Daisy when it first came on kickstarter.

So, I was wondering if you could elaborate a little on the microtemporal scheduling that you are talking about? That's not something I have heard of.

Thank you!

stringtapper
Common Wiggler
Posts: 218
Joined: Wed Oct 11, 2017 3:04 pm
Location: Denton, TX

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by stringtapper » Wed Jan 06, 2021 2:34 pm

antisvin wrote:
Wed Jan 06, 2021 8:19 am
Ok, since Graham asked for corrections, I will make a few:

1. Daisy doesn't have USB MIDI (yet). OWL has it, now it even has USB audio support.

2. Daisy Patch doesn't have I2C port (Daisy itself does, but those pins are configured for other functions on Patch)

3. There are 2 generations of OWL board. They first one was used by OWL modular/pedal, everything else is on second generation board. OWL2 had a slight MCU upgrade, SDRAM chip was increased to 8Mb and better audio codec. It also added USB host to some devices (Magus, Lich).

4. Speaking of euro modules, Rebeltech also made eurorack version of Magus (for anyone needing 20 CV channels and OLED display).

5. Daisy Patch has AC coupled inputs, making it not usable for V/Oct control via codec inputs. This is my biggest annoyance. Second biggest is MCU model with 128kb of internal flash.

Also, the big difference between OWL and Daisy is that OWL firmware is acting like an OS for your patches. There is an actual RTOS that runs on it, allowing to load patches dynamically. There's no direct access to hardware from user patches, instead of that OWL provides various abstractions. This also allows running the same patch binary on different hardware.

With Daisy you're running a single firmware image that accesses hardware directly. And with Oopsy you'll be able to switch sub patches, but you can't overwrite one of them without reflashing the whole firmware.

As for ModDuo - I don't know much about their hardware. But looks like it runs Linux, so it should probably be compared to something like Bela or Qu-Bit Nebula rather than baremetal code running on MCU.
Interesting. Thank you for the clarifications!

mouren
Learning to Wiggle
Posts: 27
Joined: Fri Mar 15, 2019 9:26 pm

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by mouren » Wed Jan 06, 2021 5:17 pm

antisvin wrote:
Wed Jan 06, 2021 8:19 am
Ok, since Graham asked for corrections, I will make a few:

1. Daisy doesn't have USB MIDI (yet). OWL has it, now it even has USB audio support.

2. Daisy Patch doesn't have I2C port (Daisy itself does, but those pins are configured for other functions on Patch)

3. There are 2 generations of OWL board. They first one was used by OWL modular/pedal, everything else is on second generation board. OWL2 had a slight MCU upgrade, SDRAM chip was increased to 8Mb and better audio codec. It also added USB host to some devices (Magus, Lich).

4. Speaking of euro modules, Rebeltech also made eurorack version of Magus (for anyone needing 20 CV channels and OLED display).

5. Daisy Patch has AC coupled inputs, making it not usable for V/Oct control via codec inputs. This is my biggest annoyance. Second biggest is MCU model with 128kb of internal flash.

Also, the big difference between OWL and Daisy is that OWL firmware is acting like an OS for your patches. There is an actual RTOS that runs on it, allowing to load patches dynamically. There's no direct access to hardware from user patches, instead of that OWL provides various abstractions. This also allows running the same patch binary on different hardware.

With Daisy you're running a single firmware image that accesses hardware directly. And with Oopsy you'll be able to switch sub patches, but you can't overwrite one of them without reflashing the whole firmware.

As for ModDuo - I don't know much about their hardware. But looks like it runs Linux, so it should probably be compared to something like Bela or Qu-Bit Nebula rather than baremetal code running on MCU.
I believe Daisy Patch also has DC coupled CV inputs, which can be used for v/oct.

antisvin
Learning to Wiggle
Posts: 35
Joined: Sun Jan 01, 2017 9:58 am
Location: Mother Russia

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by antisvin » Thu Jan 07, 2021 3:42 am

ADC inputs are sampled once per audio block (48 samples by default on Daisy) rather than per sample, are more noisy and less precise compared to audio codec inputs. I can hardly consider them an adequate substitute for those reasons. Especially for patches where I don't need some codec inputs for anything else. So the reason why you're seeing them used for pitch input on Daisy is that there's no other way to capture it - not that it gives you the same results as using a DC coupled audio codec input.

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Thu Jan 07, 2021 8:04 am

Thanks @antsvin for the additional details & corrections! I'm sorry I missed the Magus eurorack version (wasn't listed on their "eurorack" product page at https://www.rebeltech.org/product-category/eurorack/), that looks really nice; have added to the list in the post above.

You're right, the i2c isn't usable on the DaisyPatch because the pins are used for something else, I guess the post above suggested otherwise and I'll fix that. USB MIDI (host/device) I'm told is coming very soon, have also amended the post. Have also amended to note that the 4x4 audio IO on the Daisy Patch is AC-coupled (I do agree that it's a pity they aren't DC coupled.)

The CV inputs on the Patch are indeed sampled at 48 samples, which is 1ms or 0.5ms depending on the sampling rate chosen when flashing. I couldn't find the info on the rebeltech website about whether the audio IOs are DC-coupled or what sampling rate the CV IOs are at, can you let me know? (Thanks!)

The 128kb flash space for firmware on the Daisy may be a constraint, but I've been surprised how much I can fit in there; gen~ code is fairly lean in size (I am seeing an average around 5-10k per app including some pretty complex algorithms) with a baseline of 50-60k depending on the hardware config IIRC. So I was able to load 8 pretty complicated/heavy patches into it without hitting the memory limits. (And though this won't apply to everyone, I'm of the mentality that eight apps is enough... I have an ornament & crime running hemispheres which is super handy but I can't deal with how many different apps it has -- no way I can remember how to use them all, so I tend not to reach for it as much...)

BTW I tried comparing to Mod Duo because that's what @stringtapper asked; I agree that comparing to Nebulae etc. makes more sense from a hardware perspective, but I guess @stringtapper might have been asking because there's an existing gen~ workflow for it.

(Also I guess I should mention: I do not work for Electrosmith, I mean, I am not paid by them I mean, other than they sent me some of the Daisy hardware to test against and have been very responsive & helpful --- Oopsy is *mostly* a voluntary project, Daisy happened to happen at a moment that I wanted to do something like this with gen~ ;) )

antisvin
Learning to Wiggle
Posts: 35
Joined: Sun Jan 01, 2017 9:58 am
Location: Mother Russia

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by antisvin » Thu Jan 07, 2021 11:20 am

Ok, so I know that there would be support for USB MIDI in libDaisy, I've discussed that with Stephen recently a bit on forum. But there's no USB host on any Daisy based hardware. It's possible to create a new device that has it, because necessary MCU PINs are exposed. That would still require a few extra ICs to deal with power and so far nobody has done this. This might even be a chicken and egg problem.

I can tell you for sure that OWL uses DC coupled on both revision. At least the first OWL could be used as AC coupled if someone would want this - its codec HF filter is exposed via I2C. I don't think anyone ever did this, but I've tried that with another device running the same codec.

OWL runs with fixed SR = 48kHz, BS = 64. So CV would be sampled at 750Hz (every 1.33ms). It would probably be possible to change that (and there are necessary MIDI commands already), but it's not quite straightforward as it has to be done for multiple codecs, then there's USB audio now that shares DMA buffer with codec. It was possible with the old firmware that ran on OWL1 only.

Regarding 128kb flash, I think that the problem with it is not just small size, but the fact that there's just one sector. And you must erase flash by sectors before writing. So for a complex firmware (like OWL), you don't have a choice but to use it for bootloader only and move everything to QSPI flash. And then firmware and patches would be stored on QSPI chip. The problem here is that you won't be able to write and execute from QSPI chip (i.e. run firmware and store patch uploaded as MIDI SYSEX), which adds another requirement - to execute firmware from RAM. That's what was done to run OWL firmware on Daisy. I know that similar solutions (bootloader, QSPI execution) might be added to libDaisy too, but this is far from trivial.

Btw, a typical OWL patch compiles to something like 16kb +-50%. In this case, there's no baseline, as that part is included in OWL firmware. And the OWL firmware build for Daisy patch (without lookup tables) was about 96kb. I imagine that USB (disabled in libDaisy by default) + USB MIDI would require about 20kb extra (current code mentions using +16kb if USB is enabled).

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Thu Jan 07, 2021 2:38 pm

Thanks for clarifying!

I can see now why the flash situation is more limiting for running the OWL firmware on Daisy, that makes sense. With Oopsy's code generation being more directly mapped to the hardware, and able to strip out anything the apps don't require, there is less overhead, at the cost of having to reflash firmware to add/remove "apps" (rather than installing them via sysex etc.) Always trade-offs! At least flashing only takes a couple of seconds.

BTW I've been using "app" terminology though I really don't like it--reminds me too much of mobile dev--but "patch" seemed a bit confusing in the context of a physical modular synth, "mode" is a bit too vague, and O_C use "app" so I just copied them. In fact originally multi-app wasn't even in the roadmap for Oopsy, I just figured out one day that it might not be too hard to add, tried it, and was pretty surprised how lightweight it was. (Even more unexpected was that app changing can happen in a couple of milliseconds. Not sure if that's actually useful for anyone but hey, it's there.)

antisvin
Learning to Wiggle
Posts: 35
Joined: Sun Jan 01, 2017 9:58 am
Location: Mother Russia

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by antisvin » Thu Jan 07, 2021 3:17 pm

I would call them "subpatches" - that would keep top level "patch" definition more or less similar to OWL patch. I guess that they would also add some form of patch (firmware) switching in libDaisy eventually as part of QSPI storage support. But that would require either using a read-only storage or relocating FW to RAM.

Actually the way patches on OWL are being run is very interesting. It's a standalone C++ program that doesn't exit its main function or have access to hardware. It's launched inside a RTOS task and it gets blocked until a new audio buffer is available in audio callback. And there's a shared memory area with predefined structure used to exchanged data and callbacks with main firmware. This makes patches portable and switchable on the fly. And there's a protocol for exchanging data/callbacks between patches and firmware, so new functionality can be added without breaking older patches or firmware, etc.

Ok, I'm done ranting, won't be stealing the spotlight from Oopsy anymore.

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Thu Jan 07, 2021 8:02 pm

Cool, thanks for the explanation!

User avatar
dmartinho
Learning to Wiggle
Posts: 9
Joined: Sun May 24, 2020 6:09 pm

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by dmartinho » Sun Mar 28, 2021 4:29 pm

grrrwaaa wrote:
Fri Jan 01, 2021 8:12 pm
Update for 1/1/2021: Noise Engineering (Desmodus/Imitor/etc.) Versio support will be in the next update, hopefully pushed out this week
Can I use Oopsy on Max to flash to a Desmodus Versio?

User avatar
grrrwaaa
Common Wiggler
Posts: 144
Joined: Wed Sep 16, 2020 8:00 pm
Location: Toronto
Contact:

Re: Oopsy = Electrosmith Daisy via Max/MSP gen~

Post by grrrwaaa » Sun Mar 28, 2021 8:20 pm

dmartinho wrote:
Sun Mar 28, 2021 4:29 pm
Can I use Oopsy on Max to flash to a Desmodus Versio?
Yes.

You get full access in gen~ to all knobs, CVs, switches, gate and the button, as well as LEDs and of course stereo IO audio. The Daisy audio can be configured from Max up to 96kHz. Audio is processed in blocks with CV , gate, knobs etc sampled at block rate; block sizes down to a single sample (but CPU performance gets a lot worse below about 8 samples). Audio processing is 32-bit.

Right now it works on the dev branch of Oopsy in git, and will be in the next release package.

Should work for all Versio models, they are the same other than panel and firmware.

Post Reply

Return to “Eurorack Modules”