max/pd versions of serge and buchla wavemultipliers/folders?

Reaktor, MAX/MSP, VST/AU, etc. A place for all things soft....

Moderators: Kent, Joe., analogdigital, infradead, lisa, parasitk, plord

User avatar
bananeurysm
Veteran Wiggler
Posts: 730
Joined: Sun Jun 14, 2009 8:16 pm
Location: Portland, OR

max/pd versions of serge and buchla wavemultipliers/folders?

Post by bananeurysm » Sat Nov 15, 2014 4:30 pm

Does anyone know what math goes into those circuits?

I think it's more than just chebychev polynomials.. I'd love to find or make an approximation in PD (or max) - but I'm not really sure what they're doing.

This kinda thing:

thermionicjunky
Thyratron Genius
Posts: 2249
Joined: Thu May 03, 2007 6:33 pm
Location: San Francisco

Post by thermionicjunky » Sat Nov 15, 2014 10:14 pm

Pong~ is useful for emulating a wavefolder.

User avatar
VortexRanger
reticulating splines
Posts: 2451
Joined: Fri Mar 04, 2011 12:13 pm
Location: North Carolina

Post by VortexRanger » Sun Nov 16, 2014 10:53 am

I was just wondering this myself, and had failed quite a few times while not knowing about pong~.

Pong~ does cause the amplitude to decrease significantly with each fold so I came up with this to combat it. (This implementation folds way more times than any analog folder I have ever used btw)

