Meet Oopsy: Daisy Object for Max/MSP Gen~

OK just got program-change MIDI event to switch app on multi-app binaries working; that should be in the next release update in the next days.

In a quick test switching apps by sending MIDI from Max/MSP, I seem to be able to switch between them up to about 300Hz (3ms), so maybe ok for drums (though it’s kind of crazy really).

2 Likes

Wow thanks so much @grrrwaaa for such quick response. That’s amazing support. :raised_hands:

Wonder if you have considered having some sort of representation of incoming CV to Daisy on the screen? I work with Daisy Patch and it would be really useful to see incoming CV or it’s scaled values and how they are affecting the patch visible on the screen. I understand this might take resources but perhaps as an optional feature or an argument as a switch before compiling? for testing/debugging patches it would be great. I am using other modules at the moment to do that. The implemented visualisations are great btw and love patching with them or towards them.
See here FM/PM VCO with reverb in one patch: https://www.instagram.com/p/CIzECveB4Df/

I am using 5x CV inputs and 4x outputs of the Daisy Patch. Using audio input for CV hence 5.
If there was a way of addressing the screen or controlling visualisations from the gen patch that would be ace too tho not sure what would be the penalty in terms of CPU and/or memory available.

@Manysounds you are totally right and I am already doing that too actually just getting used to gen. Learning it with Daisy happy days :slight_smile:
With mc.gen one could switch on-off the individual patches as voices, which potentially would be useful if CPU is an issue. Am I correct thinking that? I am yet to reach the CPU limit tho.

3 Likes

@koshimazaki: Displaying incoming CV (actually, param values) is already in the next update, along with the ability to map the encoder to un-mapped params :slight_smile:

1 Like

Love the speed of updates here! Awesome. Visualised param values will be more useful actually. Great stuff about encoder too!
Thank you for your work on this! :pray:

1 Like

Where should we “officially” share patches?
I don’t want to inundate the Daisy forum with ~gen questions. (like: How to phase rotate in ~gen)
SO, ummmm… here: Some Electro Smith Daisy Oopsy ~gen bits.

2 Likes

@Manysounds We’re hoping to put together a hub for this specifically some time next year, but until then feel free to make new Topics in the “Programs and Examples” category for either individual patches, or groups of them. And while there’s definitely no harm in asking gen~ questions here, the cycling74 forum seems a more appropriate place for that. :smile:

In other news, we released a new update for oopsy today:

As with previous updates, the download link(s) within the wiki will automatically grab from this update from now on. Have fun, and hope you all enjoy!

3 Likes

Holy amazing update!
Question: in regards to the ““Dedicated continual MIDI outputs via e.g. [out 5 midi_cc1], [out 5 midi_cc1_ch3], [out 5 midi_drum36], etc”” noted in the update notes… HUGE! !BUT! are you planning the reverse?
As in [in 5 midi_cc1_ch3], [in 5 midi_ch3 @note @velocity] or some such? Potentially awesome! Also confusing! And also sort of unnecessary, but shorthand is always great at patch time!

Unfortunately the Cycling74 forum is a dinosaur of a mess with most searches producing hundreds of results stretching wayyyyy back in time :slight_smile: The Gen~ forum isn’t better :slight_smile: But (sigh) if we must trudge through the mire, we must.

OK, I’m hitting an occasional snag I can’t figure out
SOMETIMES, Oopsy throws up an error then fails and I can’t figure out what causes it

""node.script: an argument specifying the path to at least one gen~ exported cpp file is required
“”
even though I’m obviously working in gen~
even though I had previously compiled and flashed the patch (with incremental changes, obviously)
even though I haven’t added anything “crazy” to the patch since last compile
even though the compiler (in verbose) doesn’t seem to show any errors

FOR Example: I copied a “SallenKey” filter codeblock from an unrelated Max/MSP package.
Put in a gen~ codeblock, plugged in the I/O and it worked great! Compiled and uploaded no problem.
So I copied that same codeblock into a different project and compile and export stopped functioning.
Errrrr…
Something about object naming perhaps?

