Forums > MaxMSP

Creating an Audio Mixing Desk in MAX/MSP????????

February 15, 2006 | 2:22 pm

To be honest i’m fairly new to max and i think im trying to create something thats beyond me. As part of a project im tryin to create a patch which simulates a mixing desk. The desk should have volume controls, panning controls and EQ controls, as well as effects such as reverb. Ive started to construct a patch which enables you to load a sample and vary volume……and thats it.

I’d be very grateful if someone out there knows of a tutorial knocking about that may assist me.

Has anyone done this before?

cheers

birdy


February 15, 2006 | 3:12 pm

That is pretty easy to do, I have done several in the past.

Question for you – what hardware (# ins and outs) are you planning to use with this – or are you going to be mixing samples?

I am unable to find any examples right now, but I will try to remember and look later tonight. I know I have small premade mixer components from a project I worked on.

The simplest way to start is to construct a 1 channel mixer with some components you want to have. Use a volume slider, put in your IO and go from there adding pieces slowly, testing each alogn the way.

Nick


February 15, 2006 | 3:16 pm

On 15 Feb 2006, at 14:22, Steve Birds wrote:

> Has anyone done this before?

Oh, I’ve made a few Max/MSP multi-in, multi-out mixers in my time –
about two a year, on average, of various flavours, not counting
numerous specialised submixing components. I’m sure lots of other
folks here have done them as well.

Have a look at matrix~, have a play with send~/receive~ in
combination with signal faders, and the basic idea should emerge from
there.

– N.

nick rothwell — composition, systems, performance — http://
http://www.cassiel.com


February 15, 2006 | 3:27 pm

Hello

I have started a project of building a mixer in Max. It’s not that dificult.

Just create a signal path as follows:

Audio in -> plugin’s (vst or created by you) -> aux sends -> pan and volume -> group select -> audio out

I put this in a patch and then a just crate a bpatcher and duplicate it the number of times necessary (number of tracks i want). Then i have some master faders and a aux master faders.

The most dificult part is the plug-ins. My aproach was through scripting. I created a script for each plug-in selection that creates the plug-in object (that i made or else a vst) and then makes all the appropriate connections. For the rest just use a ready-me fader from max and build a panner or download one from somewhere.

After this you can create some midi routing and use a external midi controler to control all the faders and knobs.

good luck

Miguel


February 15, 2006 | 6:21 pm

Check Matthew Aidekman’s Matsui interface objects – lot’s of mixer based goodness.

http://www.estatesound.com/matsui.html


February 15, 2006 | 6:56 pm

that url does not seem to work.


February 15, 2006 | 8:04 pm

> that url does not seem to work.

You’ll have to copy and paste it into your browser.

cheers

w


February 15, 2006 | 9:09 pm

On Feb 15, 2006, at 10:16 AM, Nick Rothwell wrote:
> Oh, I’ve made a few Max/MSP multi-in, multi-out mixers in my time

Same here. Although I have never successfully developed a proper
"solo" function. Anyone out there figured this one out and have some
tips?

—–
Nathan Wolek
nw@nathanwolek.com

http://www.nathanwolek.com


February 15, 2006 | 9:36 pm

How about this solo statement:

if someone else is soloing (1) and I am soloing (1) then play (1) if
someone else is not soloing (0) and I am not soloing (0) then play (1)
If someone else is not soloing (0) and I am soloing (1) then play (1)
If someone else is soloing (1) and If I am not soloing (0) then (0)

If $i1 == 1 && $i2 == 1 then 0 else 1

One fader patch:

Put in bpatchers with a series of arguments

(might want to use the mute~ object instead or in addition to the gate
to free up some DSP.)

max v2;
#N vpatcher 26 168 1040 840;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P hidden newex 358 522 64 196617 r masterfad;
#P hidden newex 265 547 44 196617 *~ 1.;
#P window setfont "Sans Serif" 12.;
#P flonum 246 452 41 12 0 0 96 3 255 255 255 0 0 0 222 222 222 0 0 0;
#P window setfont "Sans Serif" 9.;
#P hidden newex 169 423 34 196617 atodb;
#P window setfont "Sans Serif" 10.;
#P flonum 246 436 41 10 0 0 160 3 255 255 255 0 0 0 222 222 222 0 0 0;
#P window setfont "Sans Serif" 9.;
#P newex 13 215 60 196617 loadmess 0;
#P newex 523 400 60 196617 loadmess 0;
#P newex 445 435 50 196617 pak $1 0;
#P newex 552 130 51 196617 zl slice 1;
#P newex 513 103 50 196617 route $1;
#P toggle 445 393 15 0;
#P toggle 115 416 15 0;
#P hidden toggle 399 231 15 0;
#P newex 315 196 29 196617 gate;
#P newex 552 160 27 196617 t b i;
#P newex 399 189 180 196617 if $i1 == 0 && $f2 == 1 then 0 else 1;
#P newex 41 89 72 196617 loadmess 128;
#P newex 178 133 57 196617 r muteALL;
#P hidden outlet 265 581 15 0;
#P newex 513 72 36 196617 r solo;
#P newex 115 329 27 196617 !- 1;
#N comlet signal;
#P inlet 272 130 15 0;
#P newex 247 218 35 196617 gate~;
#P newex 115 299 62 196617 route toggle;
#P window setfont Arial 12.;
#P user ubumenu 246 278 41 131137548 1 0 1 1;
#X setrgb 255 255 255 140 140 140 234 234 234 4 4 4 254 10 10 112 112 112;
#X add mute;
#X prefix_set 0 0 0;
#P user ubumenu 246 296 41 131137548 1 0 1 1;
#X setrgb 255 255 255 140 140 140 234 234 234 4 4 4 254 10 10 112 112 112;
#X add solo;
#X prefix_set 0 0
0;
#P user gain~ 263 314 24 100 158 0 1.071519 7.94321 10.;
#P user meter~ 246 314 264 436 50 0 168 0 103 103 103 255 153 0 255 0 0
217 217 0 153 186 0 12 3 3 3 3;
#P window setfont "Arial Black" 12.;
#P comment 243 256 58 791478284 CH $1;
#P window setfont "Sans Serif" 9.;
#P newex 445 469 36 196617 s solo;
#P user panel 237 251 59 231;
#X brgb 154 165 176;
#X frgb 0 0 0;
#X border 1;
#X rounded 0;
#X shadow 0;
#X done;
#P newex 445 331 62 196617 route toggle;
#P window linecount 7;
#P comment 712 102 218 196617 if someone else is soloing (1) and I am
soloing (1) then play (1) if someone else is not soloing (0) and I am
not soloing (0) then play (1) If someone else is not soloing (0) and I
am soloing (1) then play(1) If someone else is soloing (1) and If I am
not soloing (0) then (0) If $i1 == 1 && $i2 == 1 then 0 else 1;
#P hidden connect 8 2 9 0;
#P connect 27 0 12 0;
#P connect 9 0 12 0;
#P connect 12 0 21 0;
#P hidden connect 5 0 29 0;
#P hidden connect 6 0 5 0;
#P hidden connect 29 0 28 0;
#P fasten 12 0 10 0 194 346 194 192 252 192;
#P hidden connect 15 0 10 0;
#P fasten 19 0 10 0 320 215 252 215;
#P hidden connect 16 0 6 0;
#P hidden connect 10 0 6 0;
#P hidden connect 6 0 31 0;
#P hidden connect 31 0 14 0;
#P connect 11 0 10 1;
#P hidden fasten 32 0 31 1 297 539;
#P fasten 12 0 19 0 84 346 84 184 320 184;
#P hidden fasten 20 0 19 1 339 188;
#P fasten 18 0 17 0 404 177;
#P fasten 23 0 17 0 413 120;
#P connect 17 0 20 0;
#P hidden connect 7 2 1 0;
#P connect 1 0 22 0;
#P connect 25 0 3 0;
#P connect 26 0 25 1;
#P connect 22 0 25 1;
#P connect 13 0 23 0;
#P connect 23 1 24 0;
#P connect 24 1 18 0;
#P connect 18 1 17 1;
#P pop;


February 15, 2006 | 9:43 pm


February 15, 2006 | 10:04 pm

Quote: lists@lowkeydigitalst wrote on Wed, 15 February 2006 15:09
—————————————————-
> On Feb 15, 2006, at 10:16 AM, Nick Rothwell wrote:
> > Oh, I’ve made a few Max/MSP multi-in, multi-out mixers in my time
>
> Same here. Although I have never successfully developed a proper
> "solo" function. Anyone out there figured this one out and have some
> tips?
>
> —–
> Nathan Wolek
> nw@nathanwolek.com
> http://www.nathanwolek.com
>
>
—————————————————-

Check out MatSui.
Nice little Solo/mute patcher included.

Tom


February 15, 2006 | 11:50 pm

Do everything using matrix~. Solo is basically a matter of multiplying
the list by 0 0 0 0 1 0 0 0, etc. where 1 is on the channel you want to
solo.

I have an object that converts lists into matrix~ coeffs in a very
efficient manner if you’re interested.

Peter McCulloch

P.S. I also have a very handy abstraction that does volume and panning
from two multisliders. Contact me off-list if you’d like them.


February 16, 2006 | 12:24 am

Alright, had some time to kill. Here’s a solution to the soloing
problem. Please note that you’ll need the two objects in addition to
the example patch. Everything’s easier with vexpr + scalarmode.

best,

Peter McCulloch

________________
Example patch
________________

max v2;
#N vpatcher 10 59 847 775;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 323 435 141 196617 PM.MatrixSetInlet 0 0 7 100;
#P hidden newex 147 95 37 196617 zl rev;
#P user kslider 464 166 54 0 36 48 31 12 0 128 128 128 128 128 128 255
255 255 0 0 0 0 0 0;
#P newex 464 242 31 196617 mtof;
#P flonum 464 274 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 157 412 123 196617 unpack f f f f f f f f;
#P newex 533 313 126 196617 loadmess 1 2 3 4 5 6 7 8.;
#P newex 564 336 114 196617 loadmess scalarmode 1;
#P newex 464 375 79 196617 vexpr $f1*$f2;
#P newex 48 553 98 196617 loadmess ramp 100;
#P newex 75 437 64 196617 print Coeffs;
#P newex 244 568 64 196617 cycle~ 880.;
#P newex 230 549 64 196617 cycle~ 770.;
#P newex 216 530 64 196617 cycle~ 660.;
#P newex 202 511 64 196617 cycle~ 550.;
#P newex 188 492 64 196617 cycle~ 440.;
#P newex 174 473 64 196617 cycle~ 330.;
#P newex 160 454 64 196617 cycle~ 220.;
#P newex 146 435 64 196617 cycle~ 110.;
#P toggle 90 596 25 0;
#P newex 146 619 41 196617 *~ 0.1;
#P newex 146 657 31 196617 dac~;
#P newex 146 592 110 196617 matrix~ 8 1 0.;
#P newex 147 383 148 196617 PM.MatrixSetOutlet 0 7 0 100;
#P comment 386 334 39 196617 Output;
#P hidden newex 17 145 123 196617 loadmess 0 1 0 1 1 0 0 0;
#P hidden newex 147 63 195 196617 loadmess 0.1 0.2 0.3 0.4 0.5 0.6 0.7
0.8;
#P comment 393 164 39 196617 Gain;
#N vpatcher 20 74 620 474;
#P window setfont "Sans Serif" 9.;
#P newex 50 50 117 196617 t l l;
#P newex 189 73 117 196617 loadmess scalarmode 1;
#P newex 50 105 117 196617 vexpr ($f1==0)*1+$f2;
#P newex 50 79 53 196617 maximum;
#P inlet 50 30 15 0;
#P outlet 50 127 15 0;
#P comment 174 108 100 196617 If the maximum is 0 (meaning the entire
list is off) , add one to the output.;
#P connect 2 0 6 0;
#P connect 6 0 3 0;
#P connect 3 0 4 0;
#P fasten 5 0 4 0 194 99 55 99;
#P connect 4 0 1 0;
#P connect 6 1 4 1;
#P pop;
#P newobj 239 241 95 196617 p MaskAndMultiply;
#P newex 147 266 102 196617 bondo 2 n;
#P user multiSlider 147 314 232 61 0. 1. 8 2681 15 0 2 2 2 50 0;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P newex 147 288 102 196617 vexpr $f1*($f2!=0);
#P user multiSlider 149 194 230 30 0. 1. 8 2665 15 0 0 2 0 50 0;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P user multiSlider 147 124 232 61 0. 1. 8 2681 47 0 2 2 2 50 0;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P comment 393 200 39 196617 "Solo";
#P connect 11 0 24 0;
#P connect 29 0 16 0;
#P connect 11 0 12 0;
#P connect 25 0 12 0;
#P connect 16 0 12 0;
#P connect 12 0 14 0;
#P connect 14 0 13 0;
#P connect 15 0 13 0;
#P hidden connect 8 0 33 0;
#P hidden connect 33 0 1 0;
#P connect 1 0 5 0;
#P connect 5 0 3 0;
#P connect 3 0 4 0;
#P connect 4 0 11 0;
#P hidden connect 9 0 2 0;
#P fasten 26 0 29 0 469 402 162 402;
#P connect 29 1 17 0;
#P connect 17 0 12 1;
#P connect 14 0 13 1;
#P connect 29 2 18 0;
#P connect 18 0 12 2;
#P connect 29 3 19 0;
#P connect 19 0 12 3;
#P connect 29 4 20 0;
#P connect 20 0 12 4;
#P connect 29 5 21 0;
#P connect 21 0 12 5;
#P connect 29 6 22 0;
#P connect 22 0 12 6;
#P fasten 2 0 6 0 154 232 244 232;
#P connect 6 0 5 1;
#P connect 5 1 3 1;
#P connect 29 7 23 0;
#P connect 23 0 12 7;
#P connect 32 0 31 0;
#P connect 31 0 30 0;
#P connect 30 0 26 0;
#P connect 27 0 26 0;
#P connect 28 0 26 1;
#P pop;

