2017-12-14 16 views
1

本質的に私はAVAssetファイルを連結したいと考えています。私は何をすべきかという大まかな考え方を持っていますが、私はオーディオファイルの読み込みに苦労しています。AVAssetトラックが空です

AVAudioPlayerでファイルを再生することができます。私は端末からそれらのファイルを見ることができますが、AVAssetURLをロードしようとすると常にトラック用の空の配列が返されます。

私が使用していますURL:

file:///Users/evolve/Library/Developer/CoreSimulator/Devices/8BF465E8-321C-47E6-BF2E-049C5E900F3C/data/Containers/Data/Application/4A2D29B2-E5B4-4D07-AE6B-1DD15F5E59A3/Documents/temp.pcm 



資産がロードされている:その結果

NSURL *firstAudioFileLocation = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%@", workingDirectory , @"/temp.pcm"]]; 

AVAsset *test = [AVURLAsset URLAssetWithURL:firstAudioFileLocation options:nil]; 

しかし、これを呼び出すとき:

NSLog(@" total tracks %@", test.tracks); 

私の出力は常にtotal tracks()です。

その後、AVMutableCompositionTrackにそれらを追加すると、AVAssetが正しく読み込まれていないように見えて、アプリケーションがクラッシュするようになります。



私は、以下を含む資産をロードするための他のバリエーションを果たしている:

NSURL *alternativeLocation = [[NSBundle mainBundle] URLForResource:@"temp" withExtension:@"pcm"]; 

としてだけでなく、ドキュメントからオプションでAVAssetをロードしようとしている:

NSDictionary *assetOptions = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES}; 



ローカルリソースからトラックをロードするにはどうすればいいですか? AVAudioRecorderさんがお送りしましたか?

EDIT

私の周り突くを持っていたし、私が記録し.CAFファイルの拡張子をロードすることができました。

.PCMはAVAssetではサポートされていないようですが、このページも大きな助けになりました。 https://developer.apple.com/documentation/avfoundation/avfiletype

答えて

2

AVAssetの負荷は瞬時ではありません。データが利用可能になるのを待つ必要があります。例:

AVAsset *test = [AVURLAsset URLAssetWithURL:firstAudioFileLocation options:nil]; 
[test loadValuesAsynchronouslyForKeys:@[@"playable",@"tracks"] completionHandler:^{ 

    // Now tracks is available 
    NSLog(@" total tracks %@", test.tracks); 
}]; 

詳細な例はin the documentationです。

+0

これは大規模に役立ちましたが、空の配列を返します。 AVKeyValueStatusを使用してそれを調べた後、リニアPCMはAVAssetに対してサポートされていないようですか?私は誤解していますが、構成のためにサポートされているタイプのリストはありますか? – Smallbro

+0

.pcmファイルは未処理ですか?これはサポートされているフォーマットではありません(奇妙なことです)、wavヘッダを置くとうまくいきます。 –

関連する問題