IOS开发--语音合成(讯飞接口)

IOS开发–语音播报

想要实现iOS语音播报,要使用讯飞/百度语音播报的第三方接口。我使用的是讯飞的语音合成接口。

登录注册讯飞平台,申请语音合成接口!

下载iOS开发所需sdk,sdk中包含语音开发所需依赖包,以及一个演示demo。

下载iOS msc
在这里插入图片描述

使用Xcode的编写代码

标题首先要导入语音播报所需的依赖包,可以直接从demo中将依赖包全部拖到自己的工程中

在这里插入图片描述

其次,在AppDelegate.m中初始化你申请的接口id
//引入语音播报的头文件
#import "AppDelegate.h"
#import "IFlyMSC/IFlyMSC.h"
//初始化ID
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@", @"你自己申请的appid"];
    [IFlySpeechUtility createUtility:initString];
    return YES;
}

我做的一个简单demo

viewController.h


#import <UIKit/UIKit.h>
#import "IFlyMSC/IFlyMSC.h"
#import <AVFoundation/AVFoundation.h>

@class IFlySpeechSynthesizer;

typedef NS_OPTIONS(NSInteger, SynthesizeType) {
    NomalType           = 5,    //Normal TTS
    UriType             = 6,    //URI TTS
};

//state of TTS
typedef NS_OPTIONS(NSInteger, Status) {
    NotStart            = 0,
    Playing             = 2,
    Paused              = 4,
};

@interface ViewController : UIViewController <IFlySpeechSynthesizerDelegate>
@property (nonatomic, strong) IFlySpeechSynthesizer * iFlySpeechSynthesizer;

@property (nonatomic, strong)  UILabel *label;
@property (nonatomic, strong)  UIButton *btn;
@property (nonatomic, strong)  UIButton *pause;
@property (nonatomic, strong)  UIButton *stop;
//@property (weak, nonatomic) IBOutlet UIButton *startSynthesizeBtn;
//@property (weak, nonatomic) IBOutlet UIButton *cancelSynthesizeBtn;
//@property (weak, nonatomic) IBOutlet UIButton *uriSynthesizeBtn;
//@property (weak, nonatomic) IBOutlet UIButton *clearTextBtn;
//@property (weak, nonatomic) IBOutlet UIButton *pauseSynthesizeBtn;
//@property (weak, nonatomic) IBOutlet UIButton *resumeSynthesizeBtn;

@property (nonatomic, assign) Status state;
@property (nonatomic, assign) SynthesizeType synType;

@end


viewController.m


#import "ViewController.h"
#import "iflyMSC/IFlyMSC.h"
int flag;
int sign;

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //UILabel *label=[[UILabel alloc]init];
    _label=[[UILabel alloc]init];
    _label.frame=CGRectMake(0, 0, self.view.frame.size.width, 500);
    //label.backgroundColor=[UIColor blueColor];
    _label.numberOfLines=0;
    [_label setText:@"《象传》全文    “天行健,君子以自强不息”(乾卦)   “地势坤,君子以厚德载物”(坤卦)。   “随风巽,君子以申命行事”(巽卦)   “渐雷震,君子以恐惧修省”(震卦)。   “善如水,君子以作事谋始”(坎卦)   “火同人,君子以类族辨物”(离卦)。   “步泽履,君子以辨民安志”(兑卦)   “艮山谦,君子以裒多益寡”(艮卦)。"];
    //UIButton *btn=[[UIButton alloc]init];
    flag=0;
    sign=0;
    //开始播报
    _btn=[[UIButton alloc]init];
    _btn.frame=CGRectMake(100, self.view.frame.size.height-50, self.view.frame.size.width-200, 50);
    [_btn setImage:[UIImage imageNamed:@"未播报"] forState:UIControlStateNormal];
    [_btn setTitle:@"语音播报" forState:UIControlStateNormal];
    [_btn setBackgroundImage:[UIImage imageNamed:@"button1"] forState:UIControlStateNormal];
    //暂停播报
    _pause=[[UIButton alloc]init];
    _pause.frame=CGRectMake(100, self.view.frame.size.height-100, self.view.frame.size.width-200, 50);
    [_pause setBackgroundImage:[UIImage imageNamed:@"button1"] forState:UIControlStateNormal];
    [_pause setTitle:@"暂停播报" forState:UIControlStateNormal];
     [_pause setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal];
    _pause.alpha=0;
    //停止播报
    _stop=[[UIButton alloc]init];
    _stop.frame=CGRectMake(100, self.view.frame.size.height-150, self.view.frame.size.width-200, 50);
    [_stop setBackgroundImage:[UIImage imageNamed:@"button1"] forState:UIControlStateNormal];
     [_stop setImage:[UIImage imageNamed:@"stop"] forState:UIControlStateNormal];
    [_stop setTitle:@"停止播报" forState:UIControlStateNormal];
    _stop.alpha=0;
    
    
    //[_btn setTitle:@"正在播报" forState:UIControlStateHighlighted];
    
