objective c - How to extract metadata from audio files on iOS -
i'm trying extract metadata mp3 , m4a files using avfoundation framework.
this test code:
+ (void)printmetadataforfileatpath:(nsstring *)path { nsurl *url = [nsurl fileurlwithpath:path]; avasset *asset = [avurlasset assetwithurl:url]; nsarray *availableformats = [asset availablemetadataformats]; nslog(@"available formats: %@", availableformats); nsarray *itunesmetadata = [asset metadataforformat:avmetadataformatitunesmetadata]; (avmetadataitem *item in itunesmetadata) { nslog(@"%@ %x", item.key, [(nsnumber *)item.key integervalue]); if ([item.key isequal:avmetadataitunesmetadatakeysongname]) { nslog(@"found song name: %@", item.stringvalue); } } nslog(@"===================="); nslog(@"%@ %@ %@", avmetadataitunesmetadatakeysongname, avmetadataitunesmetadatakeyalbum, avmetadataitunesmetadatakeyartist); } this ouput:
available formats: ( "com.apple.itunes", "com.apple.quicktime.udta" ) -1452383891 a96e616d -1455336876 a9415254 1631670868 61415254 -1451789708 a9777274 -1453233054 a9616c62 -1452838288 a9677270 -1452841618 a967656e 1953655662 74726b6e 1684632427 6469736b -1453039239 a9646179 -1453101708 a9636d74 1668311404 6370696c 1885823344 70676170 1953329263 746d706f -1451987089 a9746f6f com.apple.itunes.itun com.apple.itunes.enco 1668249202 636f7672 -1452508814 a96c7972 ==================== @nam @alb @art when interpreted 4 ascii chars:
© n m © r t a r t © w r t © l b © g r p © g e n t r k n d s k © d y © c m t c p l p g p t m p o © t o o so seems item.key nsnumber object constants beginning avmetadataitunesmetadatakey... nsstring objects. what's right way metadata? when use [avasset commonmetadata] keys nsstring objects , comparison avmetadatacommonkey... constants works expected.
avfoundation api quite confusing when dealing metadata.
the keys defined avmetadataitunesmetadatakey* values not same ones avmetadataitem's key property values. avmetadataitunesmetadatakey* keys used [avmetadataitem metadataitemsfromarray:withkey:keyspace:avmetadatakeyspaceitunes] api filter out metadata items specific itunes keys.
the keys , values avmetadataitem depend on exact format of resource file. in addition filtering out keys function above, suggest using item's commonkey property, provides more generic "key" property others.
change sample code print out commonkey along item's value. here examples:
- commonkey "title" - value nsstring title of song
- commonkey 'artist' - value nsstring artist of song
- commonkey 'albumname' - value nsstring name of album
hope helps!
Comments
Post a Comment