so cool. Keep it coming. :slight_smile: maybe cylob will turn up

I might be the only one thats heard it,. .It sounded like a regular phrase then stretched like taffy, Perfectly. No artifacts, No spectrally sounds.

@scztt so funny, immediately after writing that post i went and found your Quark. it is very elegant, and just what i had in mind (thinking of the dyadic filterbank from the Faust libraries.)

i don’t have BLPF though - it’s an IIR of arbitrary order?

(PS: for industry work. i’ve found that dyadic filterbanks sometimes impose too much group delay with a significant number of subbands. we’ve ended up using multirate structures instead.)

1 Like

I’ve been trying to split bands using the bark scale for years in supercollider. My mind is blown! Finally! Thank you!

So, any way to tidy this up onto the ideal patch?

ERROR: binary operator ā€˜+’ failed.
RECEIVER:

when I execute;
~band_signal_bus = Bus.audio(s, n);
~band_amp_bus = Bus.control(s, n);

dunno. make sure s is set to Server.default or something.

shame there wasn’t a working example posted. I can’t do it. Don’t have the brains

Didn’t my example work…?

oh, apologies, i hadn’t defined n in that snippet.

here is a full and working script:

of course this is just a multiband envelope follower that happens to be bark-scaled. it doesn’t make music, let alone cylob’s music.

@frankchannel’s script also works for me, and maps things to oscillators.

(however, big caveat that Tartini requires sc3-plugins to be installed, use Pitch instead if you don’t want to install that.)

more extended musical applications are really a creative endeavor.

1 Like

Yeah, nothing that sounds like the original that I can tell. Thanks for the effort

but thank you everybody

so zebra, so what global variable is spitting out the numbers to play oscillators? You are there, just needs to play something.

Cylob must have done some other stuff to in the text

I stuck a
SinOsc.ar(~band_signal_bus, mul:Lag.kr(~band_amp_bus, 0.2));
in zebras routine.
no sound
no error

Clearly have no clue

@skee

you’re asking for a lot of things, many of which are not well defined, and in my view are really compositional parameters.

that script shows you how to make a multiband envelope follower that is psychoacoustically meaningful. i have no idea how you want to use that.

a separate part of your question is about recording and manipulating acoustic analysis results, as synthesis parameters, particularly pitch. here is a gist that demonstrates recording and playing back pitch, clarity, amplitude and flatness from a buffer:

to use:

  • hit ā€œrecordā€ to start recording analysis params, in a loop, into a short buffer (8sec arbitrarily.)
  • manipulate pitch playback parameters using the number boxes (use arrow keys.)

of course i imagine you would want to have many buffers, manipulate loop times, and so on. this is outside the scope of the demo.

also outside the scope is how you would use the filterbank in conjunction with such processes, and of course implementing the overall compositional / performance goals.

i hope this helps illustrate some of the techniques you require. the rest of it is creative work, which i can’t accomplish for you.

there are a few issues here, the most important one being that you need an In ugen to play or read something from a bus within a SynthDef.

not totally clear to me what you’re trying to do. something like frank’s example?

assuming so, i’ve updated the first gist to attach a sine wave to each bark band, tracking pitch and amplitude within that subband. it’s an extremely weird kind of crummy vocoder!

every little bit helps. Thank you

Thank you. Good study tool.

Hi, I feel sort of ashamed for even opening this thread, but here we go. I am just taking my very, very first steps in SuperCollider, have installed SC on my Mac and reading thru the SC online tutorial.

So there’s this line of code on that page:
{ [SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2)] }.play;

When I evaluate this line of code, I hear two slightly detuned sine wave beating against each other.

Now when I play around with the code and try to evaluate this:
{ [SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2), SinOsc.ar(542, 0, 0.2)] }.play;
I still just hear the first two sine waves.

Please, why am I not hearing the third sine wave?

1 Like

I’m not a supercollider expert by any stretch, so take this with a grain of salt, but I think what’s happening is that your first two sine waves are being sent to the left and right speakers, respectively. So when you add the third one, it gets sent to a third ā€œspeakerā€/channel, which you don’t have and therefore can’t hear. This is part of supercollider’s multichannel expansion functionality.

To split more than two channels/sources across the stereo field you could use the splay or Pan2 ugens.

Hope this helps.

7 Likes

this is spot on

use Mix to bring them together into a mono signal

{ Mix.new( [SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2), SinOsc.ar(542, 0, 0.2)] ) .play;

lots more information here

http://doc.sccode.org/Guides/Multichannel-Expansion.html

3 Likes

@edbkt & @junklight: Thank you very much – I was utterly bamboozled by this, especially since stereo/multichannel explanations are first mentioned as late as in the sixth part of the SC tutorial. I guess I would have given up before without your help!

2 Likes

hi,
Im getting back into supercollider after a bit of time off, and I think im missing something pretty simple,
perhaps someone can point me back on track :slight_smile:

DigitalIO is a custom ugen, which sends out digital signals for bela, (but its not really the issue), and i want it to change it value when a midi note is received so something like:

       ~gate = 0;
        DigitalIO.kr(~led1,0,~gate);

        MIDIdef.noteOn(\noteon, { 
	    arg vel, note;
             ~gate = 1;
        });
	
       MIDIdef.noteOff(\noteoff, { 
           arg vel, note;
            ~gate = 0;
        });

this fails :slight_smile:

ok, I remember this is because ~gate will be a client side var, but Im struggling to remember how id get something similar to this on the server side,

the only things i can think of is using something like Ndef to replace the ugen, but that seems overly complex - no?

e.g.

	MIDIdef.noteOn(\noteon, { 
		arg vel, note;
		Ndef(\t1led, { DigitalIO.kr(~led1,0,1) });
	});
	
	MIDIdef.noteOff(\noteoff, { 
		arg vel, note;
   		Ndef(\t1led, { DigitalIO.kr(~led1,0,0) });
	});

EDIT:

ok, memories are coming back so i think i should be able to do something like

(but still not working :wink: )

	Ndef(\t1led, { 
		arg g;
		DigitalIO.kr(~led1,0,DC.kr(g));
	});

	MIDIdef.noteOn(\noteon, { 
		arg vel, note;
		Ndef(\t1led).set(\g,1);
	});
	
	MIDIdef.noteOff(\noteoff, { 
		arg vel, note;
		Ndef(\t1led).set(\g,0);
	});

EDIT 2:

ok fixed , without the DC.kr works :slight_smile:

	Ndef(\t1led, { 
		arg g;
		DigitalIO.kr(~led1,0,g);
	});
	MIDIdef.noteOn(\noteon, { 
		arg vel, note;
		Ndef(\t1led).set(\g,1);
	});
	
	MIDIdef.noteOff(\noteoff, { 
		arg vel, note;
		Ndef(\t1led).set(\g,0);
	});

not sure its the best way, but I think is workable for my needs…

Could do it with a SynthDef:

SynthDef(\tiled, {
    arg g;
    DigitalIO.kr(~led1,0,g);
}).add;

x = Synth(\tiled);

x.set(\g, 0); // put this in your MIDIDef
x.set(\g, 1);
1 Like

Cool, I’m guessing that’s pretty much equivalent to NDef - no? Just a different way to declare the synth node?