FT:
If u want to vary the tone based on the ADC of the phototransistor voltage, u don't need pwm. U need to modulate the frequency.. FM. Amplitude modulation AM is a bit trickier as logic outputs a fixed voltage. The AM stuff I haven't done, but on the surface of it, perhaps an opamp summing amp with an FET in the feed back loop, driven linear by PWM with an RC DAC on it's gate can deliver AM.
So back to FM. Setup a standard freq based on the Timer overflow interrupt. Say 2Khz. That requires a period of .5 ms to contain the on/off cycle. Quite doable on the PIC. Then u alter the Timer overflow setting based on the ADC sample from the phototransistor and a bit of integer math to scale the range so that your Timer now has a variable range of say 500Hz to 2Khz equivalent to perhaps 1V to 4V from the Phototransistor? You can also scale the sound by altering the Photo transistor load resistor, which then scales what the ADC sees. So use a trimmer pot for that and u may not need to scale the ADc with any math. The interrupt itself only toggles (xorwf) the Port pin driving your speaker, and clears the interrupt flag, plus save/restore wreg & status data. The main code should do the adc sample/math and Timer overflow updates.
Check out Piclist.com for the math routines.
Edit: Note that the Timer overflow period must = half the sound freq. period!