3

重複の可能性:
iPhone でオーディオ ファイルを結合する

2 つのオーディオ ファイルを 1 つのファイルに結合しようとしています。例: file1.mp3 - 「私は」と表示されます。file2.mp3 - 「George」と表示されます。「私はジョージです」という結合ファイル file3.mp3 を取得したいと考えています。

Objective-Cでこれを行うにはどうすればよいですか?

4

3 に答える 3

12

AVFoundationフレームワークを見てください...多くの方法がありますが、最も簡単な方法は...

  • 両方のファイルにAVAssetを作成します ( AVURLAssetサブクラスを使用します)。
  • alloc AVMutableComposition (コンポジション),
  • タイプAVMediaTypeAudioのAVMutableCompositionTrackコンポジションに追加します

[composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

  • 最初の AVAsset からトラックを取得し、それをAVMutableCompositionTrackに追加します。
  • 2 番目のAVAssetからトラックを取得し、それをAVMutableCompositionTrackに追加します。
  • 次に、コンポジションでAVAssetExportSessionを作成し、エクスポートします。

簡単な説明ですが、ヒントは得られます。トラックの数、使用するエフェクトの種類などによって異なります。

実際のコードを確認したい場合は、AVMovieExporter の例を開いて、このコードをコピーし、ビデオを削除してオーディオのみを残してください。

于 2012-07-17T10:24:32.413 に答える
1

次のように 2 つの mp3 ファイルをマージできます。

  NSMutableData *part1 = [NSMutableData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"file1" ofType: @"mp3"]];

  NSMutableData *part2 = [NSMutableData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"file2" ofType: @"mp3"]];

 [part1 appendData: part2];

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsDir = [paths objectAtIndex:0];
    NSString *myMp3 = [documentsDir stringByAppendingPathComponent: @"final.mp3"];

    [part1 writeToFile:myMp3 atomically:YES];

このようにして、mp3 ファイルを 1 つにすぐに追加できます。アプリの1つで使用しました。ファイルのヘッダーをそれぞれ更新する必要がある他の形式では少し複雑になりますが、mp3 では比較的簡単です。

アップデート:

連結しようとしている mp3 ファイルのビット レートが同じであることにも注意する必要があります。それらが異なる場合、それらはマージされますが、部分的にしか再生されないか、まったく再生されない可能性があります。したがって、ビットレートが互いに同期していることを確認してください。

于 2012-08-07T11:24:32.397 に答える
0

代替手段の 1 つは、AVAssetReader を使用して、すべての mp3 ファイルを非圧縮のオーディオ ファイルに変換することです。オーディオが十分に短い場合は、メモリ バッファーに変換することもできます。圧縮されていない PCM データは、必要に応じて連結、混合、またはクロスフェードすることができます。次に、AVAssetWriter を使用して、必要に応じて結果を圧縮ファイル形式 (aac など) に書き込みます。

于 2012-07-17T17:05:52.567 に答える