美文网首页iOS 开发每天分享优质文章
语音推送的多个语音合成部分

语音推送的多个语音合成部分

作者: 高乔人 | 来源:发表于2018-09-11 10:32 被阅读5次

//里面阿拉伯数字转为汉字的方法调用 请看我另一篇文章
https://www.jianshu.com/p/1e77eb744e48

-  (void)firstReadVideo:(NSString *)readPathString interger:(CGFloat) i{

      NSString *temp = nil;
     if ([readPathString containsString:@"."]) {
      NSArray *arr = [readPathString componentsSeparatedByString:@"."];
      NSString *firstString = arr.firstObject;
      readPathString = [self translation:firstString];
    
    
    NSString *lastString = arr.lastObject;
    if (lastString.length ==1) {
        for(int i =0; i < [readPathString length]; i++){
            
            temp = [readPathString substringWithRange:NSMakeRange(i,1)];
            [self.fileNameArray addObject:temp];
        }
        
        if ([lastString isEqualToString:@"0"]) {

            lastString  = nil;
            lastString = @"零";
            [self.fileNameArray addObject:@"点"];
            [self.fileNameArray addObject:lastString];
        }else{
            lastString = [self translation:lastString];
            [self.fileNameArray addObject:@"点"];
            [self.fileNameArray addObject:lastString];
        }
       
        
        
    }else if(lastString.length ==2){
        
        readPathString = [self translation:firstString];
        for(int i =0; i < [readPathString length]; i++){
            
            temp = [readPathString substringWithRange:NSMakeRange(i,1)];
            [self.fileNameArray addObject:temp];
        }
        
        [self.fileNameArray addObject:@"点"];
        NSString *afterFirstString = [lastString substringWithRange:NSMakeRange(0, 1)];
        NSString *afterLastString = [lastString substringWithRange:NSMakeRange(1, 1)];
        if (afterFirstString.integerValue ==0) {
            afterFirstString = @"零";
            [self.fileNameArray addObject:afterFirstString];
        }else{
            afterFirstString = [self translation:afterFirstString];
            [self.fileNameArray addObject:afterFirstString];
        }
        if (afterLastString.integerValue ==0) {
            afterLastString = @"零";
            [self.fileNameArray addObject:afterLastString];
        }else{
            afterLastString = [self translation:afterLastString];
            [self.fileNameArray addObject:afterLastString];
        }
        
    }
}

   AVMutableComposition *composition = [AVMutableComposition composition];
   CMTime allTime = kCMTimeZero;
    for (NSInteger i = 0; i < self.fileNameArray.count; i++) {
        NSString *auidoPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",self.fileNameArray[i]] ofType:@"wav"];
        
        AVURLAsset *audioAsset = [AVURLAsset assetWithURL:[NSURL fileURLWithPath:auidoPath]];
        
        // 音频轨道
        AVMutableCompositionTrack *audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:0];
        // 音频素材轨道
        AVAssetTrack *audioAssetTrack = [[audioAsset tracksWithMediaType:AVMediaTypeAudio] firstObject];
        
        // 音频合并 - 插入音轨文件
        [audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration) ofTrack:audioAssetTrack atTime:allTime error:nil];
        
        // 更新当前的位置
        allTime = CMTimeAdd(allTime, audioAsset.duration);
        
    }
    
    // 合并后的文件导出 - `presetName`要和之后的`session.outputFileType`相对应。
    AVAssetExportSession *session = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetAppleM4A];
    NSString *outPutFilePath = [[self.filePath stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"xindong.m4a"];
    
    if ([[NSFileManager defaultManager] fileExistsAtPath:outPutFilePath]) {
        [[NSFileManager defaultManager] removeItemAtPath:outPutFilePath error:nil];
    }
    
    // 查看当前session支持的fileType类型
    NSLog(@"---%@",[session supportedFileTypes]);
    session.outputURL = [NSURL fileURLWithPath:outPutFilePath];
    session.outputFileType = AVFileTypeAppleM4A; //与上述的`present`相对应
    session.shouldOptimizeForNetworkUse = YES;   //优化网络
    
    [session exportAsynchronouslyWithCompletionHandler:^{
        if (session.status == AVAssetExportSessionStatusCompleted) {
            NSLog(@"合并成功----%@", outPutFilePath);
            
            NSURL *url = [NSURL fileURLWithPath:outPutFilePath];
            
            self.player1 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
            
            self.player1.delegate = self;
            [self.player1 play];
            
            
        } else {
            // 其他情况, 具体请看这里`AVAssetExportSessionStatus`.
            // 播放失败

          }
      }];



}

相关文章

  • 语音推送的多个语音合成部分

    //里面阿拉伯数字转为汉字的方法调用 请看我另一篇文章https://www.jianshu.com/p/1e7...

  • 【Swift】语音播报数字转汉字

    最近项目需求,要求做语音播报。播报的部分 百度一大堆,我们采用多个语音文件合成+推送扩展的方式。这就涉及到把数字转...

  • 后台推送-语音播报

    语音播报功能的实现必须是推送加语音合成,选择的推送是极光推送,本文最终实现的效果即使APP被杀死也可以进行语音播报...

  • 智能语音客服服务助手

    智能语音客服服务助手 语音识别 阿里语音识别 百度语音识别 讯飞语音识别 语音合成 阿里语音合成 百度语音合成 讯...

  • iOS语音合成

    标签:ios语音合成 苹果公司在iOS7中推出了语音合成的技术,无需网络环境也可以实现语音合成。 iOS7语音合成...

  • 2022-05-05《当产品经理遇到人工智能》读书笔记08 语音

    语音合成技术产品应用 1、让机器能够通过语音的方式与人沟通的技术,就是语音合成技术TSS 2、认识语音合成技术...

  • 百度AI 2018-10-16

    安装baidu-aip:pip install baidu-aip语音合成 语音识别 利用语音识别和语音合成实现学...

  • API调用代码

    一、语音合成API调用 1.1、语音合成API调用代码 1.2、语音合成API调用结果代码 1.3.调用结果文件 ...

  • 语音识别&语音合成

    语音识别: 概念:以语音为研究对象,通过特征提取和模式匹配等技术手段让机器自动识别人类的语言。 流程:声音的输入-...

  • 语音识别_语音合成

    Speech.Framework了解 Speech.Framework框架轻量级语音库,在学习Speech.Fra...

网友评论

    本文标题:语音推送的多个语音合成部分

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