iOS 7 не работает API преобразования текста в речь

#ios #iphone #objective-c #ios7 #text-to-speech

#iOS #iPhone #objective-c #ios7 #преобразование текста в речь

Вопрос:

Недавно я внедрил iOS 7 TTS API, и он не работает.

В .h:

 #import <AVFoundation/AVFoundation.h>

@interface MainViewController : UIViewController <AVSpeechSynthesizerDelegate>
  

В .m:

 @interface MainViewController ()
@property (nonatomic, strong) AVSpeechSynthesizer* talker;
@end

- (void)viewDidLoad
{
    AVSpeechUtterance *utter = [[AVSpeechUtterance alloc] initWithString:@"Hello World"];
    utter.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
    [utter setRate:0.2f];
    if (!self.talker) {
        self.talker = [AVSpeechSynthesizer new];
    }
    self.talker.delegate = self;
    [self.talker speakUtterance:utter];
 }
  

Я также добавил AVFoundation.framework . Я не знаю, в чем проблема, но ничего не произносится. Приветствуется любая помощь.

Комментарии:

1. Он что-нибудь говорит? Должен спросить, включен ли звук, чтобы вы могли его слышать? Свойство или нет, это должно работать нормально, если все это выполняется одним и тем же методом.

2. Кроме того, установите делегат. Методы делегирования сработают, если все работает, даже если вы ничего не слышите. В вашем коде не задан какой-либо делегат.

3. @matt Я обновил свой вопрос… и я посмотрел на рабочий код с github и сделал то же самое в своем коде… Я также установил делегат… Но по какой-то причине он все еще не работает

4. @remus Да, громкость включена на полную, и она находится одним способом… но он ничего не говорит.

5. По какой-либо причине вы используете как @import, так и #import? Не вижу, что вызывает конфликт, но, возможно, стоит попробовать. По мнению Мэтта, ваш обновленный код больше соответствует этому примеру, что заставляет меня думать, что это конфликт звука или отключение звука.

Ответ №1:

Вы создаете свой синтезатор, а затем ваш метод заканчивается, и синтезатор исчезает в облаке дыма, прежде чем он сможет что-либо сделать. Если вы хотите, чтобы он говорил, сохраните его (например, в свойстве), чтобы он был достаточно живым для этого.

Комментарии:

1. Рабочий код здесь: github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… Иди и сделай то же самое.

2. «Я сделал это», но не в том коде, который вы изначально указали. Вы спросили, что не так с этим кодом, я сказал вам кое-что, что в нем было серьезно не так. Если вы его изменили, покажите свой новый код.

Ответ №2:

импортируйте приведенную ниже инструкцию

 #import<AVFoundation/AVFoundation.h>
  

и запишите этот код в свое нажатие кнопки

 AVSpeechSynthesizer *synthesizer = [[AVSpeechSynthesizer alloc] init];
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:_txtText.text];
//utterance.rate = AVSpeechUtteranceMaximumSpeechRate;
utterance.rate = 0.30;
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
[synthesizer speakUtterance:utterance];
synthesizer = nil;
NSArray* speechVoices = [AVSpeechSynthesisVoice speechVoices];
NSLog(@"Voices: (%lu) %@", (unsigned long)speechVoices.count, speechVoices);
  

работает на 100% для меня