@Manysounds, that error means that oopsy didn’t find a .cpp file to compile.

If you did this in “verbose” mode, there should be a line somewhere in the Max console that says something like this:

gen~: exported: Macintosh HD:/Users/Manysounds/Documents/Max 8/Packages/oopsy/examples/mygen.cpp
oopsy-verbose: script start patch 48 /Users/Manysounds/Documents/Max 8/Packages/oopsy/examples/mygen.cpp

If that command is missing a .cpp path, that’s what would trigger the error.

Could be for a few reasons:

  1. The (different project) patcher is not saved, so there’s no path to export to.
  2. The gen~ did not export for some reason (e.g. audio was not enabled, or there was some gen~ compile error e.g. missing dependent files)
  3. the [oopsy.patch] is not in the same max patch as the gen~
  4. Some kind of file system issue preventing the path from being read

If you can let me know what that line was for you, and also if you had any errors posted to the Max console, that would help figure it out. Also feel free to continue this conversation on the Slack if you want.

And re: [in 5 midi_cc1_ch3] etc, yes, such dedicated midi inputs are also in the roadmap :slight_smile:

1 Like

Good news about Midi input mappings!
Bright future for the Field incoming!
As for my compile errors, I have some messy file management from all the manic patching I’ve been doing SO I’ll keep my eye on it.
Sometimes I get “node.script: Node child process quit, will restart”, even when opening the Demo patches. There is no clear reason for this visible in verbose mode AND after running in verbose mode: POOF! The error doesn’t re-occur. /shruggie
I’ve also been farming a lot of snippets from “out there” and they may be buggy and/or my messy file management is biting me in the etc.
Amazing work, I’d love to send you a batch of chocolate chip cookies :slight_smile:

@grrrwaaa
First of all, thank you for all your Max involvement over the years. Brilliant.

I have a feature request, and I’m not certain of it’s feasibility but here it is:
I’m making a syncable delay, which turned out to be relatively simple BUT I would like to be able to change the pulse-checking timer to listen to 48, 24, 8, 5, 2, and etc PPQ, all the way to a single PPQ. I’ve implemented a “how many samples per pulse” bit of math which I forward to the Delay object and it works great but is currently hardwired to 24PPQ.
The thing is, I’d like to have an on-screen parameter option that is NOT Float. If I only have two options, in one example “is the delay free running or is it clock synced” then I have to scroll through the at least half the length of the parameter value, 1000 decimal places (on the Patch) to get a simple 0/1 or 1/2.
FWIW, I did set “param FreeSync @min .001 @max .002” and then multiplied by 1000 before a Selector which works for now but is ham-handed.
Is there a way to set Oopsy screen-only parameters to be Zero or 1 integers or 1 through 8 for my delay clock division/multiplier selector?
If not, I’m happy with my .001*1000 workaround, but it doesn’t play well with the knobs/CV

1 Like

So, essentially the request is for some parameters to be forced to integer values? [param cv1_int_mode 1 @min 0 @max 8] etc? [param cv2_int_enable 1 @min 0 @max 1] etc?

I’d been thinking about something like this too; have added to the issues list here: https://github.com/electro-smith/oopsy/issues/32

2 Likes

Amazing.
Yes.
Maybe you’re still reading my mind and are coming up with a way to not only implement external buffers but also to save them to SD card. The ability to turn Daisy into a recording machine is enticing, maybe even four channel wav files mayyyyybe?
I’m freekin inspired.

1 Like

How can we change the order that our Gen~ objects show up on the Patch screen or the Petal’s encoder wheel?

It should be alphabetical based on the gen~ object names. To give a name to each gen~ in a multi-patch, add an @title argument to the gen~ object, e.g. [gen~ @title program1], [gen~ @title program2] etc. would work.

Enjoy my first public Oopsy Daisy made project:
Phaser Super 16 for Petal https://forum.electro-smith.com/t/phasersuper16-petal/1036
IMHO (admires self in mirror) this should be added to the web programmer page :slight_smile:

1 Like

New year, new platform: Noise Engineering Versio devices should be supported in the next update :slight_smile:

3 Likes

