How can i listen sound?

(
fork{ 
	10.do{ 
		arg i;
		var arr, syn, syn1, trig, env, lfn;
		arr = [0, 20, 59, 131, 268, 542, 1000, 1900, 3600, 6780, 12700, 24000]; 
		
		lfn = LFNoise0.ar(100).range(0, 0.5);
		syn = Saw.ar(
			freq: LFNoise1.ar(100).range(arr[i], arr[i + 1]),
			mul: lfn);
		trig = Impulse.ar(LFNoise0.kr(1).range(1000, 1500));
		env = Env(
			levels: [0, 1, 0],
			times: [0.01, lfn]);
		env = EnvGen.kr(env, trig);
		syn = syn * env;
		
		syn1 = SinOsc.ar(
			freq: LFNoise1.ar(100).range(arr[i + 1], arr[i + 2]),
			mul: (RunningSum.rms(syn, 40) * 5).range(0, 1).poll(10));
		env = Env(
			levels: [0, lfn, 0],
			times: [0.05, 0.05]);
		env = EnvGen.kr(env, trig);
		syn1 = syn1 * env;
	



	syn = {Pan2.ar(syn, LFNoise0.ar(5).range(-1, 0)) + Pan2.ar(syn1, LFNoise0.ar(5).range(0, 1))
}.play;
	3.0.wait;
	syn.set(\gate, 0);
}
}
)

only ‘a Routine’ appears and the code doesn’t work and I can’t hear anything too. what’s the reason?

I’ve tried to get this to run for some time, and I couldn’t find the root problem here, although when I look at the node tree, I definitely see synths – there’s just no audible sound being produced.

The one place where I could definitely pinpoint something that may lead to unexpected results is that you’re assigning the variable env twice. You may want to choose different variable names for those envelopes!

My strategy when my code just doesn’t want to run or produce the result I expected is usually to simplify things to a level where I am confident that I understand what’s going on, and then rebuild things from there one addition at a time. If that fails, I rebuild things “from the inside out”, i. e. from the sound synthesis function up.

In this case, I can get the first part of the sound function to produce some sound, like so:

(
a = {
	var arr, syn, syn1, trig, env, lfn;
		arr = [0, 20, 59, 131, 268, 542, 1000, 1900, 3600, 6780, 12700, 24000]; 
		
		lfn = LFNoise0.ar(10).range(0, 0.5);
		syn = Saw.ar(
			freq: LFNoise1.kr(100).range(arr[1],arr[2]),
			mul: lfn);
		trig = Impulse.kr(LFNoise0.kr(1).range(0, 1));
		env = Env(
			levels: [0, 1, 0],
			times: [0.01, lfn]);
		env = EnvGen.kr(env, trig);
		syn = syn * env;
}.play;
)
a.release;

although it’s really quiet, and it fails when I add in the iteration/playing routine via fork{}.

Sorry I can’t offer a complete solution, hope it helps anyway!

consider these two examples:

(
var sig;
sig = SinOsc.ar(300,0,0.1);
sig = {sig}.play
)
(
{
		var sig;
		sig = SinOsc.ar(300,0,0.1);
}.play
)

you need to define a synth graph inside of a function - in the first example sig=SinOsc.ar(300,0,0.1) is assigned outside the function that .play is called on.

You also didn’t have a gate argument so I added one (and an envelope for it to control!). This works:

(
fork{ 
		var sound = { 
				arg gate = 1;
				var i=2;
				var arr, syn, syn1, trig, env, lfn, env1;
				arr = [0, 20, 59, 131, 268, 542, 1000, 1900, 3600, 6780, 12700, 24000]; 

				lfn = LFNoise0.ar(100).range(0, 0.5);
				syn = Saw.ar(
						freq: LFNoise1.ar(100).range(arr[i], arr[i + 1]),
						mul: lfn
				);
				trig = Impulse.ar(LFNoise0.kr(1).range(1000, 1500));
				env = Env(
						levels: [0, 1, 0],
						times: [0.01, lfn]
				);
				env = EnvGen.kr(env, trig);
				syn = syn * env;

				syn1 = SinOsc.ar(
						freq: LFNoise1.ar(100).range(arr[i + 1], arr[i + 2]),
						mul: (RunningSum.rms(syn, 40) * 5).range(0, 1).poll(10)
				);
				env1 = Env(
						levels: [0, lfn, 0],
						times: [0.05, 0.05]
				);
				env1 = EnvGen.kr(env1, trig);
				syn1 = syn1 * env;

				Pan2.ar(syn, LFNoise0.ar(5).range(-1, 0)) + Pan2.ar(syn1, LFNoise0.ar(5).range(0, 1))
				* Env.cutoff().kr(gate: gate)
		}.play;
		3.wait;
		sound.set(\gate,0)

})

thank you for you help! :slight_smile:

thank you for your help! I’m going to develope this a little bit more!!

1 Like