Forums > MaxMSP

live looping

April 17, 2006 | 10:48 pm

i want to be able to trigger live recordings and loop them. i have looked into using sfrecord~, but i cant seem to get it do record in anything other than sd2 format(using the autonaming message, as i dont want to have to name my file on the fly), which is no good for an external i am using.

using the record~, buffer~ method i cannot seem to work out how to set it up so that the audio will self-trim according to the record time, and thus loop proporly

can any one help?


April 17, 2006 | 11:28 pm

1. holy moly, please read the manual. you can search those PDFs, you
don’t have to memorize it. the thesaurus at the end of the reference
can be valuable too.

2. read the sfrecord~ help file (again?).

3. check the examples, isn’t there one that covers this?

4. i made a lousy little app last year to record continuously and save
the last n seconds on demand… for those times when you’re goofing
around but want to be able to save the ‘genius’ moments that won’t
happen again. probably easy to repurpose, it’s very simple. click the
bottom-right toggle to browse the patch.

http://phossie.com/max/

5. seriously. i get the impression you’re working toward an ulcer, but
if you take even 20 minutes and read carefully you’ll save yourself some
time tomorrow and every day after that. you have, uh, some of my sympathy.


April 18, 2006 | 12:03 am

Have you tried looking on some sites to see if someone’s all ready done what
you want to do?

I’m new to Max/Msp myself, and so I’m probably replicating work that other
people have done in an effort to learn things, it’s just how I like to
work– but I’m not under any pressure from anyone to get anything done
(except from my bandmate, and, since we’re not making a living by playing
music, even he’s not all that worried about it), but there are oodles of
sites out there where people have shared their patches:

http://www.cycling74.com/twiki/bin/view/ResourceGuide can get you started.

Todd.

http://www.cntr-band.com/index.htm


April 18, 2006 | 12:08 am

i just thought this is the kind of thing someone would have already done

i have, and will continue to search all reference media, i am not just here for easy answers


April 18, 2006 | 12:54 am

The fact that your signature apologizes for you sort of cheapens both
the apology and anything in the content of your messages.

This list already has WAY too many messages per day for me to pay
attention to most of them anyhow, your insistence on asking questions
that you know may be easy will paradoxically lead to a lesser chance
that your questions are actually answered. We all understand that you
have a deadline, but realize that we too have deadlines… only we’re
working on stuff that’s not what you’re working on.

_Mark


April 18, 2006 | 1:00 am

John wrote:
> i just thought this is the kind of thing someone would have already
> done

yes, understood. the patch i pointed you to should help you with the
buffer~ stuff. you can use very similar concepts to create a looper.
it’s not as bad as it might look… most of the patch is just handling
the file operations! (it writes wave, btw, just uses a timestamp for
the filename.) the key elements are record~ and its sync output, modulo
(%), and a couple of buffer~s.

on the other hand, the previous post might be better advice: there are
many, many people working with max that are much, much smarter and more
skilled than me, and a bunch of them share openly.

and these might come in handy for you if sampling is your thing and
externals are ok:

http://grrrr.org/ext/xsample/


April 18, 2006 | 8:30 am

Hi. I’ve been doing some live looping with Max, so I may be able to shed some light on this for you.
First, I need to say that it is a bit heavy to see that other members spend more time insulting someone than helping them (the other replies…) but to each his own.

Lately, I’ve been using the stutter object to loop. This is for two reasons; first, because stutter is always recording, whether you need it or not. This enables me to decide after the fact if I want to use something. Second, stutter records into a RAM buffer, making it inherently faster and more manageable than an object which writes to disk. (I must qualify this; a few months ago I set up a sort of Sampler which uses 20 sfplay objects to give a 20-voice sampler, and I didn’t hear any difference in performance. Theoretically, at least, there should be a difference.)
With stutter, I can use a switch (in my case a footswitch) to start and end the recording I want to loop. (I sometimes use a audio-threshold switch instead, which records each phrase automatically.) What this switch does is to start a timer (to measure the increasing length of the material I am presently recording) and, when I lift my foot again, it stops the timer, sends the number of samples between starting and stopping the recording to the object, and sends the bang to stutter which causes the record buffer to send the information from the last x samples into the playback buffer. I then can manipulate the signal from a phasor object in order to get the playback I want.