{
"patcher" : {
"fileversion" : 1,
"appversion" : {
"major" : 7,
"minor" : 0,
"revision" : 0,
"architecture" : "x86",
"modernui" : 1
}
,
"rect" : [ 38.0, 78.0, 962.0, 788.0 ],
"bglocked" : 0,
"openinpresentation" : 0,
"default_fontsize" : 12.0,
"default_fontface" : 0,
"default_fontname" : "Arial",
"gridonopen" : 1,
"gridsize" : [ 15.0, 15.0 ],
"gridsnaponopen" : 1,
"objectsnaponopen" : 1,
"statusbarvisible" : 2,
"toolbarvisible" : 1,
"lefttoolbarpinned" : 0,
"toptoolbarpinned" : 0,
"righttoolbarpinned" : 0,
"bottomtoolbarpinned" : 0,
"toolbars_unpinned_last_save" : 0,
"tallnewobj" : 0,
"boxanimatetime" : 200,
"enablehscroll" : 1,
"enablevscroll" : 1,
"devicewidth" : 0.0,
"description" : "",
"digest" : "",
"tags" : "",
"style" : "",
"subpatcher_template" : "",
"boxes" : [ {
"box" : {
"id" : "obj-47",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "float" ],
"patching_rect" : [ 557.5, 166.0, 47.0, 22.0 ],
"style" : "",
"text" : "/ 1000."
}

}
, {
"box" : {
"id" : "obj-46",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "float" ],
"patching_rect" : [ 557.5, 203.0, 33.0, 22.0 ],
"style" : "",
"text" : "* -1."
}

}
, {
"box" : {
"id" : "obj-45",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "float" ],
"patching_rect" : [ 555.5, 236.0, 31.0, 22.0 ],
"style" : "",
"text" : "+ 1."
}

}
, {
"box" : {
"id" : "obj-34",
"maxclass" : "slider",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"parameter_enable" : 0,
"patching_rect" : [ 557.5, 1.382355, 45.0, 131.0 ],
"size" : 994.0,
"style" : ""
}

}
, {
"box" : {
"id" : "obj-40",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 520.5, 427.0, 29.5, 22.0 ],
"style" : "",
"text" : "*~"
}

}
, {
"box" : {
"format" : 6,
"id" : "obj-39",
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 644.5, 372.0, 50.0, 22.0 ],
"style" : ""
}

}
, {
"box" : {
"id" : "obj-37",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "float" ],
"patching_rect" : [ 638.5, 342.0, 31.0, 22.0 ],
"style" : "",
"text" : "!/ 1."
}

}
, {
"box" : {
"id" : "obj-33",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "float" ],
"patching_rect" : [ 557.5, 327.0, 33.0, 22.0 ],
"style" : "",
"text" : "* -1."
}

}
, {
"box" : {
"format" : 6,
"id" : "obj-32",
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 557.5, 270.0, 50.0, 22.0 ],
"style" : ""
}

}
, {
"box" : {
"id" : "obj-28",
"maxclass" : "newobj",
"numinlets" : 3,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 520.5, 382.0, 92.0, 22.0 ],
"style" : "",
"text" : "pong~ 0 -1. 0.8"
}

}
, {
"box" : {
"calccount" : 2,
"id" : "obj-24",
"maxclass" : "scope~",
"numinlets" : 2,
"numoutlets" : 0,
"patching_rect" : [ 577.5, 472.0, 130.0, 130.0 ],
"presentation_rect" : [ 576.0, 391.0, 0.0, 0.0 ],
"style" : "",
"trigger" : 1
}

}
, {
"box" : {
"id" : "obj-18",
"maxclass" : "gain~",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "signal", "int" ],
"parameter_enable" : 0,
"patching_rect" : [ 531.0, 565.0, 22.0, 140.0 ],
"style" : ""
}

}
, {
"box" : {
"id" : "obj-4",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "signal" ],
"patching_rect" : [ 467.5, 343.0, 68.0, 22.0 ],
"style" : "",
"text" : "cycle~ 200"
}

}
, {
"box" : {
"calccount" : 2,
"id" : "obj-3",
"maxclass" : "scope~",
"numinlets" : 2,
"numoutlets" : 0,
"patching_rect" : [ 336.0, 461.0, 130.0, 130.0 ],
"style" : "",
"trigger" : 1
}

}
, {
"box" : {
"id" : "obj-1",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 0,
"patching_rect" : [ 537.0, 740.0, 37.0, 22.0 ],
"style" : "",
"text" : "dac~"
}

}
, {
"box" : {
"id" : "obj-2",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 404.0, 694.0, 72.0, 22.0 ],
"style" : "",
"text" : "startwindow"
}

}
, {
"box" : {
"id" : "obj-27",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 367.0, 750.0, 50.0, 22.0 ],
"style" : "",
"text" : "stop"
}

}
],
"lines" : [ {
"patchline" : {
"destination" : [ "obj-1", 1 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-18", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-1", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-18", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-1", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-2", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-1", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-27", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-40", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-28", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-28", 2 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-32", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-33", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-32", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-37", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-32", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-28", 1 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-33", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-47", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-34", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-39", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-37", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-40", 1 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-39", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-28", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-4", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-3", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-4", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-18", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-40", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-24", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-40", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-32", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-45", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-45", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-46", 0 ]
}

}
, {
"patchline" : {
"destination" : [ "obj-46", 0 ],
"disabled" : 0,
"hidden" : 0,
"source" : [ "obj-47", 0 ]
}

}
],
"dependency_cache" : [ ],
"embedsnapshot" : 0
}

}
:hobbes:

User avatar
VortexRanger
reticulating splines
Posts: 2451
Joined: Fri Mar 04, 2011 12:13 pm
Location: North Carolina

Post by VortexRanger » Sun Nov 16, 2014 10:55 am

Image
:hobbes:

thermionicjunky
Thyratron Genius
Posts: 2249
Joined: Thu May 03, 2007 6:33 pm
Location: San Francisco

Post by thermionicjunky » Sun Nov 16, 2014 11:22 am

And the Buchla circuit produces its transfer function by adding and subtracting several deadband functions to form a composite multi-cycle waveform. It's explained well in one of Aaron Lanterman's Georgia Tech videos. The result is similar, but extra "phasey." I'm definitely going to try it in Max.

User avatar
bananeurysm
Veteran Wiggler
Posts: 730
Joined: Sun Jun 14, 2009 8:16 pm
Location: Portland, OR

Post by bananeurysm » Wed Nov 19, 2014 2:53 pm

Cool - good tips! I'm using PD so I don't know if there's an object link pong~ available.. that looks great though.

Also - I'm definitely gonna watch the lantermann video - good tip!

thermionicjunky - i'd be interested to see if you your patch if you come up with an add/subtract deadband function in max!