“Controller pickup”
Little help here, having an unsuccessful time of getting a classic “MIDI fader/knob pickup” thing working. Brain melting on a Sunday morning.
Simply put: Trying to make an Oopsy for the Field wherein the buttons bring you to different “parameter pages” for the knobs to manipulate BUT don’t want the knobs to auto-dictate the values until they are turned past the current value of the parameter, in a classic MIDI controller mode. This way I can have an oscillator on one button, ADADSR on the next, filter controls the next, etc. BUT only want to pass the value of the knobs on to the objects if the knobs are passing (or near?) the last current value… I think you get what I mean, it’s a “standard” on some midi control schemes and one that is built into Ableton “MIDI Pickup Mode” as an example.

1 Like

Breaking this down into steps:

To tell if a knob has “turned past” a certain value, you can just compare them and see when it changes:

[param knob], [history value] => [> ] -> [change] -> outputs a trigger whenever the knob crosses the value.

For everything else you’ll need triggerable logic states. Every time you need a state you probably need a [history] object to store it. You can whip up a latching logic state (one trigger input sends it high, another trigger input sends it low) by looping a [history], [and] and [or]. The and and or 2nd inputs are the triggers to open and close the state.

You can use one of these to know if you are in a particular mode, and another to remember if the knob has passed the stored value for that mode.

That can be fed into a [latch] (a track & hold operator) to feed the knob value through to the stored value for that mode.

Here’s an example below.


