Additive synthesis harmonics via patterns

hey,

im using the modes of the circular membrane for creating spectra for additive synthesis:

// modes of the circular membrane
(
~jn_zeros = [
	[1.0, 2.295417267427694, 3.5984846739581138, 4.903280573212368, 6.208732130572546, 7.514500962483965, 8.820447105611922, 10.126502295693772, 11.432629299891353, 12.738806093605008],

	[1.593340505695112, 2.9172954551172228, 4.230439127905234, 5.5403985098530635, 6.848991602808508, 8.1568737689496, 9.464339027734203, 10.77153891878896, 12.078559478862408, 13.385453180985621],

	[2.1355487866494034, 3.5001474903090264, 4.831885262930598, 6.152609171589257, 7.468242109085181, 8.781093075730398, 10.092254814868133, 11.402312929615599, 12.711609953449942, 14.020359772593565],

	[2.6530664045492145, 4.058931883331434, 5.412118429982582, 6.746213299505839, 8.071028338967128, 9.390589484063241, 10.706875023386747, 12.020976194473256, 13.333546087983708, 14.645000185525108],

	[3.155464815408362, 4.6010445344331075, 5.976540221648715, 7.325257332462771, 8.66047555520746, 9.98784275554081, 11.310212368186301, 12.6291936518746, 13.945767336219362, 15.260566826272614],

	[3.6474511791052775, 5.1307689067016575, 6.528612451522295, 7.892520026843893, 9.238840557670077, 10.574713443493692, 11.903823217314876, 13.228284530761863, 14.549405125286688, 15.868040174411112],

	[4.131738159726707, 5.650842376925684, 7.0707081490386905, 8.45000551018646, 9.807815107462856, 11.152639282954734, 12.48894011894477, 13.819314942198952, 15.145389465652915, 16.4682379099555],

	[4.610051645437306, 6.1631367313038865, 7.604536126938166, 8.999214496283312, 10.368705458854519, 11.722758172320448, 13.066558649839825, 14.40316086180383, 15.734495694194743, 17.061850311878718],

	[5.083567173877822, 6.668996900654446, 8.131374173240902, 9.541304590034361, 10.922544696482962, 12.285988718162267, 13.637496463055456, 14.980552310159315, 16.317378143958635, 17.649466343804967],

	[5.5531264771782425, 7.169426625276353, 8.652206694443466, 10.077190497330994, 11.470166256051801, 12.84308496674913, 14.202434689932657, 15.552105165163068, 16.89459494845585, 18.23159325633044]
];
)

and would like to know if there is a good way to sequence the different combinations of the subarrays with patterns, here for example i take three subarrays, index 1, 3 and 7of ~jn_zeros:

	var harmonics = [1,3,7].collect({|item|
		Array.fill(10, {|i| ~jn_zeros[item][i]});
	}).flat;

and additional harmonics to form a chord: [1, 14, 5, 19]; together with the bank piano model for inharmonic spectra and a downward sweep.

The Synth looks like this:
I think the different spectra sound really nice.

(
{
	var harmonics = [1,3,7].collect({|item|
		Array.fill(10, {|i| ~jn_zeros[item][i]});
	}).flat;

	var chord = [1, 14, 5, 19];

	var sweep = XLine.ar(4, 1, 0.003);
	var f0 = 51.913;
	var freqs = f0 * chord * sweep * harmonics * (1 + (harmonics * harmonics * \inharmonic.kr(0.1))).sqrt;
	var tilt = (log2(harmonics) * \tilt.kr(-3)).dbamp;
	var sig = SinOsc.ar(freqs);

	sig = sig * tilt * EnvGen.ar(Env.perc(0.001, 0.5), doneAction:2);

	sig = [sig[0,2..].sum, sig[1,3..].sum];

	sig = sig * -25.dbamp;

}.play
)

EDIT: ive made a slightly mistake here just multiplying the chord with the harmonics, instead it would be “correct” to use *.x but sounds better with just using * i think. whatever this would be then in terms of chords and harmonics. interesting.

1 Like