User avatar
tremblap
Common Wiggler
Posts: 216
Joined: Fri Sep 20, 2013 1:41 pm
Location: Huddersfield, England

Post by tremblap » Wed Nov 19, 2014 3:51 pm

don't fogey the important DC offset that the analogue ones do... you can actually offset the values around which pong wraps, making them asymmetrical. A bit of very low HP filter to remove the DC offset and you're on ;-)

User avatar
bananeurysm
Veteran Wiggler
Posts: 730
Joined: Sun Jun 14, 2009 8:16 pm
Location: Portland, OR

Post by bananeurysm » Wed Nov 19, 2014 4:15 pm

So it turns out there is a PD implementation of pong~ in cyclone. (Which is an included library if you install pd-extended)

Here's my implementation of the wave folder.

tremblap - not sure I totally follow what you're saying about the DC offset thing - all I did was add a HP filter in my implementation.. but what kind of offset for the pong~ values do you mean?

I'm simply sweeping -1 to 1 on the low value input and leaving the high value at 1.

Is there something else I should try?

Image
Last edited by bananeurysm on Fri Nov 21, 2014 4:31 pm, edited 2 times in total.

User avatar
tremblap
Common Wiggler
Posts: 216
Joined: Fri Sep 20, 2013 1:41 pm
Location: Huddersfield, England

Post by tremblap » Thu Nov 20, 2014 3:26 am

DC offseting is what makes most wave folding behave 'like valve'

Now I've put inverted commas because it is a blunt oversimplification but you can read about asymmetry in tube/valve distortion and have fun ;-)

What I mean by this is that your patch has 2 'errors' (again, there is no such thing as you are going to have interesting sounds out of your half-folding as you do it now, folding just the negative phase)

To implement what I mean the same way it is implemented analogously,you would have to fold both phases symmetrically ([pong~ -0.5 0.5] for instance) and add to your audio input a [sig~ 0.2]. This will fold the positive phase a little more than the negative phase and will change the spectrum. If you are on Max, use my lab's free [spectrumdraw~] to visualise. The Pd community is supposed to port it, the code is available on github ;-)

Have fun!

p

User avatar
bananeurysm
Veteran Wiggler
Posts: 730
Joined: Sun Jun 14, 2009 8:16 pm
Location: Portland, OR

Post by bananeurysm » Fri Nov 21, 2014 4:29 pm

tremblap - thanks for the tips!

Here's what I'm working with now:

Image

Sounds pretty good!

Some weirdness happens at the most folde end.. so I just limited the range on the slider a little. But it's pretty great.

I am curious about different wavefolders.. I know Ken Stone claims his is a 'reflector circuit' - not sure how that might differ. I also haven't watched the buchla circuit analysis video yet - but I'm planning on it. Not sure what thermionicjunky's summary would mean in terms of a patch/math implementation:
Buchla circuit produces its transfer function by adding and subtracting several deadband functions to form a composite multi-cycle waveform
If anyone wants to play with the patch I put it here: https://github.com/jmej/wavefolder

User avatar
EATyourGUITAR
has no life
Posts: 3823
Joined: Tue Aug 31, 2010 12:24 am
Location: Providence, RI, USA

Post by EATyourGUITAR » Sat Nov 22, 2014 12:23 pm


User avatar
bananeurysm
Veteran Wiggler
Posts: 730
Joined: Sun Jun 14, 2009 8:16 pm
Location: Portland, OR

Post by bananeurysm » Sun Nov 30, 2014 1:58 pm