The next step I need to try is synchronizing multiple stutter objects (I simply haven’t needed this yet), but this shouldn’t pose any problems if the phasor objects are organized well.

In my experience, this approach is the best way to loop live input. Using the buffer object with groove (here in Spain, there is no tilde on the keyboard and I don’t know the ASCII code, so I am not including them…) I managed to do almost the same thing, but there is a drawback in that the buffer object needs a fixed length when it is created, and this means that in order to loop it, you need to keep track of the length you want to use. That proves to be a bit lurchy in practice. Using soundfiles gives the (at least theoretical) lag of disk-operations.

On the musical side of things: it is often adviseable to quantize the length of the loop so that it fits whatever else you are doing at the same time. This can be done with a simple algorhythm which lengthens or shortens the timer-data to a configurable value, or, more usefull, an algorhythm which quantizes the start and end signals produced by the switch. In the sort of work I do, I have two modes; one which quantizes the in and out points in relation to a BPM value, and another which uses the first loop as the basic length, and proportions the other loops to be even fractions or multiples of that loop.

What can one do with this? I use it for various things, but when I am using it for performing, I have routines for dynamically changing the length (by varying the phasor values) and the pitch (using gizmo objects) of the loops. I also have another stutter object set up to loop the complete output in order to have a cumulative effect. This allows me to use effects with the voice (and other instruments) which are of suprising scope and variety.

The only drawback I can imagine to this approach is the predefined length of the recording buffer in the stutter object. Objectively, however, this never plays a role. It is extremely seldom that I may want more than the 10-second buffer I customarily use, and if I do, my 1GB of RAM can give me plenty of headroom; enough for a couple of hours, I expect.

Hope this has helped.

Dayton


April 18, 2006 | 1:02 pm

been reading the help file for stutter, cant quite figure out how to send the recording to a buffer~, any clues?


April 18, 2006 | 1:48 pm

click on [p additional_messages] and you will see it right there -

[setbuf ]


Michael Duffy

http://www.ruccas.org/index.php?Michael%20Duffy


April 18, 2006 | 1:56 pm

I see, duh!! homer moment!!

just to clarify, am i right in thinking that the corresponding buffer object needs no set time, or do i need to route the length of the sample to the buffer BEFORE sending the file?


April 18, 2006 | 2:37 pm

not necessary


April 18, 2006 | 4:51 pm

I see now in rechecking the mail that some unclarity can arise from the use of the word "buffer".

Stutter is organized into two buffers. One is like the "tapin" object which just keeps writing into its own space, keeping track of the last x samples as a sort of moving window. That is the "record buffer". The other is the "playback buffer", which is also internal; this is what you are resizing when you send the timer information to the stutter object. In the patch I am using, there is no external buffer, even though stutter has a command to send the recording to one. Instead, I just use as many stutters as I need to get the job done.

I will post the patch, but cannot now because it is in another machine in another place.

Have fun,
Dayton


April 19, 2006 | 12:44 am

that would be great, cheers


April 19, 2006 | 4:39 am

I’m looking for the same thing…! I’ve spent all night with buffer~…I’m trying to figure out how to extend buffer~ to record more than a few seconds although this may not be ideal, but I can’t seem to figure it out…

I’m on board the curious train.


April 19, 2006 | 2:25 pm

what i have so far

i have built a solution of sorts, but somethings dont work

for this solutions you will need the following object one of your external folders

save it as clocker_plus (quite useful, if you look inside i have left some hints)

