I agree, that QoL is huge. I don’t mind a little friction with this stuff but having to think about how to get sound into a DAW and wondering if it’ll break and not being able to load VSTs is a bummer. I’m not above rolling my own effect (both Max and Pd have built in delay objects so phase effects like flangers are dead easy) but I’ve got a whole suite of awesome plugins (lookin’ at you, Kilohearts) that I like and am used to and not having access to would kinda suck. Having to stop what you’re doing and go “well, I guess I’ll make a flanger” feels like a disruptive side quest sometimes. Like I know in theory how a shimmer reverb works but I doubt I can whip up something off the cuff as good as Valhalla Shimmer or Eventide Black Hole, and I shouldn’t have to when they’re already installed on my machine.
I thought about that specifically for your situation. Max is fucking baller in that department - you can select stuff in your patch and ctrl-c it. It then pastes like this:
Max ctrl-c patch
{
“boxes” : [ {
“box” : {
“maxclass” : “number”,
“patching_rect” : [ 1135.947748303413391, 577.124201238155365, 50.0, 22.0 ],
“id” : “obj-118”,
“numoutlets” : 2,
“parameter_enable” : 0,
“outlettype” : [ “”, “bang” ],
“numinlets” : 1
}
}
, {
“box” : {
“maxclass” : “number”,
“patching_rect” : [ 1011.111143052577972, 520.915049135684967, 50.0, 22.0 ],
“id” : “obj-117”,
“numoutlets” : 2,
“parameter_enable” : 0,
“outlettype” : [ “”, “bang” ],
“numinlets” : 1
}
}
, {
“box” : {
“maxclass” : “number”,
“patching_rect” : [ 924.836630523204803, 596.732044994831085, 50.0, 22.0 ],
“id” : “obj-116”,
“numoutlets” : 2,
“parameter_enable” : 0,
“outlettype” : [ “”, “bang” ],
“numinlets” : 1
}
}
, {
“box” : {
“maxclass” : “button”,
“patching_rect” : [ 1092.810492038726807, 472.549034535884857, 24.0, 24.0 ],
“id” : “obj-113”,
“numoutlets” : 1,
“parameter_enable” : 0,
“outlettype” : [ “bang” ],
“numinlets” : 1
}
}
, {
“box” : {
“maxclass” : “number”,
“patching_rect” : [ 1084.920000000000073, 520.915049135684967, 50.0, 22.0 ],
“id” : “obj-111”,
“numoutlets” : 2,
“parameter_enable” : 0,
“outlettype” : [ “”, “bang” ],
“numinlets” : 1
}
}
, {
“box” : {
“maxclass” : “button”,
“patching_rect” : [ 969.281076371669769, 449.019622027873993, 24.0, 24.0 ],
“id” : “obj-109”,
“numoutlets” : 1,
“parameter_enable” : 0,
“outlettype” : [ “bang” ],
“numinlets” : 1
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “sig~”,
“patching_rect” : [ 1025.490000000000009, 571.240000000000009, 31.0, 22.0 ],
“id” : “obj-104”,
“numoutlets” : 1,
“outlettype” : [ “signal” ],
“numinlets” : 1
}
}
, {
“box” : {
“maxclass” : “message”,
“text” : “startloop”,
“patching_rect” : [ 962.091533660888672, 563.398710608482361, 55.0, 22.0 ],
“id” : “obj-103”,
“numoutlets” : 1,
“outlettype” : [ “” ],
“numinlets” : 2
}
}
, {
“box” : {
“maxclass” : “live.gain~”,
“varname” : “live.gain~[3]”,
“patching_rect” : [ 1025.490228474140167, 688.88891065120697, 136.0, 47.0 ],
“id” : “obj-99”,
“numoutlets” : 5,
“parameter_enable” : 1,
“outlettype” : [ “signal”, “signal”, “”, “float”, “list” ],
“lastchannelcount” : 0,
“orientation” : 1,
“numinlets” : 2,
“saved_attribute_attributes” : {
“valueof” : {
“parameter_longname” : “live.gain~[4]”,
“parameter_mmax” : 6.0,
“parameter_mmin” : -70.0,
“parameter_modmode” : 3,
“parameter_shortname” : “live.gain~”,
“parameter_type” : 0,
“parameter_unitstyle” : 4
}
}
}
}
, {
“box” : {
“maxclass” : “ezdac~”,
“patching_rect” : [ 1020.915064930915833, 762.091527342796326, 45.0, 45.0 ],
“id” : “obj-100”,
“numoutlets” : 0,
“numinlets” : 2
}
}
, {
“box” : {
“maxclass” : “newobj”,
“text” : “groove~ testsample”,
“patching_rect” : [ 1020.919999999999959, 618.299999999999955, 114.0, 22.0 ],
“id” : “obj-98”,
“numoutlets” : 2,
“outlettype” : [ “signal”, “signal” ],
“numinlets” : 3
}
}
],
“lines” : [ {
“patchline” : {
“source” : [ “obj-116”, 0 ],
“destination” : [ “obj-98”, 1 ]
}
}
, {
“patchline” : {
“source” : [ “obj-109”, 0 ],
“destination” : [ “obj-118”, 0 ],
“order” : 0
}
}
, {
“patchline” : {
“source” : [ “obj-118”, 0 ],
“destination” : [ “obj-98”, 2 ]
}
}
, {
“patchline” : {
“source” : [ “obj-117”, 0 ],
“destination” : [ “obj-104”, 0 ]
}
}
, {
“patchline” : {
“source” : [ “obj-109”, 0 ],
“destination” : [ “obj-117”, 0 ],
“order” : 1
}
}
, {
“patchline” : {
“source” : [ “obj-111”, 0 ],
“destination” : [ “obj-104”, 0 ]
}
}
, {
“patchline” : {
“source” : [ “obj-109”, 0 ],
“destination” : [ “obj-116”, 0 ],
“order” : 3
}
}
, {
“patchline” : {
“source” : [ “obj-113”, 0 ],
“destination” : [ “obj-111”, 0 ]
}
}
, {
“patchline” : {
“source” : [ “obj-109”, 0 ],
“destination” : [ “obj-103”, 0 ],
“order” : 2
}
}
, {
“patchline” : {
“source” : [ “obj-104”, 0 ],
“destination” : [ “obj-98”, 0 ]
}
}
, {
“patchline” : {
“source” : [ “obj-103”, 0 ],
“destination” : [ “obj-98”, 0 ]
}
}
, {
“patchline” : {
“source” : [ “obj-98”, 0 ],
“destination” : [ “obj-99”, 1 ],
“order” : 0
}
}
, {
“patchline” : {
“source” : [ “obj-98”, 0 ],
“destination” : [ “obj-99”, 0 ],
“order” : 1
}
}
, {
“patchline” : {
“source” : [ “obj-99”, 0 ],
“destination” : [ “obj-100”, 0 ],
“order” : 1
}
}
, {
“patchline” : {
“source” : [ “obj-99”, 0 ],
“destination” : [ “obj-100”, 1 ],
“order” : 0
}
}
],
“appversion” : {
“major” : 9,
“minor” : 0,
“revision” : 7,
“architecture” : “x64”,
“modernui” : 1
}
,
“classnamespace” : “box”
}
So you select either of those, copy and paste directly into the Max patch window and it shows up. What I don’t know is whether any of that is disabled in the post-30 day demo; my guess is it still works. What I’m imagining is once saving is disabled, you live with Notepad++ or similar open in tandem and just copy everything into it to save. Definitely more of a hassle than ctrl-S but likely gets around the save limitation until you decide whether you want it long-term or can afford a copy.
They also offer a student discount, which I think just requires an .edu email, so if you know anyone that might be an option. Also looks like they occasionally run sales (maybe Black Friday?) that gets the price about the same as the edu discount, around $250. Still a lot of doss but a decent savings over the regular cost.