EATyourGUITAR wrote:this is very easy with math
https://www.desmos.com/calculator/kcdu7jnzsn
Cool! Is that different than what pong~ is doing? (I don't know exactly how pong works...)

Seems like that would be straightforward to implement with expr~ - I could just compare I spose..

User avatar
tremblap
Common Wiggler
Posts: 216
Joined: Fri Sep 20, 2013 1:41 pm
Location: Huddersfield, England

Post by tremblap » Thu Dec 18, 2014 4:08 am

reviving the thread for those of you in Max, I've done a comparison patch with gen~ for both maths equation above and pong~

<pre><code>
----------begin_max5_patcher----------
1429.3oc6Z00iahCE84jeEHz9TaZD1FLv9196XT0HFvSF2kXP.YloaU6u80e
.THAlwPRnfl7BQ4Zr8wGe80WN59i0qLeH4URtoweabmwpU+X8pURSBCqJ++J
y8AuFFGjKeMSF4kjG9l4FUSEjWKjliSBh1SxyM.UMwNrmxhIExtAJMlFTD9D
ks69LRXgZZwd9as1X.cwhe7fx+veZ70eOPIGJNdjnQx4kiku.7qlyGSXErf8
DYS+SFMHtYK4z+S1BvlOGJypAt36oDEXLMM9pnketds3wFMIkGiS3nrZtRyH
4DVQPAMg0XgZ66HVa.awzaXU9n4xTK9p8v3X8N7ErC9x684qzfLt8BR18DVv
Cwx2vZfbImUBJL2XX9P.a23H1d71B+dXL4WF1nsVvN82f8yeHrh+P.o+l+H7
2PWN+sb5NFuWW.uNc8e7bkKbjCdz9Ovkt+yNB6WC0uwS3sw4MeWwO1iINE3J
32zDvjrRpnjK3CGMl7LIKmGIpAnVYFjl1v7pFcQPfeKQNP3M0lnLkIPsoLxy
zp96WaMHiSaEbN6PlZw8pG1T0HeSacUWqi8iTjoqLVF1R5LZ6zHrHeCdWXRr
Z1uiGvzeSiGf1uXbR3+RhZ3pwItTBixZFQtUyQjGCNDWbe2zd61eLHjzam6b
2bk4tLZTBS.hV8TXtZ5ty.nBH4zbwHeCVPZGcNmuNNj+PPlXCn7nErpwhjj3
1MUumyOoDvn6CJHETEXgV0CJceZFkUzZhTmbeJOLKINt0PoZ44NZIh6VDRdg
FU7jbrZRk7WmlVsEXVyQQzcj7h11JB1k21RqDUZ5u1LDPK6uUnf1gCxorl16
JRZeQE.dVacc3QB.xvoPuiCKzengiCO30DC86S0eTh2LilUUAOKOKd4YwO0K
GB0iCAdpalfacFKG5tv4Pxqovw5JhrjwQToGZCFuiHdo6HZf1BrAN9nyjJUo
H4dFmocV3TIkU+AcmRhVuMIpRsTtTLPnwygfkOGBGKGV5Hd9jHbgSh7Y9M7D
07RZDvq6b26fGs5lGsGOO1AQ8678hor9RuQtfDs2MClmbHKrZ+nLOBi1qLdp
WETVc1u2UuTN58dhFE0NYSU9Y4hr8T4Uq0t8PQrqlH1a1fXrlHVrx.yBD6nI
hwyFNFpIhclMHFL.uhKAhKC9prLPkQxC4eX4fEAw0QkXjMVoglU8O8HCRk.F
gAwggIGTego2oZi3XNYBf45zTHmwH.F9in9WtPYRH1Hmwp+k8M4uZK+kMVI+
E1+l7W2j+5Ol7WiV3FHVFR..PmqtM.qE92m7Y9dM.5btBNHi.3bFBN3u30tw
6L4POzGcgXOC4rqNQqtX5bHQ7Mkuto70Mku9Cq7U44YnE9CfvW9KNYjzUpNQ
5QyDcjvKN0E0UGI+4iNRVKNw5.CwSdYp8EFdkz9BfMmrEQY0CdEVDiRAudzm
5SFeArcv6O.kZJVxa4P3QTfVWPEpTh2Mg00GVshK0mqLA9gUWeVKFcMGGE4f
cDRTbFTj6hggNrmvNTgIZAYed0XmDGIF5MhGujEjV+mvXZp4fqGYGfkfTQp5
2FqjSGzKohNkTujkiLpeRUnu2FgjZisJuE02dvNxIQq1mDQL9KvPiWURb1Vp
heTF0B3Oj3UCst2QW55deb2AUVA1W96fPWvqf97XWV.eqtUC882Ogyi5JuGF
IMgsqaRA8t4aXi8T5JYMhakutrhDHs+LTEIcbJvkT0oo915CGzJu2Sy48z7c
OYSSa73oAdfM+fxqKbPZBmogcf5rYMuPy7BNnYEZrmLz3Oqbbz4Lt+jgFWM4
loIhCVS+loAM15vM3o61Acvi6zAGcNjimWvALctxGE6WiBf65BGKcnG6YFd3
uCbZfiNnYr6Vp7TOpxkDH4nJV5npU5zJUpupThOO+b8+Cd6nNMC
-----------end_max5_patcher-----------
</code></pre>

User avatar
tremblap
Common Wiggler
Posts: 216
Joined: Fri Sep 20, 2013 1:41 pm
Location: Huddersfield, England

Post by tremblap » Thu Dec 18, 2014 9:57 am

I added a dc filter at the output of the gen~

<pre><code>
----------begin_max5_patcher----------
1451.3oc6a00bahCE8Y6eELL6SstdzGf.121eGY5jACJNpKVv.3jzsSyu8Ue
.Dv1jJrIT7t9EX7UHoiN5pqtbr3GKWXuI8EZgs0eZcm0hE+X4hEJSRCKp98B
6cguDkDVndLaN84zMeydktnR5KkJyIogw6nEEVv5hdHkWVv9GprXnyZPk4z8
kIzxxumQ08pss0WqJhueGiKJT0Qv2LpqRGqYgkQOx3auOmFUpaHhefnSrPdD
4Mej5GhqMMuDP7vcp909uxYgI0PkEqrIFWeAFXKs8ykKkWVYHo7PRp.mCcjK
pUXo8JK6Mg7sChFP8SCNAtxQNzQcyEblzfucSWjKd3RZ98Td3lDU0.mAE0ie
Sz2iRnuZ4fWCPCk+JXa4BzeZhCMT+GLQSbXnx+I3LIN7Ut+iumZ7icIWj+CZ
h7e1R4u960uwW56JHr.O4MmyMtCztcWPyqnhJtPzJrD5Sz7BVJuEfVXGlk0x
7hVUQRfeKU0PjUMlXbsIXiob5Sr55GzXMLWLPKEix84Zj+hOwVWnXRaYcUah
9h0CeOIuaQ.J+FGo6SMOHlf2Fkln686r.qCV05Br6CljF82TE6.pMllQ4LdV
NsfxKCKq.bSwwzGB2mTd+ocB5V9CgQzdq7ImpVXuMmEmxkfnSMklq6t6rf5P
HtsGLpmfGlchJWHFG6K1DlKm.pVafpKrLMMoaQMy4hUJgb1tvRZISCVDnoQY
6xxY7xNcjdo2iEQ4oIIcZJcIOchRhEtEQzmYwkOpZq1To3wYY0SA1MbTLaKs
nrqsxvsEcszIki19qsCAzw96EJna3f3nMRWm1k0iCw6mKRuAR6O1PewGf9f0
dthXBD0VJt9GFf38CRbXfBrcsYU.zp0iiOSVv3yRVDp1WBcgrn+Dwhe5CfCQ
WJGB80awiV6dIbn2DwgzWxPyIWQLPEkWmmsC7xbDISkinEdMzA5FfmgToNWS
uKbMs6DQkLdyK4NljH3bIQcN5pd1BiuLNDNcbHZNwgUNhiCIhlHRTL7L1Szv
0q.y1AAC8O8K6LLhx4TD0aYNmv38knnBaxxOMCVjtOOp1eQm0j38L5.RQRrk
Ldy6QbWMhN74djEG2MsccltEx7liada1e4r8PQrugHFOaPrmgH1e1fXhgHVN
xfyBD6ZHhIyFNFYHhcmMHFN.uhw.wVec4aVFnpXEQoYzFAvLPHKP+BY44pSF
ygn0AEzbqQJqNYaUYKJLIJJcuVwA+qawO8baqk24J9I4+MZe5gTIL4fcuDsO
cttk9zgnk9TquyMoOuI84MoO0MJhnBOffWUJeNqzrqhBgP7XHYGDLQb3mEKZ
fH24nVSfwvWLXxjsyeFxg93qIM3mY+SF0qn0YMbojH4lnm2D87lnmejhdVmE
iNp2MMO+8qG27QyyfqNMOMUWYQphyEQOMUBwf4iDhfqNcZgCwu3+RxdRPCQ1
SHYzz8bLGDUm5WSGDim3s8HM4mr9Bb84Io6HIMIApUkCn1uFSNyikoyU9w4k
nG4UJzV8NGCmF.isj1yHJxk3JUU4BoHuwlg1uix2eRBB2OAIU+bkTvwe42UA
qjtqnlVSShkUYk7xy4gYM+HJgk0ogZQo32gRg.Ikh0eKFD8+iBbnT5n+MHH+
.UB2ROJZ0tzXp0e.GJYOVgppXKGf9rSqBXIkLcXr0Y8gqLl6AU8ATX3dP3O5
sf97qyiumj.voUt0rYUj83wHYo7siKofGJoTkmhCwWqA1494kzlUTUs6KNqI
oCSAthpd+Whquzd67LGkw6wY6dzTlonw2.zDLYnwyPtANIngX.ZblLz3XB2P
lroJjgjy7AM3YEZfv4EblLz.MJ.HX5viIg.QS1xbnIqy8lN1AaH6LQvwDeYx
7BNvoaGqCBpXvYe7iEN.SnGmYFdDOCZZfiIn4bmsz4odvgVShjCNrZGbP0N9
Pp02ATSzO+b4+Br+qw2.
-----------end_max5_patcher-----------
</code></pre>

User avatar
bananeurysm
Veteran Wiggler
Posts: 730
Joined: Sun Jun 14, 2009 8:16 pm
Location: Portland, OR

Post by bananeurysm » Thu Dec 18, 2014 12:33 pm

Cool! Can you post a screenshot for those of us who don't have max?

User avatar
tremblap
Common Wiggler
Posts: 216
Joined: Fri Sep 20, 2013 1:41 pm
Location: Huddersfield, England

Post by tremblap » Thu Dec 18, 2014 1:51 pm

it won't help - it is a sample-based process that you cannot do elsewhere...

User avatar
bananeurysm
Veteran Wiggler
Posts: 730
Joined: Sun Jun 14, 2009 8:16 pm
Location: Portland, OR

Post by bananeurysm » Thu Dec 18, 2014 1:55 pm

tremblap wrote:it won't help - it is a sample-based process that you cannot do elsewhere...
Could you explain? I do have a max 4 license.. so maybe I could try it there..

But eitherway I'm super curious if there's a process that can be done in Max but not PD (or any other programming environment for that matter)

User avatar
tremblap
Common Wiggler
Posts: 216
Joined: Fri Sep 20, 2013 1:41 pm
Location: Huddersfield, England

Post by tremblap » Fri Dec 19, 2014 3:28 am

Actually, it is not sample based at all, you can process by blocs, so PD could do it - less efficiently than gen~ - but you could code your own C external for this - I could be tempted if gen~ did not exist ;-)

