I don't fully understand what you're looking for, but the attached patch may be of some help to you. It can record live (from adc~ or a web stream or whatever), then starts looping immediately with a filter to suppress clicks, that's triggered with a threshold~. give it an argument that is the number of samples in length you want it to record, ie. 441000 for 10 seconds. Hope it can help you.
-Ian
stephane wrote:
Hi,
The following question have, I think, a great importance for a lot of people, and I never see an helping answer. In the desire to present correctly the problem, I'll do it in French. If someone feel to translate, welcome !
Depuis plusieurs semaines, je cherche une solution pour constituer un simple patch de type "looping station". Le problème est soulevé régulièrement, mais il manque cruellement de réponses. Sur cette même liste : http://iem.at/mailinglists/pd-list/2004-04/019049.html , quelqu'un pose déja la question. J'entend par "looping station", un patch capable d'enregistrer un échantillon sonore (d'une durée indeterminée au moment de l'enregistrement) en provenance de l' entrée d'une carte son et de le jouer en boucle à l'instant même ou l'enregistrement s'arrête. La finalité d'un tel outil serait d'arriver au moins à l'emulation de materiel tel que le jamman de lexicon, ou l'echoplex d'oberheim, sans pourtant souffrir de leurs limitations intrinsèques. Je sais qu'il existe des solutions déjà performantes, tel que le patch pd "jamma" ou encore "sooperlooper", pourtant, si la réalisation d'un patch didactique très simple était possible, je crois que ce dernier comblerait bon nombre d'utilisateurs de Pure Data.
Merci par avance de vos réponses,
.sr
Subject: a simple recording/looping solution ? From: stephane stephane.richard1@tiscali.fr Date: Mon, 25 Oct 2004 11:11:08 +0200 To: pd-list-request@iem.at
To: pd-list-request@iem.at
Hi,
The following question have, I think, a great importance for a lot of people, and I never see an helping answer. In the desire to present correctly the problem, I'll do it in French. If someone feel to translate, welcome !
Depuis plusieurs semaines, je cherche une solution pour constituer un simple patch de type "looping station". Le problème est soulevé régulièrement, mais il manque cruellement de réponses. Sur cette même liste : http://iem.at/mailinglists/pd-list/2004-04/019049.html , quelqu'un pose déja la question. J'entend par "looping station", un patch capable d'enregistrer un échantillon sonore (d'une durée indeterminée au moment de l'enregistrement) en provenance de l' entrée d'une carte son et de le jouer en boucle à l'instant même ou l'enregistrement s'arrête. La finalité d'un tel outil serait d'arriver au moins à l'emulation de materiel tel que le jamman de lexicon, ou l'echoplex d'oberheim, sans pourtant souffrir de leurs limitations intrinsèques. Je sais qu'il existe des solutions déjà performantes, tel que le patch pd "jamma" ou encore "sooperlooper", pourtant, si la réalisation d'un patch didactique très simple était possible, je crois que ce dernier comblerait bon nombre d'utilisateurs de Pure Data.
Merci par avance de vos réponses,
.sr
#N canvas 104 339 155 271 10; #X obj 4 23 tgl 20 0 $0-s_ctrl_rec $0-r_ctrl_rec REC 3 10 0 10 -66577 -258699 -262144 0 1; #X obj 3 106 cnv 15 150 33 empty empty empty 20 12 0 14 -195568 -66577 0; #X obj 7 120 nbx 5 14 -1e+37 1e+37 0 0 $0-s_ctrl_speed $0-r_ctrl_speed play_length 0 -6 0 10 -66577 -195568 -1 4 256; #X obj 80 119 bng 15 250 50 0 $0-s_ctrl_reset $0-r_ctrl_reset reset_length 0 -6 0 10 -66577 -195568 -1; #X obj 3 142 cnv 15 90 110 empty empty empty 20 12 0 14 -128992 -66577 0; #X obj 28 156 nbx 3 14 0 1e+37 0 0 $0-s_ctrl_env $0-r_ctrl_env env_window 0 -6 0 10 -66577 -166441 -1 174 256; #X obj 28 184 bng 15 250 50 0 $0-s_ctrl_normalize $0-r_ctrl_normalize normalize 0 -6 0 10 -66577 -195568 -1; #X obj 8 147 vsl 13 100 0 110 0 0 $0-s_ctrl_volume $0-r_ctrl_volume vol 0 50 0 8 -66577 -195568 -233017 8200 1; #X obj 27 203 cnv 15 90 65 empty empty empty 20 12 0 14 -33289 -66577 0; #X obj 31 216 bng 15 250 50 0 $0-s_ctrl_write $0-r_ctrl_write write_file 0 -6 0 10 -66577 -195568 -195568; #X obj 31 250 bng 15 250 50 0 $0-s_ctrl_fileprefix $0-r_ctrl_fileprefix file_prefix 0 -6 0 10 -66577 -195568 -195568; #X obj 3 48 cnv 15 150 55 empty empty empty 20 12 0 14 -233017 -66577 0; #X obj 8 53 hsl 140 13 0 441000 0 0 $0-s_ctrl_playhead $0-r_ctrl_playhead Playhead 10 7 0 10 -66577 -258699 -262144 11923 1; #X obj 8 69 hsl 140 13 0 441000 0 0 $0-s_ctrl_from $0-r_ctrl_from from 10 7 0 10 -66577 -195568 -262144 0 0; #X obj 8 85 hsl 140 13 0 441000 0 0 $0-s_ctrl_to $0-r_ctrl_to to 10 7 0 10 -66577 -195568 -262144 13900 0; #N canvas 155 206 450 300 everything_non_gui 0; #X obj 18 142 table $0-table $1; #N canvas 0 0 450 300 defaults 0; #X obj 20 4 loadbang; #X obj 20 97 s $0-r_ctrl_env; #X msg 20 72 20; #X obj 144 72 f $1; #X obj 144 97 s $0-r_ctrl_to; #X obj 252 97 s $0-r_ctrl_from; #X msg 252 72 1; #X connect 0 0 2 0; #X connect 0 0 3 0; #X connect 0 0 6 0; #X connect 2 0 1 0; #X connect 3 0 4 0; #X connect 6 0 5 0; #X restore 18 168 pd defaults; #N canvas 0 0 450 300 normalize 0; #X msg 17 82 ; $1 normalize; #X obj 17 57 symbol $0-table; #X obj 17 30 r $0-s_ctrl_normalize; #X connect 1 0 0 0; #X connect 2 0 1 0; #X restore 18 196 pd normalize; #N canvas 524 245 450 300 write_file 0; #X obj 7 270 soundfiler; #X obj 58 120 symbol $0-table; #X obj 7 188 pack s s; #X msg 136 29 bang; #N canvas 0 0 450 300 create_filename 0; #X obj 27 20 inlet b_go; #X obj 27 85 f $0; #X obj 81 139 time -----; #X obj 27 231 makefilename add-time; #X msg 27 159 set $1; #X obj 27 140 t b s; #X obj 81 207 makesymbol %sh%sm%ss%sms; #X obj 27 252 outlet; #X obj 81 186 pack f f f f; #X obj 150 164 i; #X msg 119 93 set $1; #X obj 119 21 r $0-s_ctrl_fileprefix; #X obj 119 44 savepanel; #X obj 27 116 makefilename rec-%d-%%s; #X msg 191 45 bang; #X obj 119 71 makesymbol %s-%%d-%%%%s; #X connect 0 0 1 0; #X connect 1 0 13 0; #X connect 2 0 8 0; #X connect 2 1 8 1; #X connect 2 2 8 2; #X connect 2 3 9 0; #X connect 3 0 7 0; #X connect 4 0 3 0; #X connect 5 0 2 0; #X connect 5 1 4 0; #X connect 6 0 3 0; #X connect 8 0 6 0; #X connect 9 0 8 3; #X connect 10 0 13 0; #X connect 11 0 12 0; #X connect 12 0 15 0; #X connect 13 0 5 0; #X connect 14 0 12 0; #X connect 15 0 10 0; #X restore 7 78 pd create_filename; #X obj 7 46 t b b; #X obj 7 14 r $0-s_ctrl_write; #X msg 7 235 write $1 $2; #X connect 1 0 2 1; #X connect 2 0 7 0; #X connect 3 0 5 0; #X connect 4 0 2 0; #X connect 5 0 4 0; #X connect 5 1 1 0; #X connect 6 0 5 0; #X connect 7 0 0 0; #X restore 18 224 pd write_file; #N canvas 290 94 513 530 guts 0; #X obj 4 158 tabwrite~ $0-table; #X text 5 11 $1 = length in samples; #X obj 4 32 inlet~ signal; #X obj 274 335 tabread4~ $0-table; #X obj 273 228 phasor~; #X obj 273 199 expr 1/$f1; #X obj 273 112 / 44100; #X obj 274 418 outlet~; #X obj 110 56 sel 0 1; #X text 329 109 get length (secs); #X msg 132 83 bang; #X msg 93 83 stop; #X obj 132 132 delay; #X obj 162 110 * 1000; #X obj 110 30 r $0-s_ctrl_rec; #X obj 132 212 s $0-r_ctrl_rec; #X msg 377 199 0; #N canvas 0 0 450 300 playhead_control 0; #X obj 134 127 s $0-r_ctrl_playhead; #X obj 134 103 snapshot~; #X obj 134 79 metro 10; #X obj 134 55 loadbang; #X msg 199 55 bang; #X obj 18 52 inlet~ signal; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 2 0; #X connect 4 0 2 0; #X connect 5 0 1 0; #X restore 298 312 pd playhead_control; #N canvas 0 0 450 300 speed_control 0; #X obj 6 10 inlet length_secs; #X obj 36 200 outlet length_secs; #X obj 6 100 s $0-r_ctrl_speed; #X obj 6 72 f; #X obj 6 126 r $0-s_ctrl_speed; #X obj 32 41 r $0-s_ctrl_reset; #X obj 6 162 sel 0; #X connect 0 0 3 0; #X connect 3 0 2 0; #X connect 4 0 6 0; #X connect 5 0 3 0; #X connect 6 1 1 0; #X restore 273 152 pd speed_control; #N canvas 520 265 450 398 envelope 0; #X obj 28 376 outlet~; #X obj 29 14 inlet~ phasor; #X obj 28 242 threshold~; #X obj 163 14 r $0-s_ctrl_env; #X obj 28 350 line~; #X obj 28 324 pack 0 f; #X obj 93 324 pack 1 f; #X obj 37 152 expr 1-$f1; #X msg 37 215 set $1 0 $2 0; #X obj 37 182 pack f f; #X obj 162 289 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 198 289 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 37 126 / 4410; #X obj 173 183 < 0; #X obj 173 152 r $0-s_ctrl_speed; #X obj 203 183 > 0; #X floatatom 173 217 5 0 0 0 - - -; #X floatatom 219 217 5 0 0 0 - - -; #X obj 109 283 i; #X obj 39 283 i; #X connect 1 0 2 0; #X connect 2 0 10 0; #X connect 2 0 19 0; #X connect 2 1 11 0; #X connect 2 1 18 0; #X connect 3 0 6 1; #X connect 3 0 5 1; #X connect 3 0 12 0; #X connect 4 0 0 0; #X connect 5 0 4 0; #X connect 6 0 4 0; #X connect 7 0 9 0; #X connect 8 0 2 0; #X connect 9 0 8 0; #X connect 12 0 7 0; #X connect 12 0 9 1; #X connect 13 0 16 0; #X connect 14 0 13 0; #X connect 14 0 15 0; #X connect 15 0 17 0; #X connect 16 0 19 1; #X connect 17 0 18 1; #X connect 18 0 6 0; #X connect 19 0 5 0; #X restore 296 360 pd envelope; #X obj 274 384 *~; #X obj 141 176 s $0-r_ctrl_env; #X obj 403 28 inlet b_synch; #X obj 304 280 line~; #X obj 348 280 pack 0 10; #X obj 274 280 +~; #X obj 441 164 pack 0 10; #X obj 441 188 line~; #X obj 274 254 *~; #X obj 273 80 line; #X obj 273 58 pack 0 10; #X obj 273 28 r $0-s_chunksize; #X obj 332 254 r $0-s_offset; #X connect 2 0 0 0; #X connect 3 0 20 0; #X connect 4 0 19 0; #X connect 4 0 28 0; #X connect 5 0 4 0; #X connect 6 0 13 0; #X connect 6 0 18 0; #X connect 8 0 11 0; #X connect 8 1 10 0; #X connect 8 1 16 0; #X connect 10 0 0 0; #X connect 10 0 12 0; #X connect 11 0 0 0; #X connect 12 0 15 0; #X connect 12 0 16 0; #X connect 12 0 21 0; #X connect 13 0 12 1; #X connect 14 0 8 0; #X connect 16 0 4 1; #X connect 18 0 5 0; #X connect 19 0 20 1; #X connect 20 0 7 0; #X connect 22 0 16 0; #X connect 23 0 25 1; #X connect 24 0 23 0; #X connect 25 0 3 0; #X connect 25 0 17 0; #X connect 26 0 27 0; #X connect 27 0 28 1; #X connect 28 0 25 0; #X connect 29 0 6 0; #X connect 30 0 29 0; #X connect 31 0 26 0; #X connect 31 0 30 0; #X connect 32 0 24 0; #X restore 20 52 pd guts; #X text 15 273 $1 = length in samples; #X obj 20 10 inlet~ signal; #X obj 19 110 outlet~; #X obj 121 10 inlet b_synch; #N canvas 0 0 450 300 volume 0; #X obj 16 20 inlet~; #X obj 14 268 outlet~; #X obj 124 98 dbtorms; #X obj 124 36 r $0-s_ctrl_volume; #X obj 124 124 pack 0 10; #X obj 15 186 *~; #X obj 124 150 line~; #X connect 0 0 5 0; #X connect 2 0 4 0; #X connect 3 0 2 0; #X connect 4 0 6 0; #X connect 5 0 1 0; #X connect 6 0 5 1; #X restore 19 80 pd volume; #N canvas 198 334 397 264 manage_play_locations 0; #X obj 14 20 r $0-s_ctrl_from; #X obj 146 20 r $0-s_ctrl_to; #X obj 104 46 t b f; #X obj 146 105 s $0-s_chunksize; #X obj 14 105 s $0-s_offset; #X obj 146 78 -; #X connect 0 0 4 0; #X connect 0 0 2 0; #X connect 1 0 5 0; #X connect 2 0 5 0; #X connect 2 1 5 1; #X connect 5 0 3 0; #X restore 19 248 pd manage_play_locations; #X connect 4 0 9 0; #X connect 6 0 4 0; #X connect 8 0 4 1; #X connect 9 0 7 0; #X restore 10 3 pd everything_non_gui; #X obj 174 4 inlet~ signal; #X obj 31 26 outlet~; #X obj 275 4 inlet b_synch; #X connect 15 0 17 0; #X connect 16 0 15 0; #X connect 18 0 15 1; #X coords 0 0 1 1 155 275 1;