В первый раз, когда я назову этот метод file1
будет nil и будет возвращен file2
. Когда это произойдет, файл будет воспроизводиться нормально (так что вызов этого метода должен быть прекрасным). Но когда я назову его во второй раз, он вернет NSURL
, который не воспроизводит AVAudioPlayer. Думаю, я пропустил что-то в заголовке. В режиме отладки я видел, что totalLength
точно соответствует длине данных.AVAudioPlayer отказывается воспроизводить измененный wav-файл
+(NSURL *)mergeFile1:(NSURL *)file1 withFile2:(NSURL *)file2 {
if(file1 == nil) {
return [file2 copy];
}
NSData * wav1Data = [NSData dataWithContentsOfURL:file1];
NSData * wav2Data = [NSData dataWithContentsOfURL:file2];
int wav1DataSize = [wav1Data length] - 46;
int wav2DataSize = [wav2Data length] - 46;
if (wav1DataSize <= 0 || wav2DataSize <= 0) {
return nil;
}
NSMutableData * soundFileData = [NSMutableData dataWithData:[wav1Data subdataWithRange:NSMakeRange(0, 46)]];
[soundFileData appendData:[wav1Data subdataWithRange:NSMakeRange(46, wav1DataSize)]];
[soundFileData appendData:[wav2Data subdataWithRange:NSMakeRange(46, wav2DataSize)]];
unsigned int totalLength = [soundFileData length];
NSLog(@"Calculated: %d - Real: %d", totalLength, [soundFileData length]);
[soundFileData replaceBytesInRange:NSMakeRange(4, 4)
withBytes:&(UInt32){NSSwapHostIntToLittle(totalLength-8)}];
[soundFileData replaceBytesInRange:NSMakeRange(42, 4)
withBytes:&(UInt32){NSSwapHostIntToLittle(totalLength)}];
[soundFileData writeToURL:file1 atomically:YES];
return [file1 copy];
}
Если кто-нибудь увидит что-то, что может помочь, это было бы очень признательно! На все вопросы будет дан ответ как можно скорее.
EDIT
Я знаю, что есть 2 вида Wav заголовков: 44 байт или 46 байт. Я пробовал и то, и другое.
EDIT
Я посмотрел на Audio File Services Reference, который содержит много хороших вещей я мог бы хотеть использовать, но я не могу понять, как использовать все это. Я не знаю с. Надеюсь, кто-нибудь сможет мне помочь.
EDIT
Пример объединенного файл WAV находится здесь: 7--443522512
перепечатывать? http://stackoverflow.com/questions/8535380/nsurl-returns-invalid-summary-when-merging-wav-files/8569393 –
Вы пробовали сохранить wav в файл при работе в симуляторе, а затем попытались воспроизвести его в каком-то другом игроке? –
@MattiasWadman Это не repost, как с этим я пытался найти способ избавиться от проблемы с памятью, но с этим, который все исправлен, и я пытаюсь заставить wav играть. Кажется то же, другое. Я этого не пробовал, попробую это сейчас. – Manuel