Image[/img]

User avatar
EATyourGUITAR
has no life
Posts: 3823
Joined: Tue Aug 31, 2010 12:24 am
Location: Providence, RI, USA

Post by EATyourGUITAR » Sun Dec 28, 2014 3:00 pm

thanks! I will try this in GEN~

User avatar
tremblap
Common Wiggler
Posts: 216
Joined: Fri Sep 20, 2013 1:41 pm
Location: Huddersfield, England

Post by tremblap » Mon Dec 29, 2014 4:09 am

I use it all the time now, it sounds amazing and is super clean (when I need clean ;-)

User avatar
madronalabs
Common Wiggler
Posts: 210
Joined: Sat Mar 19, 2011 1:31 pm
Location: Seattle
Contact:

Post by madronalabs » Tue Dec 30, 2014 9:34 pm

Here's the Max/MSP prototype of what eventually became the timbre circuit in Aalto.

Whatever method you use, I recommend a lot of oversampling for decent sound, because any kind of folder adds a lot of harmonics.

Code: Select all

&#123;
	"boxes" &#58; &#91; 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "dac~",
				"style" &#58; "",
				"numoutlets" &#58; 0,
				"patching_rect" &#58; &#91; 193.0, 754.0, 34.0, 19.0 &#93;,
				"id" &#58; "obj-1",
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "scope~",
				"style" &#58; "",
				"trigger" &#58; 1,
				"drawstyle" &#58; 1,
				"numoutlets" &#58; 0,
				"patching_rect" &#58; &#91; 182.0, 514.5, 248.0, 135.0 &#93;,
				"id" &#58; "obj-14",
				"calccount" &#58; 4,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "toggle",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 90.0, 692.0, 20.0, 20.0 &#93;,
				"id" &#58; "obj-8",
				"outlettype" &#58; &#91; "int" &#93;,
				"parameter_enable" &#58; 0,
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "gain~",
				"style" &#58; "",
				"numoutlets" &#58; 2,
				"patching_rect" &#58; &#91; 143.0, 512.0, 22.0, 140.0 &#93;,
				"id" &#58; "obj-11",
				"outlettype" &#58; &#91; "signal", "int" &#93;,
				"parameter_enable" &#58; 0,
				"numinlets" &#58; 2,
				"interpinlet" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "cycle~ 110.",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"fontface" &#58; 0,
				"patching_rect" &#58; &#91; 70.0, 53.0, 64.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-7",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "flonum",
				"style" &#58; "",
				"numoutlets" &#58; 2,
				"patching_rect" &#58; &#91; 273.0, 28.0, 50.0, 19.0 &#93;,
				"id" &#58; "obj-5",
				"outlettype" &#58; &#91; "", "bang" &#93;,
				"parameter_enable" &#58; 0,
				"maximum" &#58; 1.0,
				"minimum" &#58; 0.0,
				"format" &#58; 6,
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "comment",
				"text" &#58; "amp offset",
				"style" &#58; "",
				"numoutlets" &#58; 0,
				"patching_rect" &#58; &#91; 247.0, 239.0, 98.0, 17.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-75",
				"fontname" &#58; "Verdana",
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "comment",
				"text" &#58; "timbre width",
				"style" &#58; "",
				"numoutlets" &#58; 0,
				"patching_rect" &#58; &#91; 163.0, 182.0, 98.0, 17.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-64",
				"fontname" &#58; "Verdana",
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "+~ 1.",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 430.0, 119.0, 37.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-62",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "comment",
				"text" &#58; "phase offset",
				"linecount" &#58; 2,
				"style" &#58; "",
				"numoutlets" &#58; 0,
				"patching_rect" &#58; &#91; 267.0, 347.0, 56.0, 28.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-52",
				"fontname" &#58; "Verdana",
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "+~ 0.1",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 202.0, 240.0, 43.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-46",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "+~ 0.25",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 202.0, 347.0, 49.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-44",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "flonum",
				"style" &#58; "",
				"numoutlets" &#58; 2,
				"patching_rect" &#58; &#91; 270.0, 180.0, 50.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-38",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "", "bang" &#93;,
				"parameter_enable" &#58; 0,
				"format" &#58; 6,
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "comment",
				"text" &#58; "timbre &#91;0-1&#93;",
				"style" &#58; "",
				"numoutlets" &#58; 0,
				"patching_rect" &#58; &#91; 196.0, 28.0, 67.0, 17.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-6",
				"fontname" &#58; "Verdana",
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "comment",
				"text" &#58; "wave folder",
				"style" &#58; "",
				"numoutlets" &#58; 0,
				"patching_rect" &#58; &#91; 73.0, 382.0, 63.0, 17.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-141",
				"fontname" &#58; "Verdana",
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "comment",
				"text" &#58; "amp to wave folder",
				"style" &#58; "",
				"numoutlets" &#58; 0,
				"patching_rect" &#58; &#91; 73.0, 273.0, 98.0, 17.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-140",
				"fontname" &#58; "Verdana",
				"numinlets" &#58; 1
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "overdrive~ 1.",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 163.0, 454.0, 72.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-117",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "+~",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 376.0, 57.0, 32.5, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-18",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "*~ 2.",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"fontface" &#58; 0,
				"patching_rect" &#58; &#91; 201.0, 213.0, 36.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-15",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "overdrive~ 1.",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 70.0, 160.0, 72.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-10",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "cycle~",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 157.0, 382.0, 40.0, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-33",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