——————————–
PM.MatrixSetInlet
———————————

max v2;
#N vpatcher 64 411 475 828;
#P origin 20 0;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 25 339 54 196617 zl group 3;
#P message 154 294 21 196617 $1;
#P newex 123 261 27 196617 + 1;
#P message 123 237 21 196617 $5;
#P newex 123 214 45 196617 loadbang;
#P newex 25 316 139 196617 if $f2!=$f4 then $f1 $f2 $f3;
#P newex 0 293 35 196617 gate 2;
#P comment 222 99 172 196617 $5 Inhibit self feedback (e.g. 2 2 1.);
#P window linecount 4;
#P hidden comment 49 146 100 196617 Delete the object created here when
you opened the patch before saving…;
#P window setfont "Arial Black" 12.;
#P window linecount 1;
#P comment 126 360 175 791478284 peter.mcculloch@nyu.edu;
#P window setfont "Sans Serif" 9.;
#P hidden message 299 279 143 196617 script connect fritz 0 oscar 0;
#P hidden message 314 299 158 196617 script connect oscar 0 reginald 0;
#P hidden newex 299 251 40 196617 t b b l;
#P comment 222 82 153 196617 $4 Speed throttling;
#P newex 25 76 93 196617 speedlim $4;
#P objectname fritz;
#P newex 25 249 54 196617 zl group 3;
#P objectname reginald;
#P outlet 0 367 15 0;
#N comlet List of values to iterate;
#P inlet 25 52 15 0;
#N vpatcher 601 161 1201 561;
#P window setfont "Sans Serif" 9.;
#N vpatcher 10 59 223 228;
#P outlet 103 108 15 0;
#P outlet 43 110 15 0;
#P inlet 145 37 15 0;
#P inlet 43 37 15 0;
#P window setfont "Sans Serif" 9.;
#P newex 103 77 52 196617 maximum;
#P newex 43 77 49 196617 minimum;
#P connect 2 0 0 0;
#P connect 0 0 4 0;
#P connect 3 0 0 1;
#P connect 2 0 1 0;
#P connect 1 0 5 0;
#P connect 3 0 1 1;
#P pop;
#P newobj 130 63 51 196617 p lowhigh;
#P outlet 74 371 15 0;
#P newex 74 224 27 196617 – 1;
#P newex 130 99 27 196617 t i i;
#P newex 130 145 27 196617 + 1;
#P newex 130 166 27 196617 t i i;
#P newex 74 247 34 196617 + 0;
#P newex 44 201 40 196617 Uzi;
#P newex 74 268 41 196617 pack i i;
#P newex 147 291 27 196617 * 3;
#P newex 130 123 51 196617 !-;
#P message 206 30 39 196617 $1;
#P message 171 30 32 196617 $3;
#P message 130 30 33 196617 $2;
#P newex 130 4 45 196617 loadbang;
#P message 74 294 52 196617 $2 $1 %f;
#P newex 74 318 83 196617 zl group 15;
#P newex 74 347 285 196617 prepend script new oscar newex 45 200 370
196617 sprintf;
#P fasten 12 0 10 0 135 192 49 192;
#P connect 10 2 15 0;
#P connect 15 0 11 0;
#P connect 11 0 9 0;
#P connect 9 0 2 0;
#P connect 2 0 1 0;
#P connect 1 0 0 0;
#P connect 0 0 16 0;
#P fasten 14 1 11 1 152 118 103 118;
#P fasten 6 0 9 1 211 262 110 262;
#P connect 3 0 4 0;
#P connect 4 0 17 0;
#P connect 17 0 14 0;
#P connect 14 0 7 0;
#P connect 7 0 13 0;
#P connect 13 0 12 0;
#P connect 12 1 8 0;
#P connect 8 0 1 1;
#P connect 3 0 5 0;
#P connect 5 0 17 1;
#P connect 17 1 7 1;
#P connect 3 0 6 0;
#P pop;
#P hidden newobj 299 227 72 196617 p MakeSprintf;
#P comment 222 65 115 196617 $3 Outlet Upper Bounds;
#P comment 222 47 115 196617 $2 Outlet Lower Bounds;
#N thispatcher;
#Q end;
#P hidden newobj 329 338 60 196617 thispatcher;
#P comment 222 30 110 196617 $1 Inlet;
#P window linecount 2;
#P hidden comment 219 328 100 196617 Use scripting to do the heavy
lifting…;
#P window linecount 1;
#P comment 44 52 100 196617 incoming coefficients;
#P fasten 22 0 18 0 128 285 5 285;
#P connect 24 0 8 0;
#P connect 18 0 8 0;
#P connect 7 0 10 0;
#P connect 9 0 18 1;
#P connect 18 1 19 0;
#P connect 19 0 24 0;
#P connect 20 0 21 0;
#P connect 21 0 22 0;
#P fasten 20 0 23 0 128 234 159 234;
#P connect 23 0 19 3;
#P hidden connect 6 0 12 0;
#P hidden connect 12 0 14 0;
#P hidden connect 12 1 13 0;
#P hidden connect 14 0 3 0;
#P hidden connect 13 0 3 0;
#P hidden connect 12 2 3 0;
#P pop;

