Hello, Alexandre, good to see you here (you don't know me but I know your work)!
SinOsc has .phase and .sync attributes, which are pretty useful in this case. I made a very
dirty and arbitrary example to show this working (using .sync, in this case):
// *pmod* is the SinOsc which will modulate the phase of *main*
SinOsc pmod => SinOsc main => dac;
440 => main.freq;
// define index of modulation; it's fun to fiddle with this value!
50 => pmod.gain;
// set *main* to sync phase-wise with *pmod*'s input
// just in case: 0 = sync frequency to input; 1 = sync phase; 2 = FM!
1 => main.sync;
// loop to show phase modulation in action with random arbitrary values
while(true) {
Math.random2f(63, 880) => pmod.freq;
1::second => now;
}
You can also do everything "by hand", mapping arbitrary values directly into SinOsc's .phase attribute.
Hope it helps!
Cheers!