max v2;
#N vpatcher 0 44 1440 896;
#P toggle 382 203 15 0;
#P outlet 427 344 15 0;
#P button 429 297 15 0;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 429 217 29 196617 gate;
#P window linecount 25;
#P comment 561 36 64 196617 if you want the current outputs to be reset as soon as the clocker is stopped , then attatch the same toggle to the second input accects zeros or every second bang (use only one type) also output bang when stopped when connected;
#P inlet 273 39 15 0;
#P window linecount 1;
#P message 271 178 14 196617 0;
#P newex 273 129 69 196617 select 0 bang;
#N comlet stopped milli;
#P outlet 322 346 15 0;
#P number 322 297 54 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 266 247 66 196617 mstosamps~;
#N comlet current samp;
#P outlet 214 346 15 0;
#N comlet stopped milli;
#P outlet 104 345 15 0;
#N comlet current milli;
#P outlet 42 346 15 0;
#P inlet 105 36 15 0;
#P number 44 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 214 297 54 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 158 247 66 196617 mstosamps~;
#P newex 48 146 46 196617 select 0;
#P number 105 300 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P toggle 105 91 15 0;
#P number 105 217 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 105 179 62 196617 prepend set;
#P newex 105 146 52 196617 clocker 1;
#P window linecount 14;
#P comment 191 55 64 196617 clocker_plus takes bangs , toggle or 1 and 0. outputs current time and banged time at stop in both milliseconds and samples (at at current sample rate);
#P connect 9 0 11 0;
#P connect 1 0 9 0;
#P connect 18 0 9 0;
#P connect 4 0 6 0;
#P connect 5 0 12 0;
#P connect 10 0 4 0;
#P connect 4 0 1 0;
#P connect 1 0 2 0;
#P connect 6 0 3 0;
#P connect 2 0 3 0;
#P connect 3 0 5 0;
#P connect 1 0 7 0;
#P connect 7 1 8 0;
#P connect 18 0 8 0;
#P connect 8 0 13 0;
#P connect 3 0 14 0;
#P connect 17 0 18 0;
#P connect 19 0 17 0;
#P connect 14 1 15 0;
#P connect 15 0 16 0;
#P connect 17 1 24 0;
#P connect 22 0 23 0;
#P connect 24 0 21 0;
#P connect 17 0 22 0;
#P connect 21 0 22 0;
#P connect 17 1 21 1;
#P pop;


April 19, 2006 | 2:27 pm

once you have that so you can load it as an object, try this

i have used a buffer, instead of an adc~ so as to save you from having to mess with a microphone during testing

it seems to work, although the waveform~ (blue box) and the info~ dont seem to update properly. I think my ordering is okay, maybe you can see the flaw