_________________
PM.MatrixSetOutlet
_________________

max v2;
#N vpatcher 64 411 550 808;
#P window setfont "Sans Serif" 9.;
#P newex 136 272 27 196617 + 1;
#P message 136 248 21 196617 $5;
#P newex 136 225 45 196617 loadbang;
#P newex 45 325 49 196617 route $3;
#P newex 20 302 35 196617 gate 2;
#P comment 242 100 172 196617 $5 Inhibit self feedback (e.g. 2 2 1.);
#P window linecount 4;
#P hidden comment 69 146 100 196617 Delete the object created here when
you opened the patch before saving…;
#P window setfont "Arial Black" 12.;
#P window linecount 1;
#P comment 240 365 175 791478284 peter.mcculloch@nyu.edu;
#P window setfont "Sans Serif" 9.;
#P hidden message 319 279 143 196617 script connect fritz 0 oscar 0;
#P hidden message 334 299 158 196617 script connect oscar 0 reginald 0;
#P hidden newex 319 251 40 196617 t b b l;
#P comment 242 82 95 196617 $4 Speed throttling;
#P newex 45 76 93 196617 speedlim $4;
#P objectname fritz;
#P newex 45 227 54 196617 zl group 3;
#P objectname reginald;
#P outlet 20 355 15 0;
#N comlet List of values to iterate;
#P inlet 45 52 15 0;
#N vpatcher 407 136 1007 536;
#P window setfont "Sans Serif" 9.;
#N vpatcher 10 59 223 228;
#P outlet 103 108 15 0;
#P outlet 43 110 15 0;
#P inlet 145 37 15 0;
#P inlet 43 37 15 0;
#P window setfont "Sans Serif" 9.;
#P newex 103 77 52 196617 maximum;
#P newex 43 77 49 196617 minimum;
#P connect 2 0 0 0;
#P connect 0 0 4 0;
#P connect 3 0 0 1;
#P connect 2 0 1 0;
#P connect 1 0 5 0;
#P connect 3 0 1 1;
#P pop;
#P newobj 130 70 51 196617 p lowhigh;
#P outlet 74 365 15 0;
#P newex 74 218 27 196617 – 1;
#P newex 130 93 27 196617 t i i;
#P newex 130 139 27 196617 + 1;
#P newex 130 160 27 196617 t i i;
#P newex 74 241 34 196617 + 0;
#P newex 44 195 40 196617 Uzi;
#P newex 74 262 41 196617 pack i i;
#P newex 147 285 27 196617 * 3;
#P newex 130 117 51 196617 !-;
#P message 206 48 30 196617 $3;
#P message 171 48 30 196617 $2;
#P message 130 48 30 196617 $1;
#P newex 130 25 45 196617 loadbang;
#P message 74 288 52 196617 $1 $2 %f;
#P newex 74 312 83 196617 zl group 15;
#P newex 74 341 285 196617 prepend script new oscar newex 45 200 370
196617 sprintf;
#P fasten 12 0 10 0 135 186 49 186;
#P connect 10 2 15 0;
#P connect 15 0 11 0;
#P connect 11 0 9 0;
#P connect 9 0 2 0;
#P connect 2 0 1 0;
#P connect 1 0 0 0;
#P connect 0 0 16 0;
#P fasten 14 1 11 1 152 112 103 112;
#P fasten 6 0 9 1 211 237 110 237;
#P connect 3 0 4 0;
#P connect 4 0 17 0;
#P connect 17 0 14 0;
#P connect 14 0 7 0;
#P connect 7 0 13 0;
#P connect 13 0 12 0;
#P connect 12 1 8 0;
#P connect 8 0 1 1;
#P connect 3 0 5 0;
#P connect 5 0 17 1;
#P connect 17 1 7 1;
#P connect 3 0 6 0;
#P pop;
#P hidden newobj 319 227 72 196617 p MakeSprintf;
#P comment 242 65 124 196617 $3 Outlet for connections;
#P comment 242 47 108 196617 $2 Inlet Upper Bounds;
#N thispatcher;
#Q end;
#P hidden newobj 349 338 60 196617 thispatcher;
#P comment 242 30 110 196617 $1 Inlet Lower Bounds;
#P window linecount 2;
#P hidden comment 239 328 100 196617 Use scripting to do the heavy
lifting…;
#P window linecount 1;
#P comment 64 52 100 196617 incoming coefficients;
#P fasten 22 0 18 0 141 295 25 295;
#P connect 18 0 8 0;
#P connect 19 1 8 0;
#P connect 7 0 10 0;
#P connect 9 0 18 1;
#P connect 18 1 19 0;
#P connect 20 0 21 0;
#P connect 21 0 22 0;
#P hidden connect 6 0 12 0;
#P hidden connect 12 0 14 0;
#P hidden connect 12 1 13 0;
#P hidden connect 12 2 3 0;
#P hidden connect 13 0 3 0;
#P hidden connect 14 0 3 0;
#P pop;


