Как узнать все аудиофайлы, форматы которых поддерживаются AVAudioPlayer в Lion 10.7? - PullRequest
0 голосов
/ 21 августа 2011

Я хочу использовать такие коды.

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

Теперь, как мне предположить установить для "предиката" значение , отфильтровать эти файлы в неподдерживаемом формате ??

kMDItemCodezs,kMDItemMediaTypes,kMDItemContentType,kMDItemKind?

Какой из них мне следует использовать? И каковы все возможные значения этих атрибутов, соответствующие поддерживаемому формату в AVAudioPlayer в Lion 10.7? Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 21 августа 2011

Чтобы получить список большинства поддерживаемых форматов, вы можете использовать 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 и т. Д .;они будут отсутствовать в файле, который на самом деле не является аудиофайлом.В зависимости от того, насколько точным вы хотите быть при фильтрации, вы также можете попробовать открыть каждый файл, чтобы проверить, воспроизводим ли он.

1 голос
/ 21 августа 2011

Используйте kMDItemContentTypeTree и тип аудио . Это будет соответствовать любым аудио файлам, игнорируя файлы фильмов. Если вы хотите включить файлы фильмов, найдите тип аудиовизуального контента , которому соответствует тип аудио (происходит от).

Редактировать: Это будет соответствовать всем известным типам аудио, независимо от того, может ли их воспроизводить Core Audio (не говоря уже о AVAudioPlayer). Решение Николаса Райли лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...