Play Melody

No, you simply have a timer generating an interrupt that increments a tick. The ISR then just looks at this tick count and decides what pins to toggle depending on what time out has been set for each tone. You can have as many tones as you want. The more tones the more processor load. In my book, see link above, I have an example of generating a two tone telephone dialling output.