Как получить доступ к информации о файле программно на Mac?

3

Настройка:

У меня есть куча аудиофайлов на моем новом Mac (Yosemite). Когда я нажимаю правой кнопкой мыши на любом файле и делаю "Получить информацию", он дает мне приятную подробную информацию об этой песне в теге "Дополнительная информация", например.

Изображение 41087

Цель:

Мне нужно написать программу, в которой я могу перечислить, что-то вроде этого для всех песен в каталоге:

Album, Title, Year Recorded
.
.
.

Проблема:

Я не знаю, как это сделать. Я совершенно не знаком с Mac и Objective-C/Swift (Objective-C или Swift то, что мне придется использовать для написания этой программы, я думаю?)

Есть ли API, где я могу получить доступ к этой файловой информации программно? И есть ли какой-либо другой язык, который я могу использовать для написания такого рода программ? Что-то, что я уже знаю, например Java, Python и т.д.?

У меня нет кода на данный момент, чтобы показать "Что я пробовал до сих пор", так как я все еще ищу отправную точку. Любые указатели будут высоко оценены.

  • 0
    Вам не нужно писать свое приложение в Objective-C , вы также можете сделать это с помощью Swift :)
  • 0
    Спасибо за информацию, к сожалению, я никогда не использовал Swift . Обновил вопрос соответственно.
Теги:
macos

2 ответа

2

Как вы заметили, команда mdls может предоставить эти метаданные. Вы не должны пытаться разбирать это. Вместо этого вы можете использовать те же API, на которых он построен.

Вам нужно получить NSURL для интересующего файла. Затем вы можете получить словарь своих атрибутов метаданных, например:

MDItemRef item = MDItemCreateWithURL(NULL, (__bridge CFURLRef)url);
NSArray* names = @[ (__bridge NSString*)kMDItemAlbum, /* ... */ ];
NSDictionary* dictionary = CFBridgingRelease(MDItemCopyAttributes(item, (__bridge CFArrayRef)names));
CFRelease(item);

Теперь dictionary содержит требуемые атрибуты.

0

Итак, я нашел один способ сделать это.

Mac предоставляет утилиту под названием mdls, в которой перечислены метаданные файлов. Так что, если я делаю mdls в моем примерном файле, я получаю следующее:

myuser00m:Hindi myuser$ mdls Pani\ Da\ Rang.mp3 
kMDItemAlbum                    = "Vicky Donor"
kMDItemAlternateNames           = (
    "/Users/myuser/Documents/My Stuff/Music/Hindi/Pani Da Rang.mp3"
)
kMDItemAudioBitRate             = 165000
kMDItemAudioChannelCount        = 2
kMDItemAudioEncodingApplication = "Eac * Lame"
kMDItemAudioSampleRate          = 44100
kMDItemAuthors                  = (
    "Ayushmann Khurrana"
)
kMDItemComposer                 = "Music: Abhishek - Akshay"
kMDItemContentCreationDate      = 2015-06-16 04:42:30 +0000
kMDItemContentModificationDate  = 2015-06-16 04:42:30 +0000
kMDItemContentType              = "public.mp3"
kMDItemContentTypeTree          = (
    "public.mp3",
    "public.audio",
    "public.audiovisual-content",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemCopyright                = "www.Songs.PK"
kMDItemDateAdded                = 2015-07-26 19:52:49 +0000
kMDItemDisplayName              = "Pani Da Rang"
kMDItemDurationSeconds          = 240.8489795918368
kMDItemFSContentChangeDate      = 2015-06-16 04:42:30 +0000
kMDItemFSCreationDate           = 2015-06-16 04:42:30 +0000
kMDItemFSCreatorCode            = ""
kMDItemFSFinderFlags            = 0
kMDItemFSHasCustomIcon          = (null)
kMDItemFSInvisible              = 0
kMDItemFSIsExtensionHidden      = 0
kMDItemFSIsStationery           = (null)
kMDItemFSLabel                  = 0
kMDItemFSName                   = "Pani Da Rang.mp3"
kMDItemFSNodeCount              = (null)
kMDItemFSOwnerGroupID           = 784317889
kMDItemFSOwnerUserID            = 376797083
kMDItemFSSize                   = 5826388
kMDItemFSTypeCode               = ""
kMDItemKind                     = "MP3 audio"
kMDItemLogicalSize              = 5826388
kMDItemLyricist                 = "www.Songs.PK"
kMDItemMediaTypes               = (
    Sound
)
kMDItemMusicalGenre             = "Bollywood"
kMDItemPhysicalSize             = 5828608
kMDItemRecordingYear            = 2012
kMDItemTitle                    = "Pani Da Rang"
kMDItemTotalBitRate             = 165000
myuser00m:Hindi myuser$ 

Теперь мне нужно написать некоторый код, чтобы проанализировать это и извлечь интересующие поля.

Очевидно, что это не крутое решение, но пока я не найду что-то лучшее, это будет сделано. Я обновлю свой ответ, когда найду что-то лучше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню