Чтобы получить список большинства поддерживаемых форматов, вы можете использовать AudioFileGetGlobalInfo
в платформе AudioToolbox
, чтобы получить UTI, поддерживаемые Core Audio (используя 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 не определены для некоторых из более неясных форматов данных (например, .mp1
/ .mp2
), которые поддерживает Core Audio;если вы довольны вышеуказанным подмножеством, просто используйте UTI.
Затем превратите их в NSMetadataQuery
(kMDItemContentType
для kAudioFileGlobalInfo_AllUTIs
).Если вы хотите охватить остальные форматы, вы можете сопоставить их по типу и расширению HFS: kMDItemFSTypeCode
для kAudioFileGlobalInfo_AllHFSTypeCodes
и совпадение по шаблону kMDItemFSName
для kAudioFileGlobalInfo_AllExtensions
.Вы можете использовать afconvert -hf
, чтобы отобразить оба из них.
Соответствие с NSMetadataQuery
, конечно, не будет смотреться во всех файлах, поэтому он все равно найдет текстовые файлы, переименованные с расширением .mp3
.Так как Spotlight пытается индексировать другие аудио атрибуты, вы можете попробовать проверить kMDItemAudioBitRate
и т. Д .;они будут отсутствовать в файле, который на самом деле не является аудиофайлом.В зависимости от того, насколько точным вы хотите быть при фильтрации, вы также можете попробовать открыть каждый файл, чтобы проверить, воспроизводим ли он.