#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P comment 761 559 59 196617 output;
#P number 367 524 66 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 289 486 105 196617 info~ test_end;
#P message 102 459 66 196617 set test_end;
#P message 109 396 20 196617 t b;
#P user waveform~ 76 509 200 74 3 9;
#W mode select;
#W mouseoutput continuous;
#W unit ms;
#W grid 1000.;
#W ticks 0;
#W labels 1;
#W vlabels 0;
#W vticks 1;
#W bpm 120. 4.;
#W frgb 33 0 0;
#W brgb 60 178 173;
#W rgb2 0 95 255;
#W rgb3 0 0 0;
#W rgb4 0 0 0;
#W rgb5 190 137 255;
#W rgb6 100 100 100;
#W rgb7 100 100 100;
#P message 735 261 33 196617 clear;
#P message 643 513 14 196617 1;
#P user ezdac~ 747 725 791 758 0;
#P newex 460 220 53 196617 t b b i b;
#P button 699 501 15 0;
#P toggle 643 554 15 0;
#P message 643 624 41 196617 loop $1;
#P message 699 555 14 196617 1;
#P newex 701 586 29 196617 sig~;
#P newex 701 647 89 196617 groove~ test_end;
#P message 603 294 29 196617 size;
#P newex 603 270 45 196617 prepend;
#P user meter~ 167 92 247 105 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 newex 728 335 113 196617 buffer~ test_end 1000;
#P message 110 353 98 196617 setbuf test_end 0 1;
#P button 278 100 15 0;
#P button 460 191 15 0;
#P newex 33 89 100 196617 receive~ test_audio;
#P newex 1059 244 86 196617 send~ test_audio;
#P button 1044 67 15 0;
#P toggle 1000 129 15 0;
#P message 992 165 41 196617 loop $1;
#P message 1054 110 14 196617 1;
#P newex 1056 141 29 196617 sig~;
#P newex 1059 179 68 196617 groove~ test;
#P message 1176 134 43 196617 replace;
#P newex 1176 176 65 196617 buffer~ test;
#P newex 153 269 114 196617 stutter~ 115000 1000;
#P number 332 190 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 373 191 57 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 252 190 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 293 190 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 268 149 67 196617 clocker_plus;
#P window linecount 5;
#P comment 1089 68 100 196617 load a test sound here click bang to play and loop;
#P connect 29 0 32 0;
#P connect 29 0 26 0;
#P connect 24 0 31 0;
#P connect 24 0 31 1;
#P connect 19 0 35 0;
#P connect 19 0 6 0;
#P connect 16 0 6 0;
#P connect 16 0 21 0;
#P connect 4 0 6 0;
#P connect 4 0 30 0;
#P connect 11 0 13 0;
#P connect 11 0 10 0;
#P connect 14 0 11 0;
#P connect 36 0 34 0;
#P connect 35 0 36 0;
#P connect 30 1 19 0;
#P connect 1 0 3 0;
#P connect 18 0 1 0;
#P connect 35 0 37 0;
#P connect 1 1 2 0;
#P connect 18 0 1 1;
#P connect 1 2 5 0;
#P connect 37 6 38 0;
#P connect 1 3 4 0;
#P connect 1 4 17 0;
#P connect 32 0 28 0;
#P connect 28 0 27 0;
#P connect 30 0 29 0;
#P connect 26 0 25 0;
#P connect 27 0 24 0;
#P connect 25 0 24 0;
#P connect 30 2 22 0;
#P connect 22 0 23 0;
#P connect 33 0 20 0;
#P connect 23 0 20 0;
#P connect 30 3 33 0;
#P connect 13 0 12 0;
#P connect 12 0 9 0;
#P connect 10 0 9 0;
#P connect 9 0 15 0;
#P connect 8 0 7 0;
#P window clipboard copycount 40;


April 19, 2006 | 10:00 pm

weird. The "clocker_plus" works fine, but when I open the other patch…it ONLY opens as a text file? it won’t build into a patch…are you sure you copied it right?
If you can maybe test it, then re-post I’d REALLY appreciate it.


April 19, 2006 | 10:18 pm

damon, try pasting text DIRECTLY into the patcher window, i assume you are pasting into the text view


April 19, 2006 | 11:50 pm

amazing!
I didn’t know you could do that!
I’ve been using Max/MSP on/off for a few years, and yet I’m still very much an amateur.
one thing I see off the bat is the prepend –> size –> buffer~ chain you got going on…I don’t think that works, but I’m not completely sure…I haven’t even tried this beast yet so I shouldn’t jump the gun…however, I think that if you give the buffer~ a size argument of -1 is automatically resizes to whatever you load in…this might be more effective…
ok
now I’m going to actually try it out…
Thank you very much, by the way…


April 20, 2006 | 12:22 am

your absolutely right, the size thingy doesnt work, it should all be in one object [prepend size], rather than prepend routing to size $1.

heres the update. it has a problem tho, for some reason you cant make a second loop bigger than the first one?!?!

