苹果原生文字转语音播报
Posted CH520 -- Cnblogs。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了苹果原生文字转语音播报相关的知识,希望对你有一定的参考价值。
1、CHiosSpeech.h
//
// 文 件 名:CHiOSSpeech.h
//
// 版权所有:Copyright ? 2018年 leLight. All rights reserved.
// 创 建 者:leLight
// 创建日期:2018/7/30.
// 文档说明:苹果原生文字转语音播报.
// 修 改 人:
// 修改日期:
//
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
@protocol CHiOSSpeechDelegate <NSObject>
@optional
/************ 开始播放 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didStartSpeechUtterance:(AVSpeechUtterance*)utterance;
/************ 完成播放 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance*)utterance;
/************ 播放中止 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance*)utterance;
/************ 恢复播放 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance*)utterance;
/************ 播放取消 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance*)utterance;
@end
@interface CHiOSSpeech : NSObject
/** 文字播报代理 */
@property (nonatomic, weak) id<CHiOSSpeechDelegate> delegate;
/************ 单例对象 *****************************/
+ (CHiOSSpeech *)sharedInstance;
/************ 开始播放 *****************************/
- (void)startSpeekWithString:(NSString *)string;
/************ 暂停播放 *****************************/
- (void)pauseSpeaking;
/************ 继续播放 *****************************/
- (void)continueSpeaking;
// 初始化配置:这里不设置则使用默认参数
/**
* 设置播放的声音参数 如果选择默认请传入 -1.0
*
* @param aVolume 音量(0.0~1.0)默认为1.0
* @param aRate 语速(0.0~1.0)默认为1.0
* @param aPitchMultiplier 语调 (0.5-2.0)默认为1.0
* @param languageCode 语言 默认为 中文普通话:@"zh-CN"
*/
- (void)setDefaultWithVolume:(float)aVolume
rate:(CGFloat)aRate
pitchMultiplier:(CGFloat)aPitchMultiplier
languageCode:(NSString *)languageCode;
@end
2、CHiOSSpeech.m
//
// 文 件 名:CHiOSSpeech.m
//
// 版权所有:Copyright ? 2018年 leLight. All rights reserved.
// 创 建 者:leLight
// 创建日期:2018/7/30.
// 文档说明:苹果原生文字转语音播报.
// 修 改 人:
// 修改日期:
//
#import "CHiOSSpeech.h"
@interface CHiOSSpeech () <AVSpeechSynthesizerDelegate>
{
AVSpeechSynthesizer *av;
AVSpeechUtterance *utterance;
}
/** 语速 */
@property(nonatomic, assign) float rate;
/** 音量 */
@property(nonatomic, assign) float volume;
/** 音调 */
@property(nonatomic, assign) float pitchMultiplier;
/** 音调 */
@property(nonatomic, copy) NSString *languageCode;
@end
@implementation CHiOSSpeech
/************ 单例对象 *****************************/
+ (CHiOSSpeech *)sharedInstance {
static CHiOSSpeech *sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedClient = [[CHiOSSpeech alloc] init];
});
return sharedClient;
}
/************ 初始化创建 *****************************/
- (instancetype)init {
self = [super init];
if (self) {
// 初始化对象
av = [[AVSpeechSynthesizer alloc] init];
// 挂上代理
av.delegate = self;
// 初始化配置
[self setDefaultWithVolume:-1.0 rate:-1.0 pitchMultiplier:-1.0 languageCode:@"zh-CN"];
};
return self;
}
/************ 开始播放 *****************************/
- (void)startSpeekWithString:(NSString *)string {
utterance = [[AVSpeechUtterance alloc] initWithString:string];
// 设置语速,范围0-1,注意0最慢,1最快;AVSpeechUtteranceMinimumSpeechRate最慢,AVSpeechUtteranceMaximumSpeechRate最快
utterance.rate = 0.5;
//设置发音,这是中文普通话:@"zh-CN"
AVSpeechSynthesisVoice *voice = [AVSpeechSynthesisVoice voiceWithLanguage:self.languageCode];
utterance.voice = voice;
// 设置语速
utterance.rate = self.rate;
// 设置音量(0.0~1.0)默认为1.0
utterance.volume = self.volume;
// 设置语调 (0.5-2.0)
utterance.pitchMultiplier = self.pitchMultiplier;
// 目的是让语音合成器播放下一语句前有短暂的暂停
utterance.postUtteranceDelay = 1;
// 开始
[av speakUtterance:utterance];
}
/************ 暂停播放 *****************************/
- (void)pauseSpeaking {
[av pauseSpeakingAtBoundary:AVSpeechBoundaryWord];
}
/************ 继续播放 *****************************/
- (void)continueSpeaking {
// 如果暂停则恢复,会从暂停的地方继续
[av continueSpeaking];
}
#pragma mark ***************************** AVSpeechSynthesizerDelegate ***********************************************
/************ 开始播放 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didStartSpeechUtterance:(AVSpeechUtterance*)utterance {
CHLog(@"是否正在播放:%d", synthesizer.isSpeaking);
CHLog(@"是否处于播放:%d", synthesizer.isPaused);
CHLog(@"播放的内容:%@", utterance.speechString);
CHLog(@"---开始播放");
if([self.delegate respondsToSelector:@selector(speechSynthesizer: didStartSpeechUtterance:)]) {
[self.delegate speechSynthesizer:synthesizer didStartSpeechUtterance:utterance];
}
}
/************ 完成播放 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance*)utterance {
CHLog(@"---完成播放");
if([self.delegate respondsToSelector:@selector(speechSynthesizer: didFinishSpeechUtterance:)]) {
[self.delegate speechSynthesizer:synthesizer didFinishSpeechUtterance:utterance];
}
}
/************ 播放中止 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance*)utterance {
CHLog(@"---播放中止");
if([self.delegate respondsToSelector:@selector(speechSynthesizer: didPauseSpeechUtterance:)]) {
[self.delegate speechSynthesizer:synthesizer didPauseSpeechUtterance:utterance];
}
}
/************ 恢复播放 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance*)utterance {
CHLog(@"---恢复播放");
if([self.delegate respondsToSelector:@selector(speechSynthesizer: didContinueSpeechUtterance:)]) {
[self.delegate speechSynthesizer:synthesizer didContinueSpeechUtterance:utterance];
}
}
/************ 播放取消 *****************************/
- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance*)utterance {
CHLog(@"---播放取消");
if([self.delegate respondsToSelector:@selector(speechSynthesizer: didCancelSpeechUtterance:)]) {
[self.delegate speechSynthesizer:synthesizer didCancelSpeechUtterance:utterance];
}
}
// 初始化配置
/**
* 设置播放的声音参数 如果选择默认请传入 -1.0
*
* @param aVolume 音量(0.0~1.0)默认为1.0
* @param aRate 语速(0.0~1.0)默认为1.0
* @param aPitchMultiplier 语调 (0.5-2.0)默认为1.0
* @param languageCode 语言 默认为 中文普通话:@"zh-CN"
*/
- (void)setDefaultWithVolume:(float)aVolume rate:(CGFloat)aRate pitchMultiplier:(CGFloat)aPitchMultiplier languageCode:(NSString *)languageCode {
self.rate = aRate;
self.volume = aVolume;
self.pitchMultiplier = aPitchMultiplier;
self.languageCode = languageCode;
if (aRate == -1.0) {
self.rate = 0.5;
}
if (aVolume == -1.0) {
self.volume = 1.0;
}
if (aPitchMultiplier == -1.0) {
self.pitchMultiplier = 1;
}
}
@end
以上是关于苹果原生文字转语音播报的主要内容,如果未能解决你的问题,请参考以下文章