iOS 文字转语音的三种方案

作者: 190CM | 来源:发表于2017-03-06 21:43 被阅读1286次

    首先,文字转语音最简单的方案就是使用系统提供的接口

    一、AVSpeechSynthesizer

    AVSpeechSynthesizer开放的接口数量少,很难满足我们开发的各种需求,这个时候第三方的语音就是我们比较好的选择。。

    文本转语音技术, 也叫TTS, 是Text To Speech的缩写. iOS如果想做有声书等功能的时候, 会用到这门技术.
    iOS7之后才有该功能
    需要 AVFoundation 库
    AVSpeechSynthesizer: 语音合成器, 可以假想成一个可以说话的人, 是最主要的接口
    AVSpeechSynthesisVoice: 可以假想成人的声音
    AVSpeechUtterance: 可以假想成要说的一段话
    

    二、百度语音包

    百度语音,我选择的是百度语音包!(尽管百度一直狠招黑)
    2.1下载离线合成语音包

    ![Uploading QQ20170306-3@2x_934443.png . . .]
    2.2记住这3个key(说多了都是泪,后来才知道AppId就是AppCode,杀千刀的文档)
    QQ20170306-3@2x.png
    2.3给出的demo还是十分打的,我在自己精简了很多主要是实现播放和设置声音
    -(void)configureSDK{
        NSLog(@"TTS version info: %@", [BDSSpeechSynthesizer version]);
        [BDSSpeechSynthesizer setLogLevel:BDS_PUBLIC_LOG_VERBOSE];
        [[BDSSpeechSynthesizer sharedInstance] setSynthesizerDelegate:self];
        [self configureOnlineTTS];
        [self configureOfflineTTS];
    }
    // 配置在线
    -(void)configureOnlineTTS{
        //#error "Set api key and secret key"
        [[BDSSpeechSynthesizer sharedInstance] setApiKey:@"e7QA3FWob8EbzLDP7I6fCtcY" withSecretKey:@"17d90e1974d0bcb31725245f96718e73"];
    }
    // 配置离线
    -(void)configureOfflineTTS{
        NSString* offlineEngineSpeechData = [[NSBundle mainBundle] pathForResource:@"Chinese_Speech_Female" ofType:@"dat"];
        NSString* offlineEngineTextData = [[NSBundle mainBundle] pathForResource:@"Chinese_Text" ofType:@"dat"];
        NSString* offlineEngineEnglishSpeechData = [[NSBundle mainBundle] pathForResource:@"English_Speech_Female" ofType:@"dat"];
        NSString* offlineEngineEnglishTextData = [[NSBundle mainBundle] pathForResource:@"English_Text" ofType:@"dat"];
        NSString* offlineEngineLicenseFile = [[NSBundle mainBundle] pathForResource:@"offline_engine_tmp_license" ofType:@"dat"];
        //#error "set offline engine license"
        NSError* err = [[BDSSpeechSynthesizer sharedInstance] loadOfflineEngine:offlineEngineTextData speechDataPath:offlineEngineSpeechData licenseFilePath:offlineEngineLicenseFile withAppCode:@"9353239"]; //
        if (err) {
            return;
        }
        err = [[BDSSpeechSynthesizer sharedInstance] loadEnglishDataForOfflineEngine:offlineEngineEnglishTextData speechData:offlineEngineEnglishSpeechData];
        if (err) {
            return;
        }
    }
    // 播放失败
    -(void)synthesizerErrorOccurred:(NSError *)error speaking:(NSInteger)SpeakSentence synthesizing:(NSInteger)SynthesizeSentence{
        [[BDSSpeechSynthesizer sharedInstance] cancel];
    }
    
    // 合成参数设置
    // 声音
    [[BDSSpeechSynthesizer sharedInstance] setSynthesizerParam:[NSNumber numberWithInt:BDS_SYNTHESIZER_SPEAKER_FEMALE] forKey:BDS_SYNTHESIZER_PARAM_SPEAKER ];                                            
    // 音量
    [[BDSSpeechSynthesizer sharedInstance] setSynthesizerParam:[NSNumber numberWithInt:5] forKey:BDS_SYNTHESIZER_PARAM_VOLUME];                                                  
    // 音速    
    [[BDSSpeechSynthesizer sharedInstance] setSynthesizerParam:[NSNumber numberWithInt:5] forKey:BDS_SYNTHESIZER_PARAM_SPEED];                                                   
    // 音调   
     [[BDSSpeechSynthesizer sharedInstance] setSynthesizerParam:[NSNumber numberWithInt:5] forKey:BDS_SYNTHESIZER_PARAM_PITCH];                                               
    // 压缩  
    [[BDSSpeechSynthesizer sharedInstance] setSynthesizerParam:[NSNumber numberWithInt: BDS_SYNTHESIZER_AUDIO_ENCODE_MP3_16K] forKey:BDS_SYNTHESIZER_PARAM_AUDIO_ENCODING ];
    

    最后附上demo的传送门

    三、讯飞语音(比较主流的一款)

    相关文章

      网友评论

      • 橘子味草莓:有文字长度限制吗?需要转换的文字很长怎么办
        190CM:这个最好看下他们的文档,我使用的是百度语音包大约不到二十个字,转换还是挺快的,跟网络有关系,很长的话时间会久,对声音没什么要求的话就用AVSpeechSynthesizer最好
      • 3ab631dd1720:请问为什么我填上我申请的 AppID 和 APPkey 却提示我只有30天的试用期呢?而你的却没有!谢谢!
        190CM:应该有客服官方论坛吧!你可以提问一下,我这个实在帮不上你的忙,好久了,可能都改版几次了
        3ab631dd1720:@190CM 是免费的,官方文档有个申请离线的权限菜单,在最新的界面却没有
        190CM:@雨中行客 你是说百度语音包?我目前也还在用,但是很久没上过了网站了,不太了解,但是我记得都是免费的

      本文标题:iOS 文字转语音的三种方案

      本文链接:https://www.haomeiwen.com/subject/yjpygttx.html