複数のオーディオ ファイルをミックスしてオーディオを録音する必要があります。たとえば、3 つのオーディオ ファイルが再生されている場合、再生中のすべてのオーディオのサウンドをミックスして、1 つのオーディオ ファイルに録音する必要があります。それを達成するための作業コードがあれば、これで私を助けてください。
前もって感謝します !!
複数のオーディオ ファイルをミックスしてオーディオを録音する必要があります。たとえば、3 つのオーディオ ファイルが再生されている場合、再生中のすべてのオーディオのサウンドをミックスして、1 つのオーディオ ファイルに録音する必要があります。それを達成するための作業コードがあれば、これで私を助けてください。
前もって感謝します !!
私はあなたが求めていることを理解していると思います。
利用可能な 3 つのトラックを使用して 1 つのトラックを作成したいとします。現在、オーディオ ファイルを使用しようとしても再生できず、ロックされています。
AVMutableComposition を使用し、すべてのトラックを AVURLAssets としてロードしてから結合します。ここでは、1 つのファイルを別のファイルに追加するためのコードしか記述していないため、この例は完全ではありませんが、正しい方向を示しているはずです。
// Generate a composition of the two audio assets that will be combined into
// a single track
AVMutableComposition* composition = [AVMutableComposition composition];
AVMutableCompositionTrack* audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
// grab the two audio assets as AVURLAssets according to the file paths
AVURLAsset* masterAsset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:self.masterFile] options:nil];
AVURLAsset* activeAsset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:self.newRecording] options:nil];
NSError* error = nil;
// grab the portion of interest from the master asset
[audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, masterAsset.duration)
ofTrack:[[masterAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
atTime:kCMTimeZero
error:&error];
if (error)
{
// report the error
return;
}
// append the entirety of the active recording
[audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, activeAsset.duration)
ofTrack:[[activeAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
atTime:masterAsset.duration
error:&error];
if (error)
{
// report the error
return;
}
// now export the two files
// create the export session
// no need for a retain here, the session will be retained by the
// completion handler since it is referenced there
AVAssetExportSession* exportSession = [AVAssetExportSession
exportSessionWithAsset:composition
presetName:AVAssetExportPresetAppleM4A];
if (nil == exportSession)
{
// report the error
return;
}
NSString* combined = @"combined file path";// create a new file for the combined file
// configure export session output with all our parameters
exportSession.outputURL = [NSURL fileURLWithPath:combined]; // output path
exportSession.outputFileType = AVFileTypeAppleM4A; // output file type
[exportSession exportAsynchronouslyWithCompletionHandler:^{
// export status changed, check to see if it's done, errored, waiting, etc
switch (exportSession.status)
{
case AVAssetExportSessionStatusFailed:
break;
case AVAssetExportSessionStatusCompleted:
break;
case AVAssetExportSessionStatusWaiting:
break;
default:
break;
}
NSError* error = nil;
// your code for dealing with the now combined file
}];