一直覺得朗讀是一個比較酷炫的功能傀缩,之前一直不知道怎么做那先,目前有一些三方的語音朗讀SDK,但他們都會收費赡艰,因此對于普通個人開發(fā)者可能是個不必要的花費售淡,所以我就看了看蘋果自家的語音功能,缺陷就是聲音可能不是你很滿意的慷垮。
不扯了揖闸,來看看我們需要做點什么吧
1.添加AVFoundation框架
DAA8CB27-FD6B-4674-AA77-0B41F2D436EF.png
2.導入頭文件、設置代理料身,申明一個AVSpeechSynthesizer全局變量
#import <AVFoundation/AVSpeechSynthesis.h>
@interface ViewController ()
<
AVSpeechSynthesizerDelegate
>
{
AVSpeechSynthesizer *_avSpeaker;
}
3.初始化并開始朗讀
//初始化語音合成器
_avSpeaker = [[AVSpeechSynthesizer alloc] init];
_avSpeaker.delegate = self;
//初始化要說出的內(nèi)容
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:[@"愛我iOS"];
//設置語速,語速介于AVSpeechUtteranceMaximumSpeechRate和AVSpeechUtteranceMinimumSpeechRate之間
//AVSpeechUtteranceMaximumSpeechRate
//AVSpeechUtteranceMinimumSpeechRate
//AVSpeechUtteranceDefaultSpeechRate
utterance.rate = 0.5;
//設置音高,[0.5 - 2] 默認 = 1
//AVSpeechUtteranceMaximumSpeechRate
//AVSpeechUtteranceMinimumSpeechRate
//AVSpeechUtteranceDefaultSpeechRate
utterance.pitchMultiplier = 1;
//設置音量,[0-1] 默認 = 1
utterance.volume = 1;
//讀一段前的停頓時間
utterance.preUtteranceDelay = 1;
//讀完一段后的停頓時間
utterance.postUtteranceDelay = 1;
//設置聲音,是AVSpeechSynthesisVoice對象
//AVSpeechSynthesisVoice定義了一系列的聲音, 主要是不同的語言和地區(qū).
//voiceWithLanguage: 根據(jù)制定的語言, 獲得一個聲音.
//speechVoices: 獲得當前設備支持的聲音
//currentLanguageCode: 獲得當前聲音的語言字符串, 比如”ZH-cn”
//language: 獲得當前的語言
//通過特定的語言獲得聲音
AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];
//通過voicce標示獲得聲音
//AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithIdentifier:AVSpeechSynthesisVoiceIdentifierAlex];
utterance.voice = voice;
//開始朗讀
[_avSpeaker speakUtterance:utterance];
4.暫停朗讀
//暫停朗讀
//AVSpeechBoundaryImmediate 立即停止
//AVSpeechBoundaryWord 當前詞結束后停止
[_avSpeaker pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate];
5.繼續(xù)朗讀
[_avSpeaker continueSpeaking];
6.停止朗讀
//AVSpeechBoundaryImmediate 立即停止
//AVSpeechBoundaryWord 當前詞結束后停止
[_avSpeaker stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
7.代理方法
#pragma mark -
#pragma mark - AVSpeechSynthesizerDelegate
//已經(jīng)開始
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didStartSpeechUtterance:(AVSpeechUtterance *)utterance{
}
//已經(jīng)說完
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance{
//如果朗讀要循環(huán)朗讀汤纸,可以在這里再次調(diào)用朗讀方法
//[_avSpeaker speakUtterance:utterance];
}
//已經(jīng)暫停
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance *)utterance{
}
//已經(jīng)繼續(xù)說話
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance *)utterance{
}
//已經(jīng)取消說話
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance *)utterance{
}
//將要說某段話
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer willSpeakRangeOfSpeechString:(NSRange)characterRange utterance:(AVSpeechUtterance *)utterance{
}
8.實現(xiàn)后臺播放
(1)在配置里設置
98BB280C-A7EC-4B28-86BA-6CC417AC9F17.png
(2)在AppDelegate.m里添加代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error = nil;
[session setCategory:AVAudioSessionCategoryPlayback error:&error];
[session setActive:YES error:&error];
[Bmob registerWithAppKey:BMOB_AppID];
return YES;
}