最後の数日私はユーザーのオーディオを録音し、その中にバックグラウンドミュージックを保存する必要があるiphoneアプリケーションで作業しています2つのオーディオファイルを追加することで簡単な言葉で3番目のオーディオファイルを生成します 私はそれをやろうとしますAudioToolBox APIを使用していますが、その中で成功していないと、いずれかの提案が私に正しい方向を示唆しています。バックグラウンドミュージックでオーディオを録音するには?
おかげで、
最後の数日私はユーザーのオーディオを録音し、その中にバックグラウンドミュージックを保存する必要があるiphoneアプリケーションで作業しています2つのオーディオファイルを追加することで簡単な言葉で3番目のオーディオファイルを生成します 私はそれをやろうとしますAudioToolBox APIを使用していますが、その中で成功していないと、いずれかの提案が私に正しい方向を示唆しています。バックグラウンドミュージックでオーディオを録音するには?
おかげで、
あなたはこれを行うための任意の事前圧延ツールを見つけることができませんが、あなたがダウンして記録ビットを得れば、それはあまりにも難しいことではありません。その後、生のサンプルを一緒に追加するだけで、ファイルをバックグラウンドミュージックとミックスする必要があります。
この部分が機能するには、使用している圧縮形式からバックグラウンドミュージックをデコードして、PCMを生かす必要があるため、サンプルを直接操作できます。私はiOSの開発を行って以来長い間経っていますので、iOS SDKがこれを直接行うことができるのか、libffmpegをあなたのコード(またはそれに似たもの)と共にバンドルする必要があるのかどうかはわかりません。しかしIIRCでは、iPhoneは圧縮されたオーディオのPCMへのデコードをサポートしていますが、エンコードはしていません。
そうでなければ、圧縮された(zip形式、mp3/aac/ogg/whateverの)生のPCMファイルをあなたのアプリに配布し、それらを解凍してサンプルデータを直接取得することができます。
最終的なミックスダウンが完了したら、生のPCMとして再生デバイスに直接戻すことができます。保存またはエクスポートする必要がある場合は、再度デコード/エンコードライブラリを参照する必要があります。
この問題の経験から言えば、背景音楽とミキシングする前に、基本的な処理をボーカルに施したいと思うかもしれません。まず、バックグラウンドトラックを-3dB(またはそれ以上)に正規化して、ユーザーの声が音楽に耳を傾けるようにします。次に、ハイパスフィルタをボーカルに適用して、60Hz以下の周波数をすべて除去してください。風やその他のバックグラウンドノイズは、iPhoneのマイクで拾うことができます。最後に、ボーカルサンプルにcompression + limiterを適用して、静かなストレッチの間にボーカルを少し聴きやすくしたい場合があります。
あなたが聞いた質問は、単に「mixdownTracksTogether()関数を使用する」とは単純ではありませんが、他のツールや関数を連鎖させることで間違いなく機能します。これが正しい軌道に乗ることを願っています!
あなたは
- (BOOL) combineVoices1
{
NSError *error = nil;
BOOL ok = NO;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
CMTime nextClipStartTime = kCMTimeZero;
//Create AVMutableComposition Object.This object will hold our multiple AVMutableCompositionTrack.
AVMutableComposition *composition = [[AVMutableComposition alloc] init];
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack setPreferredVolume:0.8];
NSString *soundOne =[[NSBundle mainBundle]pathForResource:@"test1" ofType:@"caf"];
NSURL *url = [NSURL fileURLWithPath:soundOne];
AVAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
NSArray *tracks = [avAsset tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *clipAudioTrack = [[avAsset tracksWithMediaType:AVMediaTypeAudio] 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.3];
NSString *soundOne1 =[[NSBundle mainBundle]pathForResource:@"test" ofType:@"caf"];
NSURL *url1 = [NSURL fileURLWithPath:soundOne1];
AVAsset *avAsset1 = [AVURLAsset URLAssetWithURL:url1 options:nil];
NSArray *tracks1 = [avAsset1 tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *clipAudioTrack1 = [[avAsset1 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack1 atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *compositionAudioTrack2 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack2 setPreferredVolume:1.0];
NSString *soundOne2 =[[NSBundle mainBundle]pathForResource:@"song" ofType:@"caf"];
NSURL *url2 = [NSURL fileURLWithPath:soundOne2];
AVAsset *avAsset2 = [AVURLAsset URLAssetWithURL:url2 options:nil];
NSArray *tracks2 = [avAsset2 tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *clipAudioTrack2 = [[avAsset2 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset2.duration) ofTrack:clipAudioTrack2 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);
}
}];
return YES;
}
によってこれを行うことができます