iOSアプリを作っています。その機能の 1 つは、レコードを保存し、オーディオ ファイルを保存できることです。
録音したオーディオ ファイルの URL を保存するために、次のようにファイル パスとして NSUserDefaults に保存します。
file:///var/mobile/Containers/Data/Application/17F8E799-D7E1-4B3C-9DFE-7BA48E346314/Documents/recordName.aif
「FVSoundWaveDemo」というライブラリを使用して、録音したファイルの音波を表示しようとしています。しかし、URLに問題があります...
「FVSoundWaveDemo」の例では、ローカルにインポートされたファイルを次のようにロードします。
NSString* filename = [NSString stringWithFormat:@"song1.m4a"];
NSURL* url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:filename ofType:nil]];
_soundWaveView.soundURL = url;
「song1.m4a」というビットが表示されますが、それを置き換えて、アプリが代わりに filePath URL を使用するようにしたいと考えています。上記の質問で表示した filePath URL のように。
filePath を通常の URL に「変換」しようとしたり、AVAssets を使用しようとしたりするなど、あらゆる種類のことを試しました。しかし、私が試したことはすべて、このエラーが発生するだけです:
キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: '*** -[__NSArrayM objectAtIndex:]: インデックス 0 が空の配列の境界を超えています'
これは、私が使用しているライブラリが AVAssets を次のように使用するためです。
AVAssetReader* reader = [[AVAssetReader alloc] initWithAsset:songAsset error:&error];
AVAssetTrack* songTrack = [songAsset.tracks objectAtIndex:0];
NSDictionary* outputSettingsDict = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithInt:kAudioFormatLinearPCM],AVFormatIDKey,
[NSNumber numberWithInt:1],AVNumberOfChannelsKey,
[NSNumber numberWithInt:8],AVLinearPCMBitDepthKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
[NSNumber numberWithBool:NO],AVLinearPCMIsNonInterleaved,
nil];
では、どうすれば AVAsset を filePath URL だけで動作させることができるでしょうか?
開発者がXcodeプロジェクトに追加できるローカルにインポートされたオーディオファイルではなく、アプリによって保存された録音されたオーディオファイルを表示しようとしていることに注意してください。
私はこれで何日も立ち往生しています。あなたが私を助けることができれば、それは大歓迎です、ありがとう.
時間をありがとう、ダン。