//    [_btn setBackgroundImage:[UIImage imageNamed:@"按钮"] forState:UIControlStateHighlighted];
    //_btn.backgroundColor=[UIColor redColor];
    
    [self.view addSubview:_label];
      [self.view addSubview:_pause];
      [self.view addSubview:_stop];
//      [self.view addSubview:_btn];
    [self.view addSubview:_btn];
    
    [_btn addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside];
    [_pause addTarget:self action:@selector(pause) forControlEvents:UIControlEventTouchUpInside];
    [_stop addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];
}

//开始播报
- (void) start{
    _pause.alpha=1;
    _stop.alpha=1;
    if(flag==0){
        [_btn setImage:[UIImage imageNamed:@"播报"] forState:UIControlStateNormal];
        [_btn setTitle:@"正在播报" forState:UIControlStateNormal];
        flag=1;
    }else{
        [_btn setImage:[UIImage imageNamed:@"未播报"] forState:UIControlStateNormal];
        [_btn setTitle:@"语音播报" forState:UIControlStateNormal];
        flag=0;
    }
     NSString* str= _label.text;
    NSLog(@"---------");
    //NSLog(str);
    _synType = NomalType;
    //获取语音合成单例
    _iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance];
    //设置协议委托对象
    _iFlySpeechSynthesizer.delegate = self;
    //设置合成参数
        //设置内容编码,获取纯文本内容
      [_iFlySpeechSynthesizer setParameter:@"unicode" forKey:[IFlySpeechConstant TEXT_ENCODING]];
    //设置在线工作方式
    [_iFlySpeechSynthesizer setParameter:[IFlySpeechConstant TYPE_CLOUD]
     forKey:[IFlySpeechConstant ENGINE_TYPE]];
    //设置音量,取值范围 0~100
    [_iFlySpeechSynthesizer setParameter:@"50"
    forKey: [IFlySpeechConstant VOLUME]];
    //发音人,默认为”xiaoyan”,可以设置的参数列表可参考“合成发音人列表”
    [_iFlySpeechSynthesizer setParameter:@" xiaoyan "
     forKey: [IFlySpeechConstant VOICE_NAME]];
    //保存合成文件名,如不再需要,设置为nil或者为空表示取消,默认目录位于library/cache下
    [_iFlySpeechSynthesizer setParameter:@" tts.pcm"
     forKey: [IFlySpeechConstant TTS_AUDIO_PATH]];
    //启动合成会话
    [_iFlySpeechSynthesizer startSpeaking: str];
    //IFlySpeechSynthesizerDelegate协议实现
    //合成结束
    if (_iFlySpeechSynthesizer.isSpeaking) {
        _state = Playing;
    }
}
//暂停播报
- (void) pause{
    if(sign==0){
         [_iFlySpeechSynthesizer pauseSpeaking];
         [_pause setTitle:@"继续播报" forState:UIControlStateNormal];
         [_pause setImage:[UIImage imageNamed:@"play"] forState:UIControlStateNormal];
        sign=1;
    }else{
        [_iFlySpeechSynthesizer resumeSpeaking];
        [_pause setTitle:@"暂停播报" forState:UIControlStateNormal];
        [_pause setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal];
        sign=0;
    }
   
}

//结束播报
- (void) stop{
    flag=0;
    sign=0;
    _pause.alpha=0;
    _stop.alpha=0;
    [_btn setImage:[UIImage imageNamed:@"未播报"] forState:UIControlStateNormal];
    [_btn setTitle:@"语音播报" forState:UIControlStateNormal];
    [_iFlySpeechSynthesizer stopSpeaking];
}

- (void) onCompleted:(IFlySpeechError *) error {}
//合成开始
- (void) onSpeakBegin {}
//合成缓冲进度
- (void) onBufferProgress:(int) progress message:(NSString *)msg {
    NSLog(@"buffer progress %2d%%. msg: %@.", progress, msg);
    
}
//合成播放进度
- (void) onSpeakProgress:(int) progress beginPos:(int)beginPos endPos:(int)endPos {}




@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

likehack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值