今天写了个文字转语音的方法,其实使用很简单,文档资料也很简单! 主要是一个类目:
.h文件
//
// StrinToVoiceModel.h
// 文字转语音
//
// Created by 赵小二 on 2018/6/1.
// Copyright © 2018年 赵小二. All rights reserved.
//
/***********************
当前只支持根据中文播放简体中文,也可以根据英文播放英式英语
后期会慢慢完善各种语言转换
**********************/
#import
#import
@interface StrinToVoiceModel : NSObject
@property(nonatomic,assign)float rate; //语速
@property(nonatomic,assign)float volume; //音量
@property(nonatomic,assign)float pitchMultiplier; //音调
@property(nonatomic,assign)BOOL autoPlay; //是否支持自动播放
/**
实例化对象
@return 返回当前类
*/
+ (StrinToVoiceModel *)playInit;
/**
根据文字播放语音
*/
- (void)playWithString:(NSString *)string;
/**
实例化的时候设置默认属性
@param vloum 音量
@param rate 语速
@param pichMutiplier 音调
*/
- (void)setDefaultVloume:(float)vloum rate:(CGFloat)rate picchMutiplier:(CGFloat)pichMutiplier;
@end
.m文件
//
// StrinToVoiceModel.m
// 文字转语音
//
// Created by 赵小二 on 2018/6/1.
// Copyright © 2018年 赵小二. All rights reserved.
//
#import "StrinToVoiceModel.h"
static StrinToVoiceModel *soundPalyer = nil;//设置静态变量,全局只实例化一次,并且不可更改类目
@implementation StrinToVoiceModel
+ (StrinToVoiceModel *)playInit{
if (soundPalyer == nil) {
soundPalyer = [[StrinToVoiceModel alloc] init];
[soundPalyer setDefaultVloume:-1.0 rate:-1.0 picchMutiplier:-1.0];
}
return soundPalyer;
}
- (void)playWithString:(NSString *)string{
if(string && string.length > 0){//需要判断传入得文字是否存在
AVSpeechSynthesizer *player = [[AVSpeechSynthesizer alloc]init];
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc]initWithString:string];//设置语音内容
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];//设置语言 这是简体中文
utterance.rate = self.rate; //设置语速
utterance.volume = self.volume; //设置音量(0.0~1.0)默认为1.0
utterance.pitchMultiplier = self.pitchMultiplier; //设置语调 (0.5-2.0)
utterance.postUtteranceDelay = 1; //目的是让语音合成器播放下一语句前有短暂的暂停
[player speakUtterance:utterance];
}
}
/**
* 设置播放的声音参数 如果选择默认请传入 -1.0
*
* @param vloum 音量(0.0~1.0)默认为1.0
* @param rate 语速(0.0~1.0)
* @param pichMutiplier 语调 (0.5-2.0)
*/
- (void)setDefaultVloume:(float)vloum rate:(CGFloat)rate picchMutiplier:(CGFloat)pichMutiplier{
self.rate = rate;
self.volume = vloum;
self.pitchMultiplier = pichMutiplier;
if (rate == -1.0) {
self.rate = 1;
}
if (vloum == -1.0) {
self.volume = 1;
}
if (pichMutiplier == -1.0) {
self.pitchMultiplier = 1;
}
}
@end
使用方法:
//使用方法举例 导入头文件后,用一下方法即可实现
StrinToVoiceModel *palyer = [StrinToVoiceModel playInit];
[palyer setDefaultVloume:-1.0 rate:0.4 picchMutiplier:-1.0];
[palyer playWithString:@"我是赵小二"];