AVSpeechSynthesizer没有暂停

时间:2014-07-26 15:32:23

标签: ios objective-c iphone ios7 text-to-speech

我在我的应用程序中使用AVSpeechSynthesizer for TTS。这些是我设置iOS 7 TTS的步骤。

#import <AVFoundation/AVFoundation.h>

@interface SpeakViewController : UIViewController <AVSpeechSynthesizerDelegate> {
    BOOL speechPaused;
}
@property (strong, nonatomic) AVSpeechSynthesizer *synthesizer;
@end

然后在我的.m:

-(void)viewDidLoad
{
    speechPaused = NO;
    [self playSound];
}
// The sound is playing fine. 
-(void) playSound {
    speechPaused = NO;
    AVSpeechUtterance* utter = [[AVSpeechUtterance alloc] initWithString:_text];
    utter.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
    [utter setRate:0.2f];
    if (!self.synthesizer) {
        self.synthesizer = [AVSpeechSynthesizer new];
    }
    self.synthesizer.delegate = self;
    [self.synthesizer speakUtterance:utter];
}
// This is what isn't working
- (void) pauseSpeech {
    if (speechPaused == NO) {
        [self.synthesizer pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate];
        NSLog(@"Pause");
        speechPaused = YES;
    }
    if (self.synthesizer.speaking == NO) {
        AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:@""];
        utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-au"];
        [self.synthesizer speakUtterance:utterance];
    }
}
- (void) playSpeech {
    [self.synthesizer continueSpeaking];
    speechPaused = NO;
    NSLog(@"Play");
}
- (IBAction)pauseSpeech:(id)sender {
    [self pauseSpeech];
}
- (IBAction)startSpeech:(id)sender {
    [self playSpeech];
}

我也在这个方法中设置一个NSLog,但它永远不会被调用:

- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance *)utterance
{
     NSLog(@"speechSynthesizer didPauseSpeechUtterance");
}

我已经坚持了好几天。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

试试这个

-(void)pauseSpeechReading
{
    if([synthesize isSpeaking]) {
        NSLog(@"Reading paused");
        [synthesize pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate];
        AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:@""];
        [synthesize speakUtterance:utterance];
        [synthesize pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate];
    }
}
-(void)resumeSpeechReading
{
     NSLog(@"Reading resumed");
    [synthesize continueSpeaking];
}