-3

複数のオーディオ ファイルをミックスしてオーディオを録音する必要があります。たとえば、3 つのオーディオ ファイルが再生されている場合、再生中のすべてのオーディオのサウンドをミックスして、1 つのオーディオ ファイルに録音する必要があります。それを達成するための作業コードがあれば、これで私を助けてください。

前もって感謝します !!

4

1 に答える 1

0

私はあなたが求めていることを理解していると思います。

利用可能な 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
}];
于 2012-12-19T05:27:32.713 に答える