----------begin_max5_patcher----------
2037.3oc2bszjihiD9rqeED9vdpVGHIDO1C6Dyefcur25XhJvFU1zMVP.x0i
oiY9su5E1fM1HYavT8kxkdgx7SYlJyTB94SyluL+CR0bm+ky2blM6mOMalrJ
QEyzkmMea7Gqxhqjca9p7saIT17mUswHevj0GSSbXkwq9QJcccizcay2wxHL
4Pc00llHGP9xu+Ogd0csHlsZCenuTRVwTzCBgW39rCLxU7CvEJKwK37GGd9o
z5GOPT2e8zSh+77MxLoTms4IDGf4bB5BbBD.eTbBgsxbd.dId.6IIdO33yCT
FoTsf.MmY.FvLP2GIyXgzka+LSj2nyKuEmsi37Zt07CH5R589CsxB+ArjT92
cStvNHW+5t9ZNkUk9mD4LKnLU0pgy9rfnXg4UoqowYye1Y9qY4wbF6OZ7.nw
ak8a9uWlJ5jpE9Pjn09G54gFbn3Grp.rAxHVFZxCsPJXCR303UxN5dEnWLiU
tKsavCzA3s2F+InzAXoCdE3hZZvA6dB2JHD4zrbGikSQy6T9PWYRZUQV7m0H
T3Hv3nqiw0JxfPC4a3Py2Vqt.lJpKZOH7gOR8EqgO2IB7U61xCF9HuyQkS16
YMgdFHE0w9my6G5N4+tjNZHRsqjxDUzo5ncpKJePjRMyp4VNBklQdiTVklSa
zatddQQipm0XHBH564xGT3y6qJkppBrupRxao0i+PGiK4rCiyK6JURFe3Wai
VunVR414p2bUtXoII4xhPhppPujNOopXAewn9AL+.HgA9psvAJCZ.o1X.Fc.
m3K9qyxW8CRRCOE3KSEDZJsnjTwc6Hlo4f8MmPdMdWF6kt0OZ29dQutZrSci
YyWWlljSEDQq0CQ00SGe+Irx9bSlQ1CZbQGClKFxAlyzXEmI2UsLtTrbsLqo
REWjOOOqcS6GWF4Ult4hTJ8HTjkWb9FKSWu4BicYNuwsW5YKao5kcTUquvkL
XuTE+VazlEmko0fa+3+HlltMlQXopk.n69FIzXNitoZUYdVVK9U0xaczRBWR
eE48zD1lV10Dsv6dZQsPz78qxIoqIUr10whWW0tlJ1mJPuQU6Vp0jegQ1x2c
kcTG35HoUrpM4uWo6XsfVS.3Pb2M0raZNrU8WxrXaSizbVy56zQkisPhQMGx
4cX4bFDw9tK.PLWgHHP4i5wlDOiq6yp2QPan49CGq1DSWSrFQ7htMDAAiDP.
JveQX.GX7BmLHBeaBqQC7sgFA7cL4f.xUAJdhBWFKfiCVDSSrGL7uKfALP52
fu+3BFsil+Hznj37NwIk5nhsvSFY+ucdDx8LHTv7KCAgvfEvCBD0g43NAzN1
vscmW9o8REg2GoBOo6Rddiq4hKIUPXqVXuHfmoh.dQB9dJIBbMFHg21puONP
sOAfu9K9EFMYrQdMvA3FUF7ltvQQbY71ZCj1iLt2HxDEt.IQFWoBSne+FJbG
efAYMvftQGtBber.ykrfJOYLm+gyl7rDqsjhB6wRJBH84F6J43.3jwNZlfVs
WPH3F871UF7AFpxfJBzubvXYHcGyAIcoB7RgHdY4InXu.geOBD3.Okp.lqJH
Mh59UN3CzMt2JF.Enfm5bS9hG7ABce.C04KLAC9n9VDXeTGHOS0KzhB+JD1A
BeWjGPpjXO1gcbmMT.tOXwuDYo.FcW.iu.Yo.bkYo.Fzq8hne0xRAz+9HU7X
xRQO9VAU9VYuf.1TAAOYNZBvSmjyvJ2wUEd0Il9oVcvIsx4+7e+eNhyOqhzx
vQVJkrJeGk07DlLFl.v9fI9lHgMOF..Tm8aD5q4NJ.2604hLsyiAzZj4F2cw
G7kHMF.qwkaLKvXXvDNKFoqcdeCg57CZ9RGdDrUjJmShgskQFrsFY5aOYj5t
WfvJ8IrLaGb+5e7lWVlmmY+AudWNkQO0MQwjTc.FSkHgbh81buKo+AAvRADc
5vlBFVtZe1tQ.QqwnAjIjOa+a6iv69bn7ZiG78jwSnTCBzoF75xJXeI+PqW3
Cg5qi00IFb31NIryel6vhb5Es2MnTkuqbU8hV80OwoMgjPpXoz8W9qucHnVN
N0ri4kIp6TmYBs1RZBO.Mhzp4gAgJLFfD2Mgi.nsoIE4oTVUsKoQK7gR4dfx
47PO2EGJ2M35NLrkgbkHCvWlqPnPUNdkAngQA6KMPqHhbMYFsiFaQVIZYDo4
eRGG3EbyIsfdkiUFxvtxUbOnLAUxRcyPvGLCcprd2LjWj9z77NsDJHRczVv8
kFUAKjM5qFwrXoZayRCk9J1F80gxNt3RBYtc7AiJ7MkJ5UnMHR4boqLuFMKM
PztzC.iVGAFJCpo8lkFJZ22F2bFpUeickXHIBOSWFwCIQ3Zid.XL2nzyTyUc
XQ4LpnpafbfJ40sKAQxjMo6orzPoBXp1qBvGFEf.SUC6CZQ.4YDh8UWt6P0t
ysJACU25fH04lHJMpNbYJu5cdWAAOVGng3w1KUOSIMO3.JlFYCQLXlHMUgUF
mL3ganFL5AaEYCoMTKSg1rJMp5Rg13t13lYGaBEchZZz2TebUa2WGFYqR5M+
08Tu4+3EAMvBOBrPxUqnopYfeS+gW2a5uJu7522+9eQ+ASsOvA3qisUeEKTu
O4Wjsab5Qm+i9gbXsyEshWOVNTywW1izyY1rQz3m.plNQ.rAyD7dLQdi0DgF
qIBNRSj3Y.6SX.bmlHPeSj6ISjRZ+nuL.h43nuH.G80.3zuD.m+q.vweA.ju
8+c8l+KLl7ze8z+WT7B2d
-----------end_max5_patcher-----------
1 Like