February 16, 2006 | 3:24 am

I built an 8×2 mixer for my thesis. You can download the documentation
and a runtime at http://homepages.nyu.edu/~jsa226

It boasts the following features:

�PPM meters with marked scale and continuous, 3s, or infinite peak hold
�VU meters with adjustable 0VU point, adjustable ballistics, numeric
readout with continuous, 3s, or infinite peak hold
�PPM & VU meters can be pre or post-fader
�Meter options set in preferences dialog (Apple+,)
�Transport controller (Apple+1) with start/pause (spacebar), RTZ
(return), loop on/off (Shift+Apple+L)
�panpot with shortcut buttons for L, C, R
�Autopan – specify the destination value, and the duration, and clicking
start will start an automated pan. Automated pans can also be paused and
resumed.
�Autofade – specify the destination value, and the duration, and
clicking start will start an automated fade. Automated fades can also be
paused and resumed.
�Group panning – pairs of channels can have their pans follow each other
�Inverse group panning – pan one channel in a pair to the left, and the
other channel in the pair moves proportionately to the right
�Group automation – Autopan and Autofade work in group and inverse group
modes
�Group faders – pairs of channels can have their faders follow each other
�Inverse group faders – fade one channel in a pair up, and the other
channel in the pair fades down (linear relationship)
�Fader shortcuts – buttons to quickly move a fader to 0 or unity
�EQ – 4-band EQ on each channel and master fader with on/off
�Mute/Solo – each fader can be muted or soloed *Note that while this can
be used with paired channels, it is a bit problematic. My plan is to
recode this to use Java, which will make it more efficient and less
prone to bugs.
�Dim – master fader has a dim button for reducing volume by 10dB
�sfplay~ – each channel has a sfplay~ object (note that transport
looping will only work effectively if all audio files are of the same
duration)

