1

このようなコードを使用したい。

NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
[query setSearchScopes: [NSArray arrayWithObject: [NSURL fileURLWithPath:@"/Users/Someone/Music" isDirectory:YES]]];
[query setPredicate: predicate];
...
...

サポートされていない形式のファイルを除外するには、「述語」をどのように設定すればよいでしょうか??

kMDItemCodezs,kMDItemMediaTypes,kMDItemContentType,kMDItemKind?

どちらを使用する必要がありますか? そして、Lion 10.7 の AVAudioPlayer でサポートされている形式に対応するこれらの属性のすべての可能な値は何ですか? どうもありがとう。

4

2 に答える 2

6

ほとんどのサポートされている形式のリストを取得するAudioFileGetGlobalInfoには、AudioToolboxフレームワークで を使用して、Core Audio でサポートされている UTI を取得できます ( を使用kAudioFileGlobalInfo_AllUTIs)。

UInt32 size;
NSArray *all;
OSStatus err;

err = AudioFileGetGlobalInfoSize(kAudioFileGlobalInfo_AllUTIs, 0, NULL, &size);
if (err == noErr)
    err = AudioFileGetGlobalInfo(kAudioFileGlobalInfo_AllUTIs, 0, NULL, &size, &all);
if (err == noErr)
    NSLog(@"UTIs: %@", all);
[all release];

10.7 では、次のようになります。

"public.aiff-audio",
"public.ulaw-audio",
"org.3gpp.adaptive-multi-rate-audio",
"com.microsoft.waveform-audio",
"public.3gpp2",
"com.apple.coreaudio-format",
"public.3gpp",
"public.mp3",
"public.au-audio",
"public.mpeg-4-audio",
"public.mpeg-4",
"com.apple.m4a-audio",
"public.aifc-audio"

残念ながら、UTI は、 Core Audio がサポートするいくつかの不明瞭なデータ形式 (例: .mp1/ ) に対して定義されていません。.mp2上記のサブセットに満足している場合は、UTI を使用してください。

次に、それらをNSMetadataQuery( kMDItemContentTypefor kAudioFileGlobalInfo_AllUTIs) に変換します。残りの形式をカバーしたい場合は、HFS タイプと拡張子で一致させることができます: kMDItemFSTypeCodefor 、およびforkAudioFileGlobalInfo_AllHFSTypeCodesのワイルドカード一致。これらの両方を表示するために使用できます。kMDItemFSNamekAudioFileGlobalInfo_AllExtensionsafconvert -hf

NSMetadataQueryもちろん、with のマッチングでは、すべてのファイルの中が検索されるわけではないため、.mp3拡張子を付けて名前が変更されたテキスト ファイルも検索されます。Spotlight は他のオーディオ属性のインデックスを作成しようとするため、チェックなどを試すことができますkMDItemAudioBitRate。これらは、実際にはオーディオ ファイルではないファイルでは失われます。フィルタリングの精度に応じて、各ファイルを開いて再生可能かどうかを確認することもできます。

于 2011-08-21T16:36:05.343 に答える
1

kMDItemContentTypeTree、およびオーディオタイプを使用します。これは、ムービーファイルを無視して、すべてのオーディオファイルと一致します。映画ファイルを含める場合は、オーディオタイプが準拠している(降順の)オーディオビジュアルコンテンツタイプを検索します。

編集:これは、Core Audio(AVAudioPlayerは言うまでもなく)がそれらを再生できるかどうかに関係なく、すべての既知のオーディオタイプと一致します。NicholasRileyのソリューションの方が優れています。

于 2011-08-21T06:52:39.470 に答える