2012-07-17 151 views
1

可能重複:
merge Audio files on iPhone合併兩個音頻文件合併爲一個目標C

我想2個音頻文件合併成一個文件。 例如:file1.mp3 - 它說「我是」。 file2.mp3 - 它說「喬治」。 我想要一個組合文件file3.mp3,它會說「我是喬治」。

我該如何在Objective-C中做到這一點?

+0

我看到了這個文檔。有合併而不合並。我想在file3之後​​成爲file1之後的file2。 – Rendel 2012-07-17 09:52:21

+1

只是一個快速提示:我不會在這裏使用'.mp3'。它是一種許可證保護的文件格式,如果您的應用程序獲得超過1000個用戶,突然您需要向Fraunhofer Gesellschaft支付版稅。 – 2012-07-17 11:42:10

+0

如果只播放,可以嗎? (使用Apple的框架) – 2012-07-17 12:26:04

回答

11

AVFoundation框架......有很多種方式,但最簡單的一個,你可以...

  • 創建AVAsset兩個文件(使用AVURLAsset子類) ,
  • ALLOC AVMutableComposition組合物),
  • 添加AVM從第一AVAsset utableCompositionTrack類型AVMediaTypeAudio組合物

[composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

  • 獲取軌道(一個或多個),並將其添加AVMutableCompositionTrack
  • GET音軌從第二個AVAsset並將其追加到AVMutableCompositionTrack
  • 然後創建AVAssetExportSession與您的組成並導出它。

簡化的描述,但你得到一個線索。取決於有多少的軌道,你有,你想用做什麼樣的影響等

如果你想看到一些實際的代碼,開放AVMovieExporter例如,複製此代碼,並刪除視頻的東西,離開那裏只有音頻。

+0

tnx爲您的答案。 你能寫一些代碼嗎?我有2個文件:file1,mp3和file2.mp3。我只需要將它們結合起來(先播放file1然後file2) – Rendel 2012-07-17 10:27:12

+13

對不起,我不會爲你寫代碼。這是你的任務,我告訴你如何做到這一點,以及在哪裏可以找到已經編寫代碼的例子,在這裏你可以清除視頻部分,並得到你想要的東西。 – robertvojta 2012-07-17 10:39:33

+0

我已經完成了2個步驟。但我不能添加類型AVMediaTypeAudio AVMutableCompositionTrack。它說錯誤不明確AVMediaTypeAudio – Rendel 2012-07-17 10:57:23

0

另一種方法是使用AVAssetReader將所有mp3文件轉換爲未壓縮的音頻文件,如果音頻足夠短,甚至可以使用內存緩衝區。未壓縮的PCM數據可以根據需要進行串接,混合或交叉淡入。然後使用AVAssetWriter將結果寫入某種壓縮文件格式(如aac)(如果需要的話)。

+0

好的。謝啦。 – Rendel 2012-07-18 11:57:37

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文件馬上追加到一個。我在我的一個應用程序中使用過它。對於需要分別更新文件頭部的其他格式而言,它會變得有點複雜,但對於mp3來說則相對簡單。

UPDATE:

那麼你也必須要小心,你正試圖以連接mp3文件的比特率相同。如果他們不同,他們會合並,但只會部分或根本不會。所以請確保比特率彼此同步。

+0

哇真的有用嗎?而且只是MP3文件的一個屬性? – 2012-08-08 11:02:48

+0

MP3文件是音頻流文件。因此,將一個文件附加到另一個文件將解決您的要求。嘗試一下。它應該工作。 – 2012-08-13 08:51:11

+0

即使有兩個音頻文件具有相同的比特率,這也不起作用,只有第一個MP3播放我的情況。 – Fatso 2012-12-23 21:17:29

相關問題