Take a look at it and give me your feedback if you are so inclined.

-Jonathan


February 16, 2006 | 6:57 pm

[QUOTE]> that url does not seem to work.

You’ll have to copy and paste it into your browser.

cheers[/QUOTE]

I did that originally, i meant that the page could not be found type of url does not work.

EDIT:
It seems to be working as of 2/16/2006 @ 1400 EST


March 1, 2006 | 3:20 pm

hi,

just looking at this example patch you sent for a solo function a
little more…

i tried putting this patch without modifying it into two bpatchers,
with my sound sources running into them, but then the solo function
doesn’t work anymore. i’m assuming i need to change the formula
If $i1 == 1 && $i2 == 1 then 0 else 1

could you point me in the right direction on how to use this in
multiple instances?

thank you very much!

alexandra


March 6, 2006 | 10:36 pm

looking at this channel strip soloing patch a little more… it seems
to work great except for when two or more channels are soloing and
you then un-solo one of them. all of the channels then start playing
back again, instead of just the one that still has solo engaged…

> if someone else is soloing (1) and I am soloing (1) then play (1) if
> someone else is not soloing (0) and I am not soloing (0) then play (1)
> If someone else is not soloing (0) and I am soloing (1) then play (1)
> If someone else is soloing (1) and If I am not soloing (0) then (0)
>
> If $i1 == 1 && $i2 == 1 then 0 else 1

has anyone else experimented with this solo function, and found a way
around this problem?

and thanks for the hint, veaseyc!

alex

included is my stereo version…

