Я давно почесал голову, но никак не мог обойтись. Я не нашел ни одного примера для редактирования аудио! Я хочу вставить новый аудиофайл между оригинальными аудиофайлами и сохранить их как новые преобразованные аудиофайлы.
Для этого я написал следующий код. Я получил эту идею от здесь .
NSString *file1 = [[NSBundle mainBundle] pathForResource:@"file1" ofType:@"caf"]; // Using PCM format
NSString *file2 = [[NSBundle mainBundle] pathForResource:@"file2" ofType:@"caf"];
NSData *file1Data = [[NSData alloc] initWithContentsOfFile:file1];
NSData *file2Data = [[NSData alloc] initWithContentsOfFile:file2];
NSMutableData *mergedData =[[NSMutableData alloc] initWithCapacity:([file1Data length] + [file2Data length])];
// First chunk from original sound file
NSRange firstChunk;
firstChunk.length = startingPosition;
firstChunk.location = 0;
[mergedData appendData:[file1Data subdataWithRange:firstChunk]];
// Add new sound
[mergedData appendData:file2Data];
// First chunk from original sound file
NSRange secondChunk;
secondChunk.length = [file1Data length] - startingPosition;
secondChunk.location = startingPosition;
[mergedData appendData:[file1Data subdataWithRange:secondChunk]];
NSLog(@"File1: %d, File2: %d, Merged: %d", [file2Data length], [file2Data length], [mergedData length]);
// Convert mergedData to Audio file
[mergedData writeToFile:[self filePath:@"converted.caf"] atomically:YES];
[file1Data release];
[file2Data release];
[mergedData release];
Использование следующего кода для воспроизведения преобразованного звукового файла:
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:[NSURL URLWithString:[self filePath:@"converted.caf"]] error:nil];
[audioPlayer prepareToPlay];
[audioPlayerr play];
Преобразованный файл не воспроизводится. Дальнейшие исследования этого я обнаружил, что преобразование звука в NSData усекает заголовок / колонтитул звука. Это правильно? Может кто-нибудь, пожалуйста, помогите мне разобраться, пожалуйста.
Спасибо.