QHSpeechSynthesizerQueue
 Queue management system for AVSpeechSynthesizer
Installation
Cocoapods
Add this to your Podfile:
pod 'QHSpeechSynthesizerQueue' 
Run a pod install and import the header where you need it:
#import <QHSpeechSynthesizerQueue.h> 
Manually
Drop QHSpeechSynthesizerQueue.h and QHSpeechSynthesizerQueue.m in your project, then
#import "QHSpeechSynthesizerQueue.h" 
##Usage
Initialization
QHSpeechSynthesizerQueue *synthesizerQueue = [[QHSpeechSynthesizerQueue alloc] init]; 
Adding messages to the queue
Add a message at the end of the queue
[synthesizerQueue readLast:@"This message will be added to the end of the queue" 
                  withLanguage:@"en_US"
                  andRate:@"0.2"]; 
Insert a message to be read immediatly after the current message being read
[synthesizerQueue readNext:@"This message will be read next"
                  withLanguage:@"en_US"
                  andRate:@"0.2"
                  andClearQueue:NO]; 
If you set andClearQueue: to YES, the queue will be cleared and this will be the last message to be read.
Interrupt the current message and read this one immediately
[synthesizerQueue readImmediately:@"This message will be read next"
                  withLanguage:@"en_US"
                  andRate:@"0.2"
                  andClearQueue:NO]; 
If you set andClearQueue: to YES, the queue will be cleared and this will be the last message to be read.
Playback actions
Stop
Stop the queue's playback and clear the queue immediately.
[synthesizerQueue stop]; 
Stop after current
Stop the queue's playback and clear the queue. If something is currently being read, it will stop afterwards.
[synthesizerQueue stopAfterCurrent]; 
Pause
Pause the queue's playback immediately.
[synthesizerQueue pause]; 
Pause after current
Pause the queue's playback. If something is currently being read, it will pause afterwards.
[synthesizerQueue pauseAfterCurrent]; 
Resume
Resume the queue's playback.
[synthesizerQueue resume]; 
Clear queue
Clear the queue. If something is being read, it will not be interupted and future added messages will be read if not paused/stopped.
[synthesizerQueue clearQueue]; 
Properties
BOOL duckOthers
Set this to YES to duck all the device's audio sessions when a string is being read. Defaults to YES.
synthesizerQueue.duckOthers = YES; 
NSTimeInterval preDelay
The delay before reading a message. Default is 0.0
synthesizerQueue.preDelay = 1.0; 
NSTimeInterval postDelay
The delay after reading a message. Default is 0.0
synthesizerQueue.postDelay = 1.0; 
Delegate
You can set a QHSpeechSynthesizerQueueDelegate to be notified of playback events.
@protocol QHSpeechSynthesizerQueueDelegate <NSObject>
@optional
- (void)speechSynthesizerQueueDidStartTalking:(QHSpeechSynthesizerQueue *)queue;
- (void)speechSynthesizerQueueDidFinishTalking:(QHSpeechSynthesizerQueue *)queue;
- (void)speechSynthesizerQueueDidPauseTalking:(QHSpeechSynthesizerQueue *)queue;
- (void)speechSynthesizerQueueDidContinueTalking:(QHSpeechSynthesizerQueue *)queue;
- (void)speechSynthesizerQueueDidCancelTalking:(QHSpeechSynthesizerQueue *)queue;
- (void)speechSynthesizerQueueWillStartTalking:(QHSpeechSynthesizerQueue *)queue;
@end