iOS 开发每天分享优质文章

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

2018-09-11  本文已影响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`.
            // 播放失败

          }
      }];



}
上一篇 下一篇

猜你喜欢

热点阅读