Use the matrix multiplication method of Kalotas and Lee (K&L) to investigate the spectrum of nonuniform strings.

The nonuniform string is 1 yard long (36”=0.9144 meters). lam% of the string is wrapped and the other (1-lam)% isn’t. The heaver wrapped side (18”) weighs 12.6 grams (0.0275591 kg/m), and the lighter unwrapped side (18”) weighs 3.3 grams (0.00721785 kg/m). In this version, the tension is adjusted so that the lowest significant partial is always located at 100 Hz. This should let us focus on the timbre changes and not so much on the tuning/pitch changes.

addSynth[dur_,sr_,freqs_,amps_,decay_]:=Module[{},tVec=Range[0.,dur,1/sr];
env=Exp[-decay*tVec];
envRise=ConstantArray[1,Length[tVec]];
envRise[[1;;8000]]=Range[0,0.9999,1/8000];
env envRise Total[Table[amps[[i]] Sin[2 Pi freqs[[i]] tVec],{i,1,Length[freqs]}]]];
ratio2cents[x_]:=(1200 Log[10,x])/Log[10,2];
mat[ki_,wi_]:={{Cos[ki wi],-Sin[ki wi]/(ki)},{ki Sin[ki wi],Cos[ki wi]}};
f[ww_,t_]:=(mat[k1[ww,t],w1].mat[k2[ww,t],w2])[[1,2]];
k1[www_,ts_]:=www Sqrt[mu1/ts];
k2[www_,ts_]:=www Sqrt[mu2/ts];
highF=2000;mu1=0.0275591;mu2=0.00721785;lam=1/2;Manipulate[w1=lam 0.9144;w2=(1-lam)*0.9144;
If[play==True,sndWav=addSynth[2,44100,ansKal,RandomReal[{-1,1},Length[ansKal]],2];
EmitSound@SampledSoundList[sndWav,44100];play=False];bestT=(FindRoot[f[100.,s]==0,{s,15 lam+5}])[[1,2]];sol=FindRoot[Evaluate[f[thisW,bestT]==0],{thisW,Range[100,highF,10]}];GraphicsGrid[{{Plot[f[w,bestT],{w,0,highF/2},PlotRange->All],ansKal=Select[Union[Round[100*sol[[1,2]]]/100.],highF>#>0&]},{ansCents=ratio2cents[ansKal/ansKal[[1]]],Round[100 Mod[ansCents,1200]/100]}}],{{lam,1/2},0,1},{play,{False,True}},SaveDefinitions->True]

Surprise! The pitch seems to go up and down somewhat randomly, even thought the lowest partial is locked at 100 Hz. This means that the pitch is *not* determined by the lowest partial but by some combination of the upper partials. I also tried locking the second partial to 200 Hz, and there was still the up and down of the pitch.