Here is the situation:
User looks something up.
- Alert sound is played because there is a notice on the item he looked up
- User closes the notice - the application continues to retrieve information
- User is sent a 'ding' telling them the information has finished retrieving
- Application begins sending certain attributes to TextToSpeech
- The application encounters a notice second, internal notice on the data and sends another alert (texttospeech is paused, then resumed after the alert finishes)
- Text to speech is finished, another 'ding' is played letting the user know that is has read everything
We currently use a queue to process sounds in an orderly fashion to prevent overlapping of sounds. We currently only play a sound from the queue when the SoundAdded event is called. This is a custom event we made to be raised when we add a sound to the queue. Currently, only one sound will be played per calling of the event. We have run into the problem where after certain sounds are played, they will 'lock' the queue, preventing further sounds from being process. We got around this by always 'unlocking' the queue even if a sound doesn't play. However, this still leaves us with the problem of the queue getting backed up with sounds to play.
The only method I can think of to solve this is to add a loop to keep trying to play the sound if there is still a sound waiting to be played. Currently, the main thread is handling sounds, I would probably need to move sound handling to a separate thread, but I'm not sure what the best method of handing the sound would be.
So... my question... Is there a good sound library that we can use that includes an event for the end of a sound. Or... what would be the best way to create such a thing?