#P hidden inlet 184 204 15 0;
#P hidden outlet 184 260 15 0;
#P window setfont "Sans Serif" 9.;
#P number 46 211 26 9 0 157 35 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P window linecount 1;
#P hidden newex -4 255 61 196617 prepend set;
#P message 73 55 14 196617 0;
#P message 46 55 26 196617 127;
#P hidden newex 118 325 35 196617 *~ 1.;
#P hidden outlet 118 359 15 0;
#P user gain~ 69 88 24 100 158 0 1.071519 7.94321 10.;
#N comlet signal;
#P hidden inlet 111 -89 15 0;
#P hidden newex 86 -1 35 196617 gate~;
#P hidden newex 158 296 64 196617 r masterfad;
#P hidden newex 65 321 35 196617 *~ 1.;
#P hidden newex -187 -11 60 196617 loadmess 0;
#P hidden newex 323 174 60 196617 loadmess 0;
#P hidden newex 245 209 50 196617 pak $1 0;
#P hidden newex 352 -96 51 196617 zl slice 1;
#P hidden newex 313 -123 50 196617 route $1;
#P hidden toggle 245 167 15 0;
#P hidden toggle -85 190 15 0;
#P hidden toggle 199 5 15 0;
#P hidden newex 85 -44 29 196617 gate;
#P hidden newex 352 -66 27 196617 t b i;
#P hidden newex 199 -37 182 196617 if $i1 == 0 && $f2 == 1 then 0
else 1;
#P hidden newex -159 -137 72 196617 loadmess 128;
#P hidden newex -22 -93 57 196617 r muteALL;
#P hidden outlet 65 355 15 0;
#P hidden newex 313 -154 36 196617 r solo;
#P hidden newex -85 103 27 196617 !- 1;
#N comlet signal;
#P hidden inlet 72 -96 15 0;
#P hidden newex 47 -8 35 196617 gate~;
#P hidden newex -85 73 64 196617 route toggle;
#P user ubumenu 82 71 35 196617 1 0 1 1;
#X setrgb 255 255 255 140 140 140 234 234 234 4 4 4 254 10 10 112 112
112;
#X add mute;
#X prefix_set 0 0 0;
#P user ubumenu 46 71 35 196617 1 0 1 1;
#X setrgb 255 255 255 140 140 140 234 234 234 4 4 4 254 10 10 112 112
112;
#X add solo;
#X prefix_set 0 0
0;
#P user gain~ 46 88 24 100 158 0 1.071519 7.94321 10.;
#P hidden newex 245 243 36 196617 s solo;
#P hidden newex 245 105 64 196617 route toggle;
#P window linecount 4;
#P hidden comment 512 -124 355 196617 if someone else is soloing (1)
and I am soloing (1) then play (1) if someone else is not soloing (0)
and I am not soloing (0) then play (1) If someone else is not soloing
(0) and I am soloing (1) then play(1) If someone else is soloing (1)
and If I am not soloing (0) then (0) If $i1 == 1 && $i2 == 1 then 0
else 1;
#P user meter~ 104 88 117 210 50 0 168 0 103 103 103 255 153 0 255 0
0 217 217 0 153 186 0 12 3 3 3 3;
#P user meter~ 92 88 105 210 50 0 168 0 103 103 103 255 153 0 255 0 0
217 217 0 153 186 0 12 3 3 3 3;
#P hidden connect 17 1 16 1;
#P hidden connect 23 1 17 0;
#P hidden connect 22 1 23 0;
#P hidden connect 12 0 22 0;
#P hidden connect 25 0 24 1;
#P hidden connect 21 0 24 1;
#P hidden connect 24 0 4 0;
#P hidden connect 3 0 21 0;
#P hidden connect 6 2 3 0;
#P hidden connect 16 0 19 0;
#P hidden fasten 17 0 16 0 204 -49;
#P hidden fasten 22 0 16 0 213 -106;
#P hidden connect 37 0 5 0;
#P hidden connect 37 0 38 0;
#P hidden fasten 28 0 27 1 97 313;
#P hidden connect 28 0 33 1;
#P hidden connect 33 0 32 0;
#P hidden connect 31 0 1 0;
#P hidden connect 31 0 33 0;
#P hidden connect 30 0 29 1;
#P hidden fasten 19 0 18 1 139 -38;
#P hidden connect 5 0 27 0;
#P hidden connect 5 0 0 0;
#P hidden connect 18 0 29 0;
#P hidden connect 14 0 9 0;
#P hidden connect 14 0 29 0;
#P hidden connect 11 0 20 0;
#P hidden fasten 11 0 9 0 18 120 18 -34 52 -34;
#P hidden fasten 11 0 18 0 -116 120 -116 -42 90 -42;
#P hidden connect 11 0 29 0;
#P hidden connect 10 0 9 1;
#P hidden connect 29 0 31 0;
#P hidden connect 15 0 5 0;
#P hidden connect 15 0 31 0;
#P hidden connect 5 1 36 0;
#P hidden connect 5 1 31 0;
#P hidden connect 27 0 13 0;
#P hidden connect 18 0 9 0;
#P hidden connect 39 0 37 0;
#P hidden connect 36 0 37 0;
#P hidden connect 34 0 37 0;
#P hidden connect 35 0 37 0;
#P hidden connect 9 0 5 0;
#P hidden connect 26 0 11 0;
#P hidden connect 8 0 11 0;
#P hidden connect 7 2 8 0;
#P window clipboard copycount 40;


March 8, 2006 | 8:48 pm

looking at this channel strip soloing patch a little more… it seems
to work great except for when two or more channels are soloing and
you then un-solo one of them. all of the channels then start playing
back again, instead of just the one that still has solo engaged…

> if someone else is soloing (1) and I am soloing (1) then play (1) if
> someone else is not soloing (0) and I am not soloing (0) then play (1)
> If someone else is not soloing (0) and I am soloing (1) then play (1)
> If someone else is soloing (1) and If I am not soloing (0) then (0)
>
> If $i1 == 1 && $i2 == 1 then 0 else 1
>

has anyone else experimented with this solo function, and found a way
around this problem?

and thanks for the hint, veaseyc!

alex

included is my stereo version…

