我試圖合併Objective-C項目中的2個.wav文件。這個想法是我想讓它輸出:file1 +(file2 - header)。在這種情況下,必須更改第一個文件的標題以反映新的大小。如果第一個文件是空的(所以只有第一次)我希望該方法作爲一個整體返回第二個文件,但在文件1 url中。現在,我有:合併WAV文件時,NSURL返回Invalid Summary
+(NSURL *)mergeFile1:(NSURL *)file1 withFile2:(NSURL *)file2 {
if(file1 == nil) {
return [file2 copy];
}
NSData * wav1Data = [NSData dataWithContentsOfFile:[file1 absoluteString]];
NSData * wav2Data = [NSData dataWithContentsOfFile:[file2 absoluteString]];
int wav1DataSize = [wav1Data length] - 46;
int wav2DataSize = [wav2Data length] - 46;
[NSMutableData dataWithData:[wav1Data subdataWithRange:NSMakeRange(46, wav1DataSize)]];
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(@"%d", totalLength);
[soundFileData replaceBytesInRange:NSMakeRange(4, 4) withBytes:[NSString stringWithFormat:@"%X", totalLength-8]];
[soundFileData replaceBytesInRange:NSMakeRange(42, 4) withBytes:[NSString stringWithFormat:@"%X", totalLength]];
[soundFileData writeToURL:file1 atomically:YES];
return [file1 copy];
}
我這樣稱呼它:
if(soundFileURL != nil) {
NSURL *tempURL = [WavUtils mergeFile1:finalSoundFileURL withFile2:soundFileURL];
if(tempURL != nil) {
NSLog(@"Wav files have been merged.");
finalSoundFileURL = [tempURL copy];
[soundFileURL release];
soundFileURL = nil;
} else {
NSLog(@"Wav files could not be merged.");
}
}
的finalSoundFileURL的定義是這樣的:
@interface class : UIViewController
....
NSURL *soundFileURL;
NSURL *finalSoundFileURL;
....
}
我已經對現在的問題是,tempURL
會返回正確,但是當我做finalSoundFileURL = [tempURL copy];
finalSoundFileURL
將在調試時說「Invalid Summary」。 tempURL將提供正確的URL。我無法在網址中播放wav,所以有些顯然是錯誤的。
任何人都有一個想法是怎麼回事,因爲我不明白是怎麼回事。任何幫助表示讚賞!
編輯
我做了什麼樣的調試器顯示了一些截圖。如下圖爲tempURL只是罰款:
的finalSoundFileURL在確切的同一時刻(臨時複製到最後一節之後)表明這一點:
這是很大的謎我。這讓我想知道爲什麼它是無效的?它剛剛被複制(所以它有自己的內存空間),並且沒有發佈對它的調用!如果我錯了,請糾正我。
我每天都在檢查這個問題,所以問我任何你需要知道的東西^ _^ – Manuel 2011-12-19 21:30:06
你在哪裏聲明/分配finalSoundFileURL?是否有可能過度釋放它? – 2011-12-19 21:49:49