#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P message 569 624 68 196617 loopinterp $1;
#P comment 36 441 47 196617 select all;
#P message 33 455 51 196617 0 -1 0 -1;
#P message 195 190 14 196617 0;
#P user waveform~ 101 561 200 74 3 9;
#W mode select;
#W mouseoutput continuous;
#W unit ms;
#W grid 1000.;
#W ticks 0;
#W labels 1;
#W vlabels 0;
#W vticks 1;
#W bpm 120. 4.;
#W frgb 33 0 0;
#W brgb 60 178 173;
#W rgb2 0 95 255;
#W rgb3 0 0 0;
#W rgb4 0 0 0;
#W rgb5 190 137 255;
#W rgb6 100 100 100;
#W rgb7 100 100 100;
#P newex 91 404 26 196617 t b;
#P comment 761 559 59 196617 output;
#P number 367 524 66 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 289 486 105 196617 info~ test_end;
#P message 102 459 66 196617 set test_end;
#P message 735 261 33 196617 clear;
#P message 643 513 14 196617 1;
#P user ezdac~ 747 725 791 758 0;
#P newex 460 220 53 196617 t b b i b;
#P button 672 474 15 0;
#P toggle 643 554 15 0;
#P message 643 624 41 196617 loop $1;
#P message 701 513 14 196617 1;
#P newex 701 586 29 196617 sig~;
#P newex 701 647 89 196617 groove~ test_end;
#P newex 603 270 66 196617 prepend size;
#P user meter~ 167 92 247 105 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 newex 728 335 113 196617 buffer~ test_end 1000;
#P message 91 336 98 196617 setbuf test_end 0 1;
#P button 278 100 15 0;
#P button 460 191 15 0;
#P newex 33 89 100 196617 receive~ test_audio;
#P newex 1059 244 86 196617 send~ test_audio;
#P button 1044 67 15 0;
#P toggle 1000 129 15 0;
#P message 992 165 41 196617 loop $1;
#P message 1054 110 14 196617 1;
#P newex 1056 141 29 196617 sig~;
#P newex 1059 179 68 196617 groove~ test;
#P message 1176 134 43 196617 replace;
#P newex 1176 176 65 196617 buffer~ test;
#P newex 153 269 114 196617 stutter~ 115000 1000;
#P number 332 190 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 373 191 57 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 252 190 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 293 190 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 268 149 67 196617 clocker_plus;
#P window linecount 5;
#P comment 1089 68 59 196617 load a test sound here click bang to play and loop;
#P window linecount 3;
#P comment 353 102 100 196617 click once to start , once to stop recording;
#P connect 19 0 40 0;
#P connect 19 0 2 0;
#P connect 29 0 32 0;
#P connect 29 0 26 0;
#P connect 20 0 38 0;
#P connect 20 0 7 0;
#P connect 9 0 8 0;
#P connect 10 0 16 0;
#P connect 13 0 10 0;
#P connect 11 0 10 0;
#P connect 12 0 14 0;
#P connect 12 0 11 0;
#P connect 15 0 12 0;
#P connect 8 1 15 0;
#P connect 14 0 13 0;
#P connect 24 0 31 1;
#P connect 24 0 31 0;
#P connect 30 3 33 0;
#P connect 33 0 21 0;
#P connect 23 0 21 0;
#P connect 27 0 24 0;
#P connect 25 0 24 0;
#P connect 43 0 24 0;
#P connect 26 0 25 0;
#P connect 30 0 29 0;
#P connect 28 0 43 0;
#P connect 28 0 27 0;
#P connect 32 0 28 0;
#P connect 30 2 23 0;
#P connect 3 0 39 3;
#P connect 3 0 30 0;
#P connect 2 4 18 0;
#P connect 2 3 5 0;
#P connect 35 6 36 0;
#P connect 2 2 6 0;
#P connect 2 1 3 0;
#P connect 38 0 41 0;
#P connect 38 0 34 0;
#P connect 38 0 35 0;
#P connect 2 0 4 0;
#P connect 40 0 39 0;
#P connect 40 0 39 2;
#P connect 17 0 22 0;
#P connect 17 0 7 0;
#P connect 5 0 7 0;
#P connect 30 1 20 0;
#P connect 34 0 39 0;
#P connect 41 0 39 0;
#P window clipboard copycount 44;


April 20, 2006 | 1:16 am

I’m not sure if this is going to help you in your cause…, but its helping mine…check it out…its basic, but I’m going to extend it to have longer recording times and more .aiff’s…

