要获取最受支持的格式列表,您可以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"
不幸的是,没有为Core Audio 支持的一些更模糊的数据格式(例如.mp1
/ )定义 UTI;.mp2
如果您对上述子集感到满意,则只需使用 UTI。
然后将它们变成NSMetadataQuery
(kMDItemContentType
for kAudioFileGlobalInfo_AllUTIs
)。如果要覆盖其余格式,可以按 HFS 类型和扩展名进行匹配:kMDItemFSTypeCode
for和forkAudioFileGlobalInfo_AllHFSTypeCodes
的通配符匹配。您可以使用来显示这两个。kMDItemFSName
kAudioFileGlobalInfo_AllExtensions
afconvert -hf
匹配NSMetadataQuery
当然不会查看所有文件,因此它仍然会找到使用.mp3
扩展名重命名的文本文件。由于 Spotlight 确实尝试索引其他音频属性,因此您可以尝试检查kMDItemAudioBitRate
等等;这些将在实际上不是音频文件的文件中丢失。根据您希望过滤的准确程度,您还可以尝试打开每个文件以查看它是否可播放。