Objective-Cプロジェクト内で2つの.wavファイルをマージしようとしています。私はそれがこの出力を与えることを考えています:file1 +(file2 - header)。その場合、新しいサイズを反映するために最初のファイルのヘッダーを変更する必要があります。最初のファイルが空の場合(初めての場合のみ)、メソッドは2番目のファイルを全体として返しますが、ファイル1のURLに返します。今私が持っている:WAVファイルをマージすると、NSURLが無効なサマリを返します
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は次のように定義されています:
+(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];
}
が、私はこのようにそれを呼び出す
@interface class : UIViewController
....
NSURL *soundFileURL;
NSURL *finalSoundFileURL;
....
}
私が今持っている問題は、tempURL
ます正しく返されますが、私がfinalSoundFileURL = [tempURL copy];
を実行すると、finalSoundFileURL
はデバッグ中に「無効な要約」と表示されます。 tempURLは正しいURLを返します。私はURLの中でwavを再生することはできませんので、何かが間違っています。
何が起こっているのか分かりません。どんな助けもありがとう!
EDIT
は私が何デバッガショーのいくつかのスクリーンショットを作りました。下の写真はtempURLだけで結構です示したよう:(一時は最後の1にコピーされた後)は、まったく同じ瞬間に
finalSoundFileURLはこれを示しています
これはのための大きな謎であります私。これは私に不思議にさせる、それはなぜ無効ですか?それはちょうどコピーされているので(それ自身のメモリ空間を持っています)、リリースされていません!私がこれに間違っているなら、私を修正してください。
私は毎日この質問をチェックしていますので、知りたいことを聞いてください^ _^ – Manuel
finalSoundFileURLはどこに宣言しますか?あなたはそれを過剰にリリースする可能性はありますか? –
変数が一時停止している場所を基準にスコープ外にある場合、デバッガに「無効なサマリー」が表示されます。 'finalSoundFilaURL' NSURL変数はどこに定義されていますか? '[soundFileURL release]に割り当てた後にブレークポイントを設定し、その時点で何が表示されているのかを確認してください。 – Jessedc