我的新Mac(Yosemite)上有一堆音频文件。当我右键单击任何文件并执行"获取信息"时,它会在"更多信息"下提供有关该歌曲的详细信息。标签,例如
我需要编写一个我可以列出的程序,对于目录中的所有歌曲都是这样的:
Album, Title, Year Recorded
.
.
.
我不知道该怎么做。我是Mac新手,Objective-C
/ Swift
(Objective-C
或Swift
是我用来编写这个程序的原因,我想猜测?)
是否有API我可以通过编程方式访问此文件信息?还有其他语言可以用来编写这种程序吗?我已经知道的东西,比如Java
,Python
等?
到目前为止,我还没有任何代码可以显示我迄今为止所尝试过的内容,因为我仍然在寻找起点。任何指针都会非常感激。
答案 0 :(得分: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
包含所需的属性。
答案 1 :(得分: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$
现在我需要编写一些代码来解析它并提取感兴趣的字段。
显然,这不是那么酷的解决方案,但在我找到更好的东西之前,这样做。一旦找到更好的东西,我会更新我的答案。