#P hidden inlet 184 204 15 0;
#P hidden outlet 184 260 15 0;
#P window setfont "Sans Serif" 9.;
#P number 46 211 26 9 0 157 35 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P window linecount 1;
#P hidden newex -4 255 61 196617 prepend set;
#P message 73 55 14 196617 0;
#P message 46 55 26 196617 127;
#P hidden newex 118 325 35 196617 *~ 1.;
#P hidden outlet 118 359 15 0;
#P user gain~ 69 88 24 100 158 0 1.071519 7.94321 10.;
#N comlet signal;
#P hidden inlet 111 -89 15 0;
#P hidden newex 86 -1 35 196617 gate~;
#P hidden newex 158 296 64 196617 r masterfad;
#P hidden newex 65 321 35 196617 *~ 1.;
#P hidden newex -187 -11 60 196617 loadmess 0;
#P hidden newex 323 174 60 196617 loadmess 0;
#P hidden newex 245 209 50 196617 pak $1 0;
#P hidden newex 352 -96 51 196617 zl slice 1;
#P hidden newex 313 -123 50 196617 route $1;
#P hidden toggle 245 167 15 0;
#P hidden toggle -85 190 15 0;
#P hidden toggle 199 5 15 0;
#P hidden newex 85 -44 29 196617 gate;
#P hidden newex 352 -66 27 196617 t b i;
#P hidden newex 199 -37 182 196617 if $i1 == 0 && $f2 == 1 then 0
else 1;
#P hidden newex -159 -137 72 196617 loadmess 128;
#P hidden newex -22 -93 57 196617 r muteALL;
#P hidden outlet 65 355 15 0;
#P hidden newex 313 -154 36 196617 r solo;
#P hidden newex -85 103 27 196617 !- 1;
#N comlet signal;
#P hidden inlet 72 -96 15 0;
#P hidden newex 47 -8 35 196617 gate~;
#P hidden newex -85 73 64 196617 route toggle;
#P user ubumenu 82 71 35 196617 1 0 1 1;
#X setrgb 255 255 255 140 140 140 234 234 234 4 4 4 254 10 10 112 112
112;
#X add mute;
#X prefix_set 0 0 0;
#P user ubumenu 46 71 35 196617 1 0 1 1;
#X setrgb 255 255 255 140 140 140 234 234 234 4 4 4 254 10 10 112 112
112;
#X add solo;
#X prefix_set 0 0
0;
#P user gain~ 46 88 24 100 158 0 1.071519 7.94321 10.;
#P hidden newex 245 243 36 196617 s solo;
#P hidden newex 245 105 64 196617 route toggle;
#P window linecount 4;
#P hidden comment 512 -124 355 196617 if someone else is soloing (1)
and I am soloing (1) then play (1) if someone else is not soloing (0)
and I am not soloing (0) then play (1) If someone else is not soloing
(0) and I am soloing (1) then play(1) If someone else is soloing (1)
and If I am not soloing (0) then (0) If $i1 == 1 && $i2 == 1 then 0
else 1;
#P user meter~ 104 88 117 210 50 0 168 0 103 103 103 255 153 0 255 0
0 217 217 0 153 186 0 12 3 3 3 3;
#P user meter~ 92 88 105 210 50 0 168 0 103 103 103 255 153 0 255 0 0
217 217 0 153 186 0 12 3 3 3 3;
#P hidden connect 17 1 16 1;
#P hidden connect 23 1 17 0;
#P hidden connect 22 1 23 0;
#P hidden connect 12 0 22 0;
#P hidden connect 25 0 24 1;
#P hidden connect 21 0 24 1;
#P hidden connect 24 0 4 0;
#P hidden connect 3 0 21 0;
#P hidden connect 6 2 3 0;
#P hidden connect 16 0 19 0;
#P hidden fasten 17 0 16 0 204 -49;
#P hidden fasten 22 0 16 0 213 -106;
#P hidden connect 37 0 5 0;
#P hidden connect 37 0 38 0;
#P hidden fasten 28 0 27 1 97 313;
#P hidden connect 28 0 33 1;
#P hidden connect 33 0 32 0;
#P hidden connect 31 0 1 0;
#P hidden connect 31 0 33 0;
#P hidden connect 30 0 29 1;
#P hidden fasten 19 0 18 1 139 -38;
#P hidden connect 5 0 27 0;
#P hidden connect 5 0 0 0;
#P hidden connect 18 0 29 0;
#P hidden connect 14 0 9 0;
#P hidden connect 14 0 29 0;
#P hidden connect 11 0 20 0;
#P hidden fasten 11 0 9 0 18 120 18 -34 52 -34;
#P hidden fasten 11 0 18 0 -116 120 -116 -42 90 -42;
#P hidden connect 11 0 29 0;
#P hidden connect 10 0 9 1;
#P hidden connect 29 0 31 0;
#P hidden connect 15 0 5 0;
#P hidden connect 15 0 31 0;
#P hidden connect 5 1 36 0;
#P hidden connect 5 1 31 0;
#P hidden connect 27 0 13 0;
#P hidden connect 18 0 9 0;
#P hidden connect 39 0 37 0;
#P hidden connect 36 0 37 0;
#P hidden connect 34 0 37 0;
#P hidden connect 35 0 37 0;
#P hidden connect 9 0 5 0;
#P hidden connect 26 0 11 0;
#P hidden connect 8 0 11 0;
#P hidden connect 7 2 8 0;
#P window clipboard copycount 40;

On Feb 15, 2006, at 10:36 PM, veaseyc@bgnet.bgsu.edu wrote:

