Dear Joachim,

I assume You know the appendix “modal frequencies” of the csound manual.

Maybee I can help You with to Udos.

One Udo is for the partials of an ideal bar, following (2n+1)^2 and the other one is for stretched partials (similar to thick strings or something like this).

You will find these opcodes end of the mail.

I don’t remember where I found the formula for stretcged partials but I do remember, that values around 0.0004 are considered as being natural. Off course “insane” values sound also are very interesting.

I personally would be interested in another couple of formulas, e.g. gong, triangle, tomtom, etc.

Here my opcodes (sorry, comments are in german):

/* OPCODE FOR THE PARTIALS OF AN IDEAL BAR

SYNTAX:

StefansXylopartials inumparts,iftab

inumparts = Anzahl der Teiltoene

iftab = tabelle in die geschrieben werden soll, muss eine “leere” Tabelle sein, wie z.B.

iftab ftgen 0,0,16,-2,0 ; leere tabelle

*/

opcode StefansXylopartials, 0,ii

inumparts,iftab xin

indx = 0

inenner = 9

loop:

inZ = indx+1

izaehler = (2*inZ+1)^2

istrp = izaehler/inenner

tableiw istrp, indx, iftab ;writes istart to table

loop_lt indx, 1, inumparts+1, loop

endop

;;;;;

/*OPCODE FOR STRETCHED PARTIALS

SYNTAX:

StefansStretchedPartials inumparts,istreck,iftab

inumparts = Anzahl der Teiltoene

istreck = Streckfaktor, bis ca. 0.01 klavierähnlich, ab dann glockenspielartig

iftab = tabelle in die geschrieben werden soll, muss eine “leere” Tabelle sein, wie z.B.

iftab ftgen 0,0,16,-2,0 ; leere tabelle

*/

opcode StefansStretchedPartials, 0,iii

inumparts,istreck,iftab xin

indx = 0

inenner = sqrt(1+istreck)

loop:

inZ = indx+1

izaehler = inZ*sqrt(1+istreck*inZ^2)

istrp = izaehler/inenner

tableiw istrp, indx, iftab ;writes istart to table

loop_lt indx, 1, inumparts, loop

endop