Код ниже содержит список направлений и считывает их с использованием 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];
}
}
Я нашел аналогичную проблему, когда я установил postUtteranceDelay = 0,3, иногда didStartSpeechUtterance больше не будет запущен, и если я установлю postUtteranceDelay = 0, все будет в порядке. Это происходит только на iOS8 – ikzjfr0
OP задает вопрос о проблеме с задержкой, а не о проблеме остановки сообщения. – technophyle