0

xcodeでiosオーディオアプリを開発しています.録音した2つのオーディオファイルを同時に再生して1つのオーディオファイルにエクスポートしようとしています. 2 つのオーディオ ファイルを 1 つにマージすることしかできませんでしたが、2 つのオーディオが次々に再生され、同時に同期していません。誰かが私がそれを整理する方法を知っていますか? ありがとう

4

3 に答える 3

1

Try Apple's MixerHost sample app.

于 2012-06-24T14:18:27.057 に答える
1

AAC 変換については、こちらをご覧ください (http://atastypixel.com/blog/easy-aac-compressed-audio-conversion-on-ios/)。とても便利です。

もう 1 つ考慮すべきことがあります... 2 つのオーディオ信号を結合することは、サンプルを一緒に追加するのと同じくらい簡単です。だからあなたができることは次のとおりです:

両方の録音を開き、オーディオ サンプルを保持する各録音の配列を取得します。

各サンプルを追加して出力配列に入れる for() ループを作成します

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

次に、exportBuffer を m4a ファイルに書き込みます。

このコードは、2 つのファイルの長さがまったく同じ場合にのみ機能するため、必要に応じて調整してください。いずれかの配列の終わりに達した場合に発生する条件を追加する必要があります。その場合は、0 を追加してください。

于 2012-06-25T06:21:09.987 に答える
-1

/* 録音したオーディオ ファイルを既に保存している場合は、このメソッドを実装します */

-(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);
    }
}];
}
于 2014-05-02T14:20:55.717 に答える