, 		&#123;
			"box" &#58; 			&#123;
				"maxclass" &#58; "newobj",
				"text" &#58; "*~",
				"style" &#58; "",
				"numoutlets" &#58; 1,
				"patching_rect" &#58; &#91; 176.0, 273.0, 32.5, 19.0 &#93;,
				"fontsize" &#58; 9.0,
				"id" &#58; "obj-35",
				"fontname" &#58; "Verdana",
				"outlettype" &#58; &#91; "signal" &#93;,
				"numinlets" &#58; 2
			&#125;

		&#125;
 &#93;,
	"lines" &#58; &#91; 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-18", 0 &#93;,
				"destination" &#58; &#91; "obj-62", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-117", 0 &#93;,
				"destination" &#58; &#91; "obj-14", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-117", 0 &#93;,
				"destination" &#58; &#91; "obj-11", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-15", 0 &#93;,
				"destination" &#58; &#91; "obj-46", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-18", 0 &#93;,
				"destination" &#58; &#91; "obj-15", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-38", 0 &#93;,
				"destination" &#58; &#91; "obj-15", 1 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-11", 0 &#93;,
				"destination" &#58; &#91; "obj-1", 1 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-11", 0 &#93;,
				"destination" &#58; &#91; "obj-1", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-8", 0 &#93;,
				"destination" &#58; &#91; "obj-1", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-7", 0 &#93;,
				"destination" &#58; &#91; "obj-10", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-62", 0 &#93;,
				"destination" &#58; &#91; "obj-117", 1 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-62", 0 &#93;,
				"destination" &#58; &#91; "obj-10", 1 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-5", 0 &#93;,
				"destination" &#58; &#91; "obj-18", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-46", 0 &#93;,
				"destination" &#58; &#91; "obj-35", 1 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-44", 0 &#93;,
				"destination" &#58; &#91; "obj-33", 1 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-35", 0 &#93;,
				"destination" &#58; &#91; "obj-33", 1 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-33", 0 &#93;,
				"destination" &#58; &#91; "obj-117", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-18", 0 &#93;,
				"destination" &#58; &#91; "obj-44", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
