-
Dan b
anybody else a fan of this guy?
If your tastes run to Xenakis style extreme, inhuman computer music he's worth a look.Interested in how some of these sounds are synthesized - I reckon some at least are just (just!) cross modulated oscillators etc. on modular synths, but some are clearly digital, and he's mentioned in interviews that in the past he's used direct sonification of chaotic algorithms,
I believe he's used Xenakis' Gendyn and UPIC systems (and if anyone has a source for these I'd be really pleased to hear about it) in the past, but aside from these, can anybody place any of the sounds he's using or make a guess at the algorithms/techniques in question?
-
Dan b
Hi All
I'm trying to implement the neural oscillator described in this article
http://www.ecila.org/ecila_files/content/papers/ACEICMC05.pdfIt's basically 5 equations describing a pair of coupled neurons (or rather a simplified model of two coupled neurons). The author of the paper implemented in C++ , but I want to implement as a PD abstraction since my C++ is pretty well nonexistent and for the moment at least I just want to get a feel for what the possibilities are. I tried to implement in MAX/MSP 4, but there is no expr~ external for the windows version and I got nowhere trying to do the calculation with the maths objects. I have an excel spreadsheet doing the calcs and the output behaves the way I'd expect, so I'm fairly certain I've got the calcs right, It's just implementing in PD that I'm having trouble with.
SO...
The equations (bottom of page 1) are iterative - each new set of values for the equations depends on the output values for the previous step - eg X Y and Z at time n are calculated on the basis of the values X Y and Z at time n-1.
This leads me to the first question - since this means I need to do stepwise calculation, presumably I'll need to use fexpr~ (sample wise calculation) rather than expr~ (vector calculation)?Or have I misunderstood? expr~ does vector calculations - and I'm assuming that's a displacement/amplitude vector - displacement from 0 over time t. If so, and since the time base is going to be constant surely I can just treat t as 1 - ie, ignore it - for present purposes?
That may be incredibly naive though - I'm new to expr~.
The second question is - does anyone have any ideas how I can start the thing running? Since it always needs a n-1 value to calculate the n value, I need to initialise it with values. Working on the principle that this is more or less a kind of waveshaping feedback synthesis I thought about just firing a short blast of white noise at all of the inputs to get the thing started.
Again, naive?
Either way, whether or not you have ideas to help - that paper is worth a look. Interesting stuff.
Ta
Dan -
Dan b
I've been looking at a lot of Buchla modular vids over the last couple of days and there are some sounds there that I'm totally blown away by.
I'm really interested in emulating two aspects of that sound. First I'd like to emulate the vactrol envelopes' response that gives you those lovely woody thunks when you feed them with a pulse. Also, the complex oscillator gives out some amazing sounds.
Now I'm guessing that vactrol response might be easy-ish to model - it'd just be a matter of enveloping with a lookup, or a formula that gives a curve like a vactrol but I've not been able to find details of the buchla vactrol's response to a pulse - any ideas?
And any ideas of what kind of waveshaping fun is going on with the timbre knob on the complex osc? It has to be digital - it gives out foldover artifacts- so it should be do-able, but I've been playing with waveshaping and not really getting the same kind of sounds.
Any tips/ resources?
-
Dan b
I've been trying to emulate a delay pedal I have, but having no luck.
The effect I'm after is a stable interval's pitch change when you change the delay time - you can tune the sound going around the delay loop up or down by a stable number interval by shortening or lengthening the delay time - just as you could tune sample playback by changing the rate of a phasor~ reading an array.If I use a vd~ reading from a delay line (as in the rotating tape head pitch shifter example, but with added recirculating feedback) I can get pitch change effects (pretty great pitch change effects tbh) but they're unstable - they keep rising or falling in pitch with each circulation as they get pitch shifted each time they go around the loop.
I figured one way to implement the effect would be to change the write speed and the read speed by the same amount (I'd guess this is how the pedal is doing it)- But I have no idea how to change the delay write speed in PD.
I thought of changing sample rate using block~ in a subpatch with the delay line but that doesn't seem to give the desired results (or in fact any sound at all - so I'm guessing you can't upsample a delay line).Any ideas???
-
Dan b
I'm looking for an editor that allows me to generate multi-channel (or multi-parameter I guess) Qlist data algorithmically and then edit the curves graphically/ cut and paste. Anybody know of a decent bit of software that'll do this?
Alternately, if not Qlist data, then something that can send OSC commandsI keep thinking that these sort of things must exist but I've not had much luck finding any.
-
Dan b
Someone (can't find thread now) was talking about wanting a tap tempo that kept all the human failings. I thought it was a good idea so I sat down and had a go at knocking one out - here it is.
It takes 9 taps (yielding 8 durations, so superficially it's tied to 2 repeating bars of beats in 4/4 though of course given that you can tap out any rhythm in those 8 beasts, you can feed it any meter you like). Also it's scaleable. I nicked hardoff's toggle because I thought it was pretty.You could probably "improve" it by resetting the metro counter on tap 8 (so that the metro immediately goes into your sequence as you finish. That's probably a matter of taste though.
#N canvas 302 0 701 714 10;
#X obj 91 370 counter;
#X floatatom 91 395 5 0 0 0 - - -;
#X obj 135 220 t b b;
#X obj 54 102 bng 15 250 50 0 empty empty empty 17 7 0 10 -258113 -262144
-262130;
#X floatatom 174 389 5 0 0 0 - - -;
#X obj 135 285 moses 1;
#X obj 135 264 realtime;
#X obj 71 242 delay 1500;
#X obj 174 304 moses 1500;
#X obj 174 325 t b f;
#X obj 129 418 pack f f;
#X obj 114 505 f;
#X obj 129 526 f;
#X obj 144 545 f;
#X obj 160 505 f;
#X obj 175 526 f;
#X obj 190 545 f;
#X obj 206 507 f;
#X obj 221 526 f;
#X obj -53 571 metro 400;
#X obj -53 596 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj -53 620 s \$1-drunkmetro-step;
#X obj -15 290 r \$1-drunkmetro-step;
#X obj -15 351 counter;
#X obj 38 102 tgl 15 0 \$0-toggle \$0-toggle-r OFF -30 8 0 13 -262144
-262144 -1 0 1;
#X obj -73 317 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X floatatom -15 374 5 0 0 0 - - -;
#X obj 129 469 route 0 1 2 3 4 5 6 7;
#X obj 62 441 select 0 1 2 3 4 5 6 7;
#X obj 45 338 select 7;
#X obj -41 320 select 7;
#X obj -76 659 outlet;
#X obj 189 143 s \$0-toggle-r;
#X obj 128 72 sel 0 1;
#X obj 126 50 r \$0-toggle;
#X msg 302 101 color \$1 \$1 -1;
#X msg 291 68 0;
#X msg 323 68 18;
#X msg 128 100 label OFF;
#X msg 210 101 label ON;
#X obj -1 535 *;
#X obj 4 119 hsl 52 10 4 0.25 1 0 blawhoof \$0-sliderinit empty -2
-8 0 10 -258113 -1 -1 0 1;
#X obj 14 511 r blawhoof;
#X floatatom 78 579 5 0 0 0 - - -;
#X obj 59 119 bng 10 250 50 0 ahr empty empty 17 7 0 10 -262144 -1
-1;
#X msg 55 166 1;
#X obj 53 199 s \$0-sliderinit;
#X obj 77 138 loadbang;
#X connect 0 0 1 0;
#X connect 0 0 29 0;
#X connect 1 0 10 0;
#X connect 2 0 6 0;
#X connect 2 0 7 0;
#X connect 2 1 6 1;
#X connect 3 0 2 0;
#X connect 4 0 10 1;
#X connect 5 1 8 0;
#X connect 6 0 5 0;
#X connect 7 0 6 0;
#X connect 7 0 0 2;
#X connect 8 0 9 0;
#X connect 9 0 0 0;
#X connect 9 1 4 0;
#X connect 10 0 27 0;
#X connect 11 0 40 0;
#X connect 12 0 40 0;
#X connect 13 0 40 0;
#X connect 14 0 40 0;
#X connect 15 0 40 0;
#X connect 16 0 40 0;
#X connect 17 0 40 0;
#X connect 18 0 40 0;
#X connect 19 0 20 0;
#X connect 20 0 21 0;
#X connect 20 0 31 0;
#X connect 22 0 23 0;
#X connect 23 0 26 0;
#X connect 23 0 30 0;
#X connect 24 0 19 0;
#X connect 24 0 25 0;
#X connect 25 0 23 3;
#X connect 26 0 28 0;
#X connect 27 0 11 1;
#X connect 27 1 12 1;
#X connect 27 2 13 1;
#X connect 27 3 14 1;
#X connect 27 4 15 1;
#X connect 27 5 16 1;
#X connect 27 6 17 1;
#X connect 27 7 18 1;
#X connect 28 0 11 0;
#X connect 28 1 12 0;
#X connect 28 2 13 0;
#X connect 28 3 14 0;
#X connect 28 4 15 0;
#X connect 28 5 16 0;
#X connect 28 6 17 0;
#X connect 28 7 18 0;
#X connect 29 0 0 2;
#X connect 30 0 23 2;
#X connect 33 0 38 0;
#X connect 33 0 36 0;
#X connect 33 1 39 0;
#X connect 33 1 37 0;
#X connect 34 0 33 0;
#X connect 35 0 32 0;
#X connect 36 0 35 0;
#X connect 37 0 35 0;
#X connect 38 0 32 0;
#X connect 39 0 32 0;
#X connect 40 0 19 1;
#X connect 42 0 40 1;
#X connect 42 0 43 0;
#X connect 44 0 45 0;
#X connect 45 0 46 0;
#X connect 47 0 45 0;
#X coords 0 -1 1 1 70 31 2 0 100; -
Dan b
Hi,
I think this might be a dumb question - but (possibly for want of the correct vocabulary) Google hasn't turned up an answer, so if anybody could help I'd be really grateful.I'm putting together a modulation matrix to route a few LFOs to different outputs, and it occured to me that it'd be cool to be able to control the phase shift of the LFO at some outputs- so the same LFO was driving (for example) the amplitudes of two oscilators, but with one cycle 90/180/arbitrary degrees out of phase with the other - so osc1 volume rises as osc 2 volume falls.
Is there a reasonably straightforward way of doing this?My first thought was to use phasors to drive the LFOs, then shape the LFO using lookup tables - running a few tables with (eg) sine waves shifted by different increments - pick the table and you pick your phase shift.
Seems like there must be a simpler and more flexible way though.Any ideas?
Ta
Dan -
Dan b
Sounds like, if you didn't record it, you missed a trick.
-
Dan b
Though having said that I just saw this -
"Expr, expr~, and fexpr~ now support multiple expressions separated by semicolons which results in multiple outlets"Which might give me the answer...
And reading expr~ docs more carefully I realised that the vector calculation is based on the buffer size set in PD. So if I'm using expr~ I guess I should just set the delay~ to the buffer size instead of to 1 sample and calculate as vectors. Easier to work in fexpr~ though, clearly.
This all raises another question - does anyone know how the math objects in PD work? Do they calculate on a sample-by-sample or vector-by-vector basis?
-
Dan b
ah - ta I'll take a look. RTFM I guess
I actually got it making a sound using expr~ the other night. I'm not sure it's "correct" as an implementation of those equations (I need to check a few things), but whether or not it is, it still makes some interesting sounds
I'll post it up when I get home.I realised after I posted here that if it is neccessary to use fexpr~ then it might not be possible at all - because I need to calculate 4 different variables at each sample/step - so I'd need 4 fexpr~s and the ability to send sample-accurate data between them. I guess whether or not it's possible depends on whether it's sufficiently accurate to use [delay~ 1] to send the previous calculation step from one fexpr~'s out to another fexpr~'s input (this is exactly what I've done on my expr~ implementation).
-
Dan b
Supersampling - do the waveshaping in a subpatch with sample rate 2x/4x etc. the patch's sample rate. Then in that subpatch apply a low pass filter a that rolls off up to the nyquist frequency. It cuts down on the rollover artefacts and improves sound quality considerably for complex/ non bandlimited timbres.
I think it's demonstrated in one of the PD example patches.Not had a chance to play with this properly yet, but I'll post examples when I do. I've just been mucking about with waveshaping. Got a bit sidetracked by it.
Cross phase modulation of the channels of a stereo signal gives some cool effects, and a chebychev shaper just before a LP filter is nice.I'd not really bothered with the PD waveshaping examples before, but there's bags of sonic fun there.
-
Dan b
If anyone else is interested in this kind of thing I've gathered that supersampling the waveshaper will help with the complex oscillator tone.
And apparently a lp filter on the envelope will help with the vactrol imitation. I'll post an example if I get anything nice.
-
-
Dan b
Ah, great -thanks for that. That's exactly what I'm looking for.
Moving over to Max a bit more at the mo' so I'll check that out. -
Dan b
Toxonic ta, that's pretty much the patch I started out with. It's how I'd generally build a feedback delay. It's not quite what I'm after. On that implementation, as you wiggle the knob about - particularly at higher repeat speeds - you deform the repeats into pitch squiggles as they get written at one speed and read back at another.
I mentioned tape loop delays (though I'm not trying to emulate tape echo) because if you speed up the tape you speed up the read and write speed simultaneously - so you don't get pitch wiggles on the regenerations, you get constant pitch.
In most cases it'd be a pretty subtle difference, but I'm trying to get a particular effect.
I think, as I said earlier, what I need to do is to change the speed of the write "head" by the same amount as the read "head" - I'm guessing it can't be done with delay objects, but I wonder if the same thing is possible with other objects.
-
Dan b
Ta Toxonic - I'll take a look at the patch tonight. Good of you to take the time. Apologies if I've misunderstood though, but I think what you're describing is not quite what I mean: The pitch shift is separated out from the delay time - you're running a pitch shift effect into a separate delay line, which is not going to give the same effect. The delay time will not shorten as the pitch rises. I'll take a look at your patch tonight though as I may have misunderstood what you're getting at.
Maelstorm - thanks also. I understand why the pitch changes on a delay pedal. The pitchshifter patch was a bit of a red herring - though of course it's the same principle. The difference between what you're (both, I think) talking about and what I'm talking about is the way that the pitch changes.
Assuming a stable C tone playing into the delay:
With the standard simple PD delay set up, if you move the read point of a vd~ then you get a glissando as it accellerates, a constant pitch change as it moves at constant speed. So if you turn the knob to change the delay time in the middle of a tone you start with a constant pitch (C), then get a rise of pitch, then it levels out at a new pitch (as you turn then stop turning the knob),
_
___/If you feed back into the delay, the glissando is repeated as the read speed changed while the write speed was constant:
_ _ _ _
/ |/ |/ |/ |The effect I'm looking to emulate on the other hand is more akin to changing the speed of a phasor~ reading an array - the pitch change is not a blip, but a stable interval's transposition - eg: you turn the knob, the pitch of the repeats rise by a given interval and stays at that pitch as it repeats (now more quickly):
______
___/If you play a constant C tone, then speed up the delay until it is a major third higher, you get a major third diad (until the delay dies away), rather than a C tone with a repeating squiggle overlaid.
The effect is the same as you get by speeding up a tape loop delay (though the pedal I'm trying to imitate is a digital delay) which is why I think the rate of the write and read heads are being increased by the same amount.[edit, just tried to make this clearer and removed a couple of errors]
-
Dan b
Yep - sorry, I could probably have been clearer - I shouldn't post from work
I'm talking about a delay line with feedback. I was mucking about and I stuck a feedback loop into example G09. With that set-up the pitch rises with each repeat because each time it's going back into the delay line and being read back at a rate higher than it was written. It sounds cool (very cool to my ears) but I now want to get a different effect -
On many old delay pedals, when you twist the knob to change the delay time, you just raise the pitch of the repeats by a constant interval (and shorten the delay time by the appropriate amount). The pitch doesn't rise or fall with each repeat - presumably this is because the write and read "heads" on the delay line are speeded up or slowed down by the same amount. I'm trying to replicate that effect in PD. Not neccessarily by the same means - by any means really.
-
Dan b
Thanks - I'm a huge Xenakis geek so I tried Iannix out a while back, but to be honest back when I looked at it I found that it was incredibly unstable, a big resource hog and quite difficult to do anything precise and composed with. It's a fantastic idea, and probably nice for gestural stuff, great for performance no doubt - setting all these cycles in motion and syncing etc. but just not right as a workhorse.
Though maybe I should take another look. Do you know if there are any good examples of it in use that I could take a look at?
-