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).
Wow thanks so much @grrrwaaa for such quick response. That’s amazing support.
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
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.
@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
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!
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.
@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.
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!
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 The Gen~ forum isn’t better 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?
If that command is missing a .cpp path, that’s what would trigger the error.
Could be for a few reasons:
The (different project) patcher is not saved, so there’s no path to export to.
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)
the [oopsy.patch] is not in the same max patch as the gen~
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.
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
@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
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?
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.
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.
“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.
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.