max v2;
#N vpatcher 587 323 1401 918;
#P window setfont "Sans Serif" 9.;
#P number 148 399 93 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P number 112 135 92 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 390 169 14 196617 0;
#P message 348 167 14 196617 1;
#P message 277 170 14 196617 0;
#P message 235 168 14 196617 1;
#P message 384 437 14 196617 1;
#P message 294 437 14 196617 1;
#P toggle 265 329 15 0;
#P button 244 330 15 0;
#P newex 248 396 223 196617 select 1000 5000 10000 15000 20000 25000;
#P newex 248 372 70 196617 clocker 1000;
#P message 311 437 71 196617 open fuck.aiff;
#P message 222 438 70 196617 open dick.aiff;
#P toggle 91 482 52 0;
#P newex 177 549 31 196617 dac~;
#N sfplay~ 2 120960 0 ;
#P newobj 177 516 53 196617 sfplay~ 2;
#P toggle 229 65 15 0;
#P button 208 66 15 0;
#P newex 212 132 223 196617 select 1000 5000 10000 15000 20000 25000;
#P newex 212 108 70 196617 clocker 1000;
#P message 38 218 71 196617 open fuck.aiff;
#P message 24 201 70 196617 open dick.aiff;
#P newex 114 208 64 196617 IO;
#P newex 114 263 64 196617 sfrecord~ 2;
#P window linecount 11;
#P comment 456 49 271 196617 Yo. check it… 1)double click IO object…I’m not sure if you know how to use this device so I’m going to explain…click on left toggle box and select "sound file…click" OPEN…select an .aiff file…click LOOP…hit the dac~ speaker button to turn on , but keep in mind you won’t hear nuthin’ 2)hit Bang $1 to trigger 2 sequential 5-second recordings entitled "dick.aiff" and "fuck.aiff" (clever , I know)… 3)hit Bang $2 to trigger sequential playback of "dick.aiff" and "fuck.aiff";
#B color 12;
#P window setfont "Sans Serif" 14.;
#P window linecount 1;
#P comment 198 49 100 196622 BANG $1;
#B color 7;
#P comment 236 311 100 196622 BANG $2;
#B color 14;
#P comment 11 94 100 196622 RECORD;
#P comment 27 390 100 196622 PLAYBACK;
#P connect 10 0 7 0;
#P connect 10 3 8 0;
#P connect 9 0 28 0;
#P connect 27 0 5 0;
#P connect 26 0 5 0;
#P connect 25 0 5 0;
#P connect 24 0 5 0;
#P connect 7 0 5 0;
#P connect 8 0 5 0;
#P connect 6 0 5 0;
#P connect 18 0 29 0;
#P connect 6 1 5 1;
#P connect 23 0 13 0;
#P connect 17 0 13 0;
#P connect 22 0 13 0;
#P connect 16 0 13 0;
#P connect 15 0 14 0;
#P connect 13 0 14 0;
#P connect 13 1 14 1;
#P connect 12 0 9 0;
#P connect 11 0 9 0;
#P connect 9 0 10 0;
#P connect 19 0 16 0;
#P connect 10 1 24 0;
#P connect 20 0 18 0;
#P connect 21 0 18 0;
#P connect 18 0 19 0;
#P connect 10 2 25 0;
#P connect 19 1 22 0;
#P connect 19 2 17 0;
#P connect 10 4 26 0;
#P connect 19 3 23 0;
#P connect 10 5 27 0;
#P pop;


April 20, 2006 | 1:23 am

i can see what your doing

i’m trying to create something that will allow me to loop straight away.

i.e start a loop on vocals or guitar or any external input. record a loop, and as soon as its done, the loop seemlessly begins so you can manipulate it in other patchs

hense building a layered performance, like a one man max band


April 20, 2006 | 1:51 am

>i.e start a loop on vocals or guitar or any external input. record >a loop, and as soon as its done, the loop seemlessly begins so you >can manipulate it in other patchs

nothing too elaborate , you can just build on it :

