quote author=globoy link=topic=376715.msg4861214#msg4861214 date=1683994587]
...This is been very interesting and makes me realize that I will - at least eventually - need to create a much more sophisticated way to specify and implement tone generation ...
[/quote]
Well, looking at your h/w block diagram, you have everything you need right now:
* store the progress tone PCM samples in arrays, in EPROM;
* output a sample to the codec every 125 us;
* use pointers to track the current sample, start and end of the selected progress tone array.
When I did this for a professional product (long ago), for use in a primary rate multiplexer, the microcontrollers that were cheap enough
for this purpose weren't fast enough. So I designed a multi-channel DMA engine using small cheap PLDs.
Every time slot, the engine would fetch a sample of the desired progress tone from EPROM, and output it into its associated PCM channel.
The multiplexer would route that progress tone channel to the desired customer channels as needed.
There was one special "progress tone" that was a Recorded Voice Announcement, which customers received when the mux was only
accepting emergency calls. So the mechanism was quite flexible.
You can do this with software. EPROM space permitting, and with today's processors, you can implement a very flexible, single-channel
tone generation with your existing architecture.