2014-02-10 3 views
0

Код ниже содержит список направлений и считывает их с использованием AVSpeechSynthesizer. После завершения пользователь сможет выбрать переменную величину времени, и приложение будет считывать инструкции для соответствия временному диапазону.AVSpeechSynthesizer postUtteranceDelay timing problems

Проблема в том, что когда я нажимаю кнопку воспроизведения, задержка между направлениями значительно длиннее, чем должно быть. Вместо двух минут, с которыми я их жестко закодировал, это занимает более трех. Я зарегистрировал значение всех моих postUtteranceDelays, и они складываются правильно. Это также происходит не из-за времени обработки, потому что при установке postUtteranceDelay на 0 не происходит паузы между направлениями. Я не уверен, что происходит.

- (IBAction)play:(UIButton *)sender { 
[sender setTitle:@"Showering" forState:UIControlStateNormal]; 
Shower *shower = [[SpecificShower alloc] init]; 

NSUInteger totalRatio = [shower calculateTotalRatio:shower]; 
NSNumber *offset = @18.0; // estimated time to speak instructions combined 
NSNumber *seconds = @120.0; // hard coded but just for testing 
int totalSeconds = seconds.intValue - offset.intValue; 

self.synthesizer = [[AVSpeechSynthesizer alloc] init]; 

for (NSDictionary* direction in shower.directions) { 

    AVSpeechUtterance *aDirection = [[AVSpeechUtterance alloc] initWithString:direction[@"text"]]; 
    NSNumber *directionLength = direction[@"length"]; 
    aDirection.rate = .3; 
    aDirection.preUtteranceDelay = 0; 
    // totalRatio is calculated by adding all the lengths together 
    // then the individual direction length is divided by totalRatio 
    // and that fraction is multiplied by total number of seconds 
    // to come up with the postUtteranceDelay for each direction 
    aDirection.postUtteranceDelay = totalSeconds * [directionLength floatValue]/totalRatio; 
    NSLog(@"%f", aDirection.postUtteranceDelay); 
    [self.synthesizer speakUtterance:aDirection]; 
} 

} 

ответ

-1

Вы не одиноки. Это, кажется, ошибка, как отмечено с обходным решением более here.
Есть также радары, поданные here и here.

Будем надеяться, что это исправится в ближайшее время.

+0

Я нашел аналогичную проблему, когда я установил postUtteranceDelay = 0,3, иногда didStartSpeechUtterance больше не будет запущен, и если я установлю postUtteranceDelay = 0, все будет в порядке. Это происходит только на iOS8 – ikzjfr0

+0

OP задает вопрос о проблеме с задержкой, а не о проблеме остановки сообщения. – technophyle