我第一次調用此方法file1
將是零和file2
將被退回。當這個hapen文件將會正常播放(所以這個方法的調用應該沒問題)。但是當我第二次打電話時,它會返回AVAudioPlayer無法播放的NSURL
。我的猜測是我錯過了標題中的內容。在調試模式下,我看到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個字節。我已經嘗試了兩個。
編輯
我已經看過其中包含了很多不錯的東西,我可能想使用Audio File Services Reference,但我無法弄清楚如何使用這一切。我真的不知道c。希望任何人都可以幫我解決這個問題。
編輯
合併wav文件的例子在這裏找到:7--443522512
轉播? http://stackoverflow.com/questions/8535380/nsurl-returns-invalid-summary-when-merging-wav-files/8569393 – 2011-12-29 00:51:48
您是否嘗試過在模擬器上運行時,WAV保存到一個文件,然後試圖發揮它在其他一些球員? – 2011-12-29 00:52:55
@MattiasWadman它不是一個重新發布與一個我試圖找到一種方法來擺脫內存的問題,但是這一個是所有的固定,我試圖讓WAV播放。似乎一樣,是不同的。 我還沒有嘗試過,現在就試試。 – Manuel 2011-12-29 08:39:29