iOS開發TTS技術即文本轉語音
iOS系統文本轉語音的實現
在iOS7之前,想要實現語音播報文字內容,可能需要第三方資產庫來實現。現在在iOS之後,系統為我們提供了語音播報文字的功能,我們不僅可以播報英語內容,也可以播報漢語文字實現。
TTS[Text To Speech] :
主要依賴AVSpeechSynthesizer,AVSpeechUtterance,AVSpeechSynthesisVoice,要使用這些類必須先加入AVFoundation架構:
AVSpeechSynthesisVoice:用來配置發音,支援的發音非常多;
[AVSpeechSynthesisVoicespeechVoices]類方法可用看到支援的發音種類;
AVSpeechUtterance:這個類就是用來將字串合成為語音對象提供給AVSpeechSynthesizer來播放,這個類還有一些執行個體方法用來控制語速,音調等等。。
實現代碼:系統實現方法比較簡單,但需要在iOS7之上才可以,IOS7之前一般語音辨識是靠一些第三方庫,或者使用Google語音介面(下文介紹)
建立一個textField,輸入將要播放的文本,建立一個button,實現文本轉語音
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 150, 30)];[self.view addSubview:self.textField]; self.textField.borderStyle = 3;self.textField.placeholder = @"請輸入文本";self.button = [UIButton buttonWithType:UIButtonTypeSystem];[self.view addSubview:self.button];self.button.frame = CGRectMake(100, 180, 100, 30);[self.button setTitle:@"語音播放" forState:UIControlStateNormal];[self.button addTarget:self action:@selector(playString:) forControlEvents:UIControlEventTouchUpInside];
文本轉語音方法實現代碼:
- (void)playString:(UIButton *)button{ if (![self.textField.text isEqualToString:@""]) { AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:self.textField.text]; AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];//設定語言 utterance.voice = voice; NSLog(@"%@",[AVSpeechSynthesisVoice speechVoices]); utterance.volume= 1; //設定音量(0.0~1.0)預設為1.0 utterance.rate= 0.01; //設定語速 utterance.pitchMultiplier= 1.1; //設定語調 AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc]init]; [synth speakUtterance:utterance]; }}
據我測試,iOS提供的介面合成的語音比較生硬且沒有停頓