Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将2个音频曲目(同时运行)导出到一个文件(m4a)_Ios_Xcode_Audio_Export_Avfoundation - Fatal编程技术网

Ios 将2个音频曲目(同时运行)导出到一个文件(m4a)

Ios 将2个音频曲目(同时运行)导出到一个文件(m4a),ios,xcode,audio,export,avfoundation,Ios,Xcode,Audio,Export,Avfoundation,我正在xcode上开发一个ios音频应用程序,我正在尝试使用我录制的两个音频文件——它们同时播放并导出到一个音频文件。 我所能做的就是将两个音频文件合并到一个文件中,但是这两个音频一个接一个地播放,并且不同步。 有人知道我该怎么解决吗? 感谢您尝试苹果的示例应用程序。您应该看看这个AAC转换程序(http://atastypixel.com/blog/easy-aac-compressed-audio-conversion-on-ios/). 它非常有用 另一件你可能要考虑的事情…组合两个音频信

我正在xcode上开发一个ios音频应用程序,我正在尝试使用我录制的两个音频文件——它们同时播放并导出到一个音频文件。 我所能做的就是将两个音频文件合并到一个文件中,但是这两个音频一个接一个地播放,并且不同步。 有人知道我该怎么解决吗?
感谢您尝试苹果的示例应用程序。

您应该看看这个AAC转换程序(http://atastypixel.com/blog/easy-aac-compressed-audio-conversion-on-ios/). 它非常有用

另一件你可能要考虑的事情…组合两个音频信号就像将样本相加一样简单。所以你可以做的是:

打开这两个录音,并为保存音频样本的每个录音获取一个数组

创建一个for()循环,用于添加每个样本并将其放入输出数组中

for(int i = 0; i<numberOfSamples; i++) {
   exportBuffer[i] = firstTrack[i] + secondTrack[i];
}

for(int i=0;i/*如果您已经保存了录制的音频文件,请执行此方法*/

-(void)mixAudio{
AVMutableComposition *composition = [[AVMutableComposition alloc] init];

AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack setPreferredVolume:0.8];
NSString *soundOne  =[[NSBundle mainBundle]pathForResource:@"RecordAudio1" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:soundOne];
AVAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
NSArray *tracks = [avAsset tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *clipAudioTrack = [tracks objectAtIndex:0];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack atTime:kCMTimeZero error:nil];

AVMutableCompositionTrack *compositionAudioTrack1 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack setPreferredVolume:0.8];
NSString *soundOne1  =[[NSBundle mainBundle]pathForResource:@"RecordAudio2" ofType:@"wav"];
NSURL *url1 = [NSURL fileURLWithPath:soundOne1];
AVAsset *avAsset1 = [AVURLAsset URLAssetWithURL:url1 options:nil];
NSArray *tracks1 = [avAsset1 tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *clipAudioTrack1 = [tracks1 objectAtIndex:0];
[compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset1.duration) ofTrack:clipAudioTrack1 atTime: kCMTimeZero error:nil];

  AVAssetExportSession *exportSession = [AVAssetExportSession
                                           exportSessionWithAsset:composition
                                           presetName:AVAssetExportPresetAppleM4A];
    if (nil == exportSession) return NO;

NSString *soundOneNew = [documentsDirectory stringByAppendingPathComponent:@"combined10.m4a"];
//NSLog(@"Output file path - %@",soundOneNew);

// configure export session  output with all our parameters
exportSession.outputURL = [NSURL fileURLWithPath:soundOneNew]; // output path
exportSession.outputFileType = AVFileTypeAppleM4A; // output file type

// perform the export
[exportSession exportAsynchronouslyWithCompletionHandler:^{

    if (AVAssetExportSessionStatusCompleted == exportSession.status) {
        NSLog(@"AVAssetExportSessionStatusCompleted");
    } else if (AVAssetExportSessionStatusFailed == exportSession.status) {
        // a failure may happen because of an event out of your control
        // for example, an interruption like a phone call comming in
        // make sure and handle this case appropriately
        NSLog(@"AVAssetExportSessionStatusFailed");
    } else {
        NSLog(@"Export Session Status: %d", exportSession.status);
    }
}];
}

谢谢你的反馈。我确实设法同时播放了两个音频文件。我无法将其导出到一个文件。在“Mixerhost”上找不到任何有关导出的信息看看这是否有帮助:谢谢@Kpmuphy你的评论真的救了我!没问题!我应该补充一件事…如果两个音频文件都足够大,结果文件可能会失真,因此你可能需要执行以下操作:exportBuffer[I]=firstTrack[I]*0.5+secondTrack[I]*0.5我认为,如果您使用整数来表示音频样本,这是一个值得关注的问题,但需要考虑一些问题。谢谢,伙计,我们实际上使用了Michael Tylor(您提供给我们的那个人)的API他很棒,我们最终成功地在线导出了2个音频。现在我们正试图弄清楚如何才能使其脱机。好的,我的输出成功保存在exportbuffer中,但我如何将这个字节[]转换为音频流?