#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% для меня