> How about this solo statement:
>
> if someone else is soloing (1) and I am soloing (1) then play (1) if
> someone else is not soloing (0) and I am not soloing (0) then play (1)
> If someone else is not soloing (0) and I am soloing (1) then play (1)
> If someone else is soloing (1) and If I am not soloing (0) then (0)
>
> If $i1 == 1 && $i2 == 1 then 0 else 1
>
>
> One fader patch:
>
> Put in bpatchers with a series of arguments
>
> (might want to use the mute~ object instead or in addition to the gate
> to free up some DSP.)
>
>
> max v2;
> #N vpatcher 26 168 1040 840;
> #P window setfont "Sans Serif" 9.;
> #P window linecount 1;
> #P hidden newex 358 522 64 196617 r masterfad;
> #P hidden newex 265 547 44 196617 *~ 1.;
> #P window setfont "Sans Serif" 12.;
> #P flonum 246 452 41 12 0 0 96 3 255 255 255 0 0 0 222 222 222 0 0 0;
> #P window setfont "Sans Serif" 9.;
> #P hidden newex 169 423 34 196617 atodb;
> #P window setfont "Sans Serif" 10.;
> #P flonum 246 436 41 10 0 0 160 3 255 255 255 0 0 0 222 222 222 0 0 0;
> #P window setfont "Sans Serif" 9.;
> #P newex 13 215 60 196617 loadmess 0;
> #P newex 523 400 60 196617 loadmess 0;
> #P newex 445 435 50 196617 pak $1 0;
> #P newex 552 130 51 196617 zl slice 1;
> #P newex 513 103 50 196617 route $1;
> #P toggle 445 393 15 0;
> #P toggle 115 416 15 0;
> #P hidden toggle 399 231 15 0;
> #P newex 315 196 29 196617 gate;
> #P newex 552 160 27 196617 t b i;
> #P newex 399 189 180 196617 if $i1 == 0 && $f2 == 1 then 0 else 1;
> #P newex 41 89 72 196617 loadmess 128;
> #P newex 178 133 57 196617 r muteALL;
> #P hidden outlet 265 581 15 0;
> #P newex 513 72 36 196617 r solo;
> #P newex 115 329 27 196617 !- 1;
> #N comlet signal;
> #P inlet 272 130 15 0;
> #P newex 247 218 35 196617 gate~;
> #P newex 115 299 62 196617 route toggle;
> #P window setfont Arial 12.;
> #P user ubumenu 246 278 41 131137548 1 0 1 1;
> #X setrgb 255 255 255 140 140 140 234 234 234 4 4 4 254 10 10 112
> 112 112;
> #X add mute;
> #X prefix_set 0 0 0;
> #P user ubumenu 246 296 41 131137548 1 0 1 1;
> #X setrgb 255 255 255 140 140 140 234 234 234 4 4 4 254 10 10 112
> 112 112;
> #X add solo;
> #X prefix_set 0 0
0;
> #P user gain~ 263 314 24 100 158 0 1.071519 7.94321 10.;
> #P user meter~ 246 314 264 436 50 0 168 0 103 103 103 255 153 0 255
> 0 0
> 217 217 0 153 186 0 12 3 3 3 3;
> #P window setfont "Arial Black" 12.;
> #P comment 243 256 58 791478284 CH $1;
> #P window setfont "Sans Serif" 9.;
> #P newex 445 469 36 196617 s solo;
> #P user panel 237 251 59 231;
> #X brgb 154 165 176;
> #X frgb 0 0 0;
> #X border 1;
> #X rounded 0;
> #X shadow 0;
> #X done;
> #P newex 445 331 62 196617 route toggle;
> #P window linecount 7;
> #P comment 712 102 218 196617 if someone else is soloing (1) and I am
> soloing (1) then play (1) if someone else is not soloing (0) and I am
> not soloing (0) then play (1) If someone else is not soloing (0) and I
> am soloing (1) then play(1) If someone else is soloing (1) and If I am
> not soloing (0) then (0) If $i1 == 1 && $i2 == 1 then 0 else 1;
> #P hidden connect 8 2 9 0;
> #P connect 27 0 12 0;
> #P connect 9 0 12 0;
> #P connect 12 0 21 0;
> #P hidden connect 5 0 29 0;
> #P hidden connect 6 0 5 0;
> #P hidden connect 29 0 28 0;
> #P fasten 12 0 10 0 194 346 194 192 252 192;
> #P hidden connect 15 0 10 0;
> #P fasten 19 0 10 0 320 215 252 215;
> #P hidden connect 16 0 6 0;
> #P hidden connect 10 0 6 0;
> #P hidden connect 6 0 31 0;
> #P hidden connect 31 0 14 0;
> #P connect 11 0 10 1;
> #P hidden fasten 32 0 31 1 297 539;
> #P fasten 12 0 19 0 84 346 84 184 320 184;
> #P hidden fasten 20 0 19 1 339 188;
> #P fasten 18 0 17 0 404 177;
> #P fasten 23 0 17 0 413 120;
> #P connect 17 0 20 0;
> #P hidden connect 7 2 1 0;
> #P connect 1 0 22 0;
> #P connect 25 0 3 0;
> #P connect 26 0 25 1;
> #P connect 22 0 25 1;
> #P connect 13 0 23 0;
> #P connect 23 1 24 0;
> #P connect 24 1 18 0;
> #P connect 18 1 17 1;
> #P pop;
>
>
>


March 8, 2006 | 9:25 pm

Allow me to once again request the setrow and setcolumn messages for
matrix~. This object is perhaps one of the most useful (and
efficient!) in Max, but the addition of these features would greatly
improve users’ interactions with the object. (having to specify every
inlet, outlet, etc.)

I sent an implementation about a month ago to the list using vexpr +
matrix~. Vexpr is definitely the easiest, and cleanest way of
implementing this because it doesn’t require any talkback between
channels. It’s just a matter of setting up the right multiplication
between volume lists.

Basically, how it works… (there’s some additional logic required for
deriving the soloing bits, but that’s included in the code I sent
earlier)

Volumes 1. 0.5 0.2 0.4 (channels 1-4)

solo channel 2 = 0 1 0 0

1. 0.5 0.2 0.4
x 0. 1. 0. 0.
____________________
0. 0.5 0. 0.

mute channel 3 = 1 1 0 1

It doesn’t do mute right now, (but that is trivial to add once you see
the solo code), but it is way faster than any implementation using
individual abstractions for channels. Through a cascade~ before each
inlet, and now you have your eq.

Peter McCulloch


Viewing 19 posts - 1 through 19 (of 19 total)