max4.live

a better search for max devices
OCD43 Delay screenshot

OCD43 Delay

by willum070

Updated with some minor tweax, plus see the JavaScript below...

View on maxforlive.com

Type
Audio Effect
Author
willum070
Version
0.4
License
None
Live version
8.2.1
Max version
5.1.7
Downloads
1,854
Updated
2012-01-21

Description

Updated with some minor tweax, plus see the JavaScript below which is critical for this to work.

The OCD43 is my attempt to reverse engineer the wonderful Lexicon PSP42 delay effect. I used the PSP Audio plugin as a guide, as well as the PCM42 hardware unit owner's manual. This was more of a learning experience than an attempt to create a carbon copy of the original. I intentionally left a lot of settings "under the hood", such as the overdrive, much of the LFO subsystem, the filters. Also I didn't implement phase inversion as is present on the PSP42. You can always open it up and change stuff if you don't like it, it IS MaxMSP after all! You can get all kinds of great delay sounds, from saturated dub echoes to flanger-like effects (set up the LFO on sine wave and try shorter delay times). Increasing the overdrive level will also boost the feedback. I constrained the input values to try and keep everything coherent. If you make any changes or have any ideas, please let me know!

Some notes: there is a limiter on the output channel.

The "wave" knob in the LFO section fades between the two selected waveforms.

Some of the UI elements use the Envy Code R font (http://www.fontsquirrel.com/fonts/Envy-Code-R).

the .JS file needs to be in your Max path. Copy the following code, save it someplace in your Max path as converter.js:

var tempo = 0;

var msv = 0;

var sDivU = 0;

var sDivL = 0;

var div = .25;

function list()

{

var a = arrayfromargs(arguments);

tempo = a[0];

sDivU = a[1];

sDivL = a[2];

//post(a[0] + ", " + a[1] + ", " + a[2] /n);

calculateTime();

}

function calculateTime(){

if(!tempo || !div || !sDivU || !sDivL)return;

var dTime=(60.0*1000.0*parseFloat(sDivU))/(parseFloat(tempo)*div*parseFloat(sDivL))

dTime=roundOff(dTime,2)

msv=dTime

bang();

}

function roundOff(x,nrDec){

fact=Math.pow(10,nrDec)

x=Math.round(x*fact)

return(x/fact)

}

function calcTuplet(myForm){

var tuplet=myForm.selectTuplet[myForm.selectTuplet.selectedIndex].value

var nr=myForm.number[myForm.number.selectedIndex].value

var noemer=tuplet.substring(tuplet.indexOf("/")+1,tuplet.length)

myForm.subdivisionLower.value=noemer

myForm.subdivisionUpper.value=nr

myForm.division.options[2].selected=true

calculateTime(myForm)

}

function bang() {

outlet(0, msv);

}

This is the Max abstraction that you can use with the script:

<pre><code>

----------begin_max5_patcher----------

1013.3oc6X0rbaCBD9ryL8cfwmc8Hjr9w8Vam9BzqYxjAKgSHQBzHgcSZl9t

WXQRFEiRjicRyz1CFD6hWs7se6BnG9vYSltRbGsdJ5SnyQSl7fRxDPlVxjVA

SlVPtKMmTCSbJm9CwpalNqQmjdmDjWRRuEgQ9nfNcqEbImTPA8ethQx6TURj

oWy3WcYEMUZbfH+34dyP9ltnHXf2bOzE11ql8SvdXek9F47MELdNUBNXfkTw

FYqXbqXVF3Np0vGiB67GyLk2WRMNyzonK.U+5Cmo6UcyNZH5lZTpfukVIoUG

IHEpW9n3fWHHgO.Px+0AjxYaoyKn7McleKopCH5zdN9B2P023auG8UQFE88Q

.X3X.vBLrpE1.VYEslxkDISv6ABkjJ0KSEqtjxIqxo8TtRTkQqRE4hJyKBCu

F6l9wj0jTvBdNCTIGVfpijKqXizGHoRElt5Jqo6omztldS2hAf85.3qyk89+

IgII9Kl47odlqjkJ2T0VqYmbctwiW.C3Q1wIq.rO1aWj0U7ceV6Lyu04BhxH

cSrlrklcIQpvzUajzcOU2viaIxZpZ9FpXcq7NE1jlZIsr1Nh2SKiukUyZXUN

mgh7Wz3wXs6FnaB0Mw5lk6779+s6JEbENArm4NsLgyEM3XW5zTWSbCmIqk22

P8cZqBURsoTS77Al.CRq7bqtMt36FjXRUAQq7Om1n9ZQkb+RGNWREhrmyiyE

7qbTHx+hAM3StByY7a0laXtf1DpBYOAWYs3YBRCqFpSMnoynqeBs0kTZVNqn

gK0Lilp86d3Ur7+wU6O16+09OxZ+32009CC92n1ue2F.KzMQ5lDcCFzfAA9f

t.PxBPaDHYYzeGaUzrafAWrCyGyFJ3+banD7+MTNgannxn0IMCesJzWD4Yi4

tUwPWnoJTxf2sx6vJa66n5ZxxguakoBkJ8cEge0wbQKUULoZ2sQbGI7h1qS9

3KU9Ru7X7Sb4wiccMzsrU3VFX6imJDuDXBgmVlfSfJ3sGnjUDdcopR2I.ovK

fchSdoIM9tgpkt9fDdCCULNjxzz0kBs+Ctl09XrYQnJYy26qjAPgVwiP9Zwl

pzV2o8iLgrfiLZsjw6Nw4469JK1y5ZVVFk26LiErrRgxm6NG0vDhQ6b5i2gv

OqyoWB9GhyEkj.EQLUThRBlG1L5z31di1swGjauHz1si75FcRbaMyEsXTt8A

QEhhhsca0AgOon8i4ltca8dYuaYvwGb5UKC1C5hvA6OB6szBugQmjkT7nvaf

L81i25MpddmK1+cryATlCiLXBwKMwa3qp2e.NxPLTGXHrYza4Bx6UaA0vsOY

KnwU49EjtZpbiWFYmf1ezHRW0BTc+FrbUzPI

-----------end_max5_patcher-----------

</code></pre>

← Back to search