I managed to install SuperCollider and run your example of Phase Modulation. I could achieve the exact same sound with the following ChucK code:
SinOsc mod => SinOsc car => dac;400 => car.freq;201 => mod.freq;mod.freq() * Math.PI => float ind => mod.gain; // this bugger works with much greater values as standard gain...2 => car.sync; // FM instead of syncing to phase. don't know why...while ( true ) {1::second => now;}
The weird thing is that I had to use 2 (FM) as a value for .sync, contrary to my intuition of syncing to phase.
Another oddity is the way to calculate the modulation index, which I admit was a wild guess that turned out to be correct. I am also curious if anyone can explain this.
However, I am now the one struggling to figure out the difference between this phase modulation and FM
syncing to phase, as was my first intuition, yields a rather different sound (much harsher) and does not respond to changes to the carrier's frequency.