#P user meter~ 269 161 282 230 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 "Sans Serif" 9.;
#P window linecount 1;
#P message 189 326 29 196617 stop;
#P flonum 317 316 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 57 60 33 196617 clear;
#P newex 308 528 31 196617 dac~;
#P flonum 595 298 87 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 595 272 55 196617 clocker 1.;
#B color 5;
#P toggle 269 84 15 0;
#P newex 269 118 31 196617 adc~;
#P user waveform~ 412 320 257 42 3 9;
#W mode select;
#W mouseoutput continuous;
#W unit ms;
#W grid 1000.;
#W ticks 0;
#W labels 1;
#W vlabels 0;
#W vticks 1;
#W bpm 120. 4.;
#W frgb 33 0 0;
#W brgb 60 178 173;
#W rgb2 0 95 255;
#W rgb3 0 0 0;
#W rgb4 0 0 0;
#W rgb5 190 137 255;
#W rgb6 100 100 100;
#W rgb7 100 100 100;
#P newex 391 275 30 196617 t b b;
#P message 412 298 42 196617 set bob;
#P flonum 564 366 52 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 511 366 52 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P user gain~ 332 395 24 100 158 0 1.071519 7.94321 10.;
#P user gain~ 306 395 24 100 158 0 1.071519 7.94321 10.;
#P newex 318 339 41 196617 sig~ 1.;
#P message 229 314 35 196617 loop 1;
#P message 230 332 50 196617 startloop;
#P newex 303 368 74 196617 groove~ bob 2;
#P user number~ 290 215 329 230 9 3 3 2 0. 0. 0 0. 250 0. 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 416 227 41 196617 sel 1 0;
#P toggle 493 93 48 0;
#P newex 290 191 73 196617 record~ bob 2;
#P newex 55 81 104 196617 buffer~ bob 10000 2;
#P connect 16 0 24 0;
#P connect 16 0 1 0;
#P fasten 2 0 1 0 498 166 295 166;
#P fasten 2 0 3 0 498 184 421 184;
#P fasten 2 0 18 0 498 206 600 206;
#P connect 21 0 0 0;
#P connect 16 1 1 1;
#P connect 5 1 10 0;
#P connect 5 0 9 0;
#P connect 12 0 5 2;
#P connect 11 0 5 1;
#P fasten 7 0 5 0 234 351 308 351;
#P fasten 6 0 5 0 235 349 308 349;
#P connect 8 0 5 0;
#P fasten 23 0 5 0 194 354 308 354;
#P connect 1 0 4 0;
#P fasten 3 1 14 0 436 259 396 259;
#P fasten 3 0 23 0 421 254 194 254;
#P connect 22 0 8 0;
#P connect 19 0 15 3;
#P connect 10 0 20 1;
#P connect 9 0 20 0;
#P connect 18 0 19 0;
#P fasten 14 0 7 0 396 302 234 302;
#P fasten 14 0 6 0 396 302 235 302;
#P connect 17 0 16 0;
#P connect 14 1 13 0;
#P connect 13 0 15 0;
#P connect 15 2 11 0;
#P connect 15 3 12 0;
#P window clipboard copycount 25;


April 20, 2006 | 2:00 am

that seems to work great

i am a bit of a newbie, could you talk me through it a little?


April 20, 2006 | 2:20 am

right, i get it a little better now.

i does still, however pose the problem of a defined recording length, by the looks of things i’m just gunna have to deal with that

but surely not?


April 20, 2006 | 10:10 am

Found a thing called loopexp in my patches, which looks like the sort of thing you’re after.It uses Thomas Grill’s xsample objects (see maxobjects.com).
Searching for ‘loopexp’ with John Hudak’s indespensible C74 Archive search ( http://homepage.mac.com/johnhudak/google.html – bookmark it now! ) got me this: http://www.synthesisters.com/hypermail/max-msp/Sep03/6479.ht ml

Seriously, that archive search link will save you a lot of RTFM’s – there’s several years of Max related wisdom there, whereas this forum is still only a few months old
cheers
Roger


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