iOS文字转语音播放

前段时间用到一个功能就是将文字用语音读出来,自己整理了一下,封装成了一个类,用起来是比较简单的。好了,废话不说。

 

首先,项目要导入AVFoundation框架,然后常用到的类:

AVSpeechSynthesisVoice:用来配置发音,支持的发音非常多,这个会放在附录中展示出来

AVSpeechSynthesizer:实例一个播放器

AVSpeechUtterance:这个类的作用是将字符串合成为语音对象提供给AVSpeechSynthesizer来播放,语音播放的速度、音量、音调等都是在这设置的

 

****简单介绍完毕,上代码****

在.h文件中:

//  Copyright © 2016年 danson. All rights reserved.

 

#import <Foundation/Foundation.h>

#import <AVFoundation/AVFoundation.h>

 

 @interface SDSoundPlayer : NSObject

 

@property(nonatomic,assign)float rate;   //语速

@property(nonatomic,assign)float volume; //音量

@property(nonatomic,assign)float pitchMultiplier;  //音调

@property(nonatomic,assign)BOOL  autoPlay;  //自动播放

 

 //类方法实例出对象

+(SDSoundPlayer *)SDSoundPlayerInit;

//基础设置,如果有别的设置,也很好实现

-(void)setDefaultWithVolume:(float)aVolume rate:(CGFloat)aRate pitchMultiplier:(CGFloat)aPitchMultiplier;

 //播放并给出文字

-(void)play:(NSString *)string;

 

@end

 

在.m文件中:

//  Copyright © 2016年 danson. All rights reserved.

 

#import "SDSoundPlayer.h"

 static SDSoundPlayer *soundplayer = nil;

@implementation SDSoundPlayer

 

+(SDSoundPlayer *)SDSoundPlayerInit

{

    if(soundplayer == nil)

    {

        soundplayer = [[SDSoundPlayer alloc]init];

        [soundplayer setDefaultWithVolume:-1.0 rate:-1.0 pitchMultiplier:-1.0];

    }

    return soundplayer;

}

 

//播放声音

-(void)play:(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 aVolume          音量(0.0~1.0)默认为1.0

 *  @param aRate            语速(0.0~1.0)

 *  @param aPitchMultiplier 语调 (0.5-2.0)

 */

-(void)setDefaultWithVolume:(float)aVolume rate:(CGFloat)aRate pitchMultiplier:(CGFloat)aPitchMultiplier

{

    self.rate   = aRate;

    self.volume = aVolume;

    self.pitchMultiplier = aPitchMultiplier;

 

    if (aRate == -1.0) {

        self.rate = 1;

    }

    if (aVolume == -1.0) {

        self.volume = 1;

    }

    if (aPitchMultiplier == -1.0) {

        self.pitchMultiplier = 1;

    }

}

 @end

 

使用的例子:

    SDSoundPlayer *player = [SDSoundPlayer SDSoundPlayerInit];

    [player setDefaultWithVolume:-1.0 rate:0.4 pitchMultiplier:-1.0];

    [player play:@"要播放的文字"];

就是这么随意 

 

 

附录:AVSpeech支持的语言种类

"[AVSpeechSynthesisVoice 0x978a0b0]Language: th-TH", 
"[AVSpeechSynthesisVoice 0x977a450]Language: pt-BR", 
"[AVSpeechSynthesisVoice 0x977a480]Language: sk-SK",
"[AVSpeechSynthesisVoice 0x978ad50]Language: fr-CA", 
"[AVSpeechSynthesisVoice 0x978ada0]Language: ro-RO", 
"[AVSpeechSynthesisVoice 0x97823f0]Language: no-NO",
"[AVSpeechSynthesisVoice 0x978e7b0]Language: fi-FI", 
"[AVSpeechSynthesisVoice 0x978af50]Language: pl-PL", 
"[AVSpeechSynthesisVoice 0x978afa0]Language: de-DE", 
"[AVSpeechSynthesisVoice 0x978e390] Language:nl-NL", 
"[AVSpeechSynthesisVoice 0x978b030]Language: id-ID", 
"[AVSpeechSynthesisVoice 0x978b080]Language: tr-TR", 
"[AVSpeechSynthesisVoice 0x978b0d0]Language: it-IT", 
"[AVSpeechSynthesisVoice 0x978b120]Language: pt-PT",
"[AVSpeechSynthesisVoice 0x978b170]Language: fr-FR",
"[AVSpeechSynthesisVoice 0x978b1c0]Language: ru-RU", 
"[AVSpeechSynthesisVoice0x978b210]Language: es-MX", 
"[AVSpeechSynthesisVoice 0x978b2d0]Language: zh-HK",
"[AVSpeechSynthesisVoice 0x978b320]Language: sv-SE", 
"[AVSpeechSynthesisVoice 0x978b010]Language: hu-HU",
"[AVSpeechSynthesisVoice 0x978b440]Language: zh-TW",
"[AVSpeechSynthesisVoice 0x978b490]Language: es-ES",
"[AVSpeechSynthesisVoice 0x978b4e0]Language: zh-CN", 
"[AVSpeechSynthesisVoice 0x978b530]Language: nl-BE", 
"[AVSpeechSynthesisVoice 0x978b580]Language: en-GB",
"[AVSpeechSynthesisVoice 0x978b5d0]Language: ar-SA", 
"[AVSpeechSynthesisVoice 0x978b620]Language: ko-KR",
"[AVSpeechSynthesisVoice 0x978b670]Language: cs-CZ",
"[AVSpeechSynthesisVoice 0x978b6c0]Language: en-ZA", 
"[AVSpeechSynthesisVoice 0x978aed0]Language: en-AU",
"[AVSpeechSynthesisVoice 0x978af20]Language: da-DK",
"[AVSpeechSynthesisVoice 0x978b810]Language: en-US",
"[AVSpeechSynthesisVoice 0x978b860]Language: en-IE",
"[AVSpeechSynthesisVoice 0x978b8b0]Language: hi-IN", 
"[AVSpeechSynthesisVoice 0x978b900]Language: el-GR",
"[AVSpeechSynthesisVoice 0x978b950]Language: ja-JP" )

对照中文(不是一一对应关系)

中文(简体中文) 
阿拉伯语(沙特阿拉伯) 
中文(普通话) 
中文(香港) 
中文(台湾) 
捷克 
丹麦 
荷兰语(比利时) 
荷兰语 
英语(澳大利亚) 
英语(英国) 
英语(爱尔兰) 
英语(美国) 
英语(南非) 
芬兰语 
法语(加拿大) 
法语(标准) 
德语(标准) 
希腊语 
北印度语 
匈牙利语 
印尼语 
意大利语(标准) 
日语 
韩语 
挪威语 
波兰语 
葡萄牙语(巴西) 
葡萄牙语(葡萄牙) 
罗马尼亚语 
俄语 
斯洛伐克语 
西班牙语 
西班牙语(墨西哥) 
瑞典语 
泰语 
土耳其语

 

posted @ 2016-05-19 16:51  废话太多不如沉默  阅读(6647)  评论(0)    收藏  举报