2011-09-25 16 views
2

まず、すべてのオーディオファイルデータをNSData変数に入れることで、オーディオファイルを操作するビットオフコードがあります。しかし、それは非常にRAMにNSDataを効率的に使用する

NSData *data1 = [NSData dataWithContentsOfFile: someFile]; 

を使用していますので、私はすべてのものがリリースされていたことと、RAMが使用されていたどのように楽器を使用してチェックしていると私はオーディオファイルが大きいにあるとき、それはちょうど時々クラッシュすることを考え出し時々クラッシュします。データを小さなビットで保存する方法やフラッシュで保存する方法や、iPhoneの最大RAMを超えないで大きなファイルを扱う方法がありますか?例えばNSDataのを使用して

一つイムは、このような2つのファイルを連結している。

[data1 appendData: data2]; 

おかげ

答えて

1

小さいビットまたはフラッシュまたは私はiPhone上の最大RAMを超えることなく、大きなファイルで作業できるようになり、他の方法でデータを保存する方法はあります。

もちろんです。問題はより多くの基本的なNSDataです - 特に、デバイスにはほとんどメモリがない場合、(全体で)一連のオーディオファイルをメモリに読み込まないでください。 osxでもファイル全体を読み込むのは普通ではありません。ファイルが非常に小さいことが分かっていない限り、たくさんのメモリを持つことができます。これは、オーディオファイルapiがあなたがブロックで読み書きできるようにする理由です(ref:ExtAudioFileReadまたはAudioFileReadPackets)。

+1

ありがとう、apisについて考えなかった。私はまだそれを試していないが、私はそれが動作するはずだから何を参照してください。 – user591375

+0

何年も前から多くのオーディオプログラムを書いた人から来ています。心配しないでください。どういたしまして – justin

4

は(このSO質問から)これを試してみてください:

NSData* myBlob; 
NSUInteger length = [myBlob length]; 
NSUInteger chunkSize = 100 * 1024; 
NSUInteger offset = 0; 
do { 
    NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset; 
    NSData* chunk = [NSData dataWithBytesNoCopy:(void*)[myBlob bytes] + offset 
                                         length:thisChunkSize 
                                   freeWhenDone:NO]; 
    offset += thisChunkSize; 
    // do something with chunk 
} while (offset < length); 

次に、あなたを小さなチャンクをどこかに保存して、後で連結しておきたいことをすることができます。

これは私の目的ではすべてテストされていませんが、妥当と思われます。

関連する問題