我正在開發一個ios音頻應用程序在xcode上,我試圖使用2個音頻文件我記錄 - 這是在同一時間播放並將其導出到一個音頻文件。 我所做的一切都是將2個音頻文件合併爲一個音頻文件,但是這兩個音頻播放的是一個接一個,而不是同時播放。 有沒有人有線索我怎麼能解決它? 謝謝導出2個音軌(同時運行)到一個文件m4a)
回答
你應該看看這個AAC轉換(http://atastypixel.com/blog/easy-aac-compressed-audio-conversion-on-ios/)。這是非常有用的。
您可能想要考慮的另一件事是......將兩個音頻信號合併在一起很容易。所以你可以做什麼是:
打開兩個錄音,並獲得一個數組爲每個錄音保存音頻樣本。
使一個for()循環,增加了每個樣品,並將其放在一個輸出陣列
for(int i = 0; i<numberOfSamples; i++) {
exportBuffer[i] = firstTrack[i] + secondTrack[i];
}
然後寫exportBuffer到M4A文件。
如果兩個文件的長度完全相同,則此代碼僅適用於您的需要。如果您已達到其中一個數組的末尾,則需要添加一個條件。在這種情況下,只需加0即可。
嘗試Apple的MixerHost示例應用程序。
感謝您feedback.I做管理的同時播放兩個音頻文件實現此方法。我無法設法將其導出到一個文件。在「Mixerhost」上找不到任何關於導出的內容 – Papito
看看是否有幫助: http://stackoverflow.com/questions/7118429/how-to-record-sound-produced-by-mixer-unit-output-ios- core-audio-audio-graph – user523234
謝謝。這可能有助於 – Papito
/*如果您已經保存您錄製的音頻文件*/
-(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);
}
}];
}
- 1. 運行多個查詢並導出到不同的CSV文件
- 2. 角2:出口導出到一個組件文件
- 3. linux - 運行一個進程並同時拖拽一個文件
- 4. 同時執行2個頭文件
- 5. 從asp.net運行一個宏,同時導出gridview
- 6. 導軌singularize到一/一個
- 7. 導軌2到導軌3
- 8. 同時管多個輸出到同一個文件?
- 9. ExoPlayer - 同時播放兩個音軌
- 10. ffmpeg同時輸出2個不同的音頻文件到不同的輸出設備
- 11. 同時運行2個發佈配置文件?
- 12. 導入並運行一個文件
- 13. 同時運行多個python文件
- 14. 單個MIDI音軌可以同時播放多個音符嗎?
- 15. 在系統運行時正確合併2個Camunda bpmn文件到一個
- 16. 使2個函數同時運行
- 17. 同時運行2個線程
- 18. Arduino同時運行2個命令
- 19. PHP同時運行2個腳本
- 20. 同時運行2個腳本monkeyrunner
- 21. Python同步運行?一次運行一個可執行文件
- 22. 同時運行2個循環來調用另一個函數?
- 23. TCL:運行PROC從同一個文件
- 24. 在同一頁上運行2個jQuery
- 25. 確實imdbpy2sql.py將音軌導出到mysql?
- 26. 在同一臺機器上同時運行2個webdriver實例
- 27. 結果導出到一個txt文件
- 28. 多個HTML5音頻行爲:一個軌道中的時候請
- 29. 如何使用AVAssetExportSession將22kHz的wav文件導出到m4a?
- 30. ffmpeg在一個視頻文件中的2個音頻文件
謝謝@Kpmuphy您的評論實際上拯救了我! – Papito
沒問題!我應該添加的一件事是...如果兩個音頻文件都足夠大,你可能會在結果文件上產生失真,所以你可能想做類似這樣的事情:exportBuffer [i] = firstTrack [i] * 0.5 + secondTrack [i] * 0.5 我認爲這只是一個有效的擔憂,如果您使用整數來表示音頻樣本,但需要考慮的事項。 – Kpmurphy91
感謝隊友我們實際上最終使用了Michael Tylor的API(您提供給我們的那個人),他非常棒,我們最終成功完成了2個音頻的在線導出。現在我們正試圖弄清楚我們該如何讓它脫機。 – Papito