, 		&#123;
			"patchline" &#58; 			&#123;
				"source" &#58; &#91; "obj-10", 0 &#93;,
				"destination" &#58; &#91; "obj-35", 0 &#93;,
				"hidden" &#58; 0,
				"disabled" &#58; 0
			&#125;

		&#125;
 &#93;,
	"appversion" &#58; 	&#123;
		"major" &#58; 7,
		"minor" &#58; 0,
		"revision" &#58; 1,
		"architecture" &#58; "x64",
		"modernui" &#58; 1
	&#125;

&#125;


User avatar
madronalabs
Common Wiggler
Posts: 210
Joined: Sat Mar 19, 2011 1:31 pm
Location: Seattle
Contact:

Post by madronalabs » Fri Jan 02, 2015 4:00 pm

For those who don't have Max/MSP, here's a picture of the patch:
Image

User avatar
snaper
Ultra Wiggler
Posts: 975
Joined: Mon Feb 10, 2014 12:29 am
Location: Magyarország

Post by snaper » Wed Feb 11, 2015 2:25 am

madronalabs wrote:For those who don't have Max/MSP, here's a picture of the patch:
Image
Awesome!
tried it!
Sounds great!!!

User avatar
pannikel
Wiggling with Experience
Posts: 370
Joined: Sun Nov 28, 2010 4:02 pm

Post by pannikel » Sat Mar 07, 2015 11:16 am

Just picked this up, very cool, thanks madronalabs :tu:

heuermh
Learning to Wiggle
Posts: 30
Joined: Mon May 20, 2013 3:15 pm

Post by heuermh » Thu Mar 26, 2015 10:32 am

EATyourGUITAR wrote:this is very easy with math
https://www.desmos.com/calculator/kcdu7jnzsn
Thanks! I've adapted those equations into oscillator classes in ChucK; they don't sound half bad

https://github.com/heuermh/lick/blob/ma ... /Folder.ck
https://github.com/heuermh/lick/blob/ma ... Folder2.ck

Post Reply

Return to “Music Software”