从音频文件中提取流派元数据

时间:2014-03-13 11:55:43

标签: ios objective-c macos cocoa avfoundation

我想从mp3或m4a文件中提取类型。元数据存在,如iTunes中所示,我已经设法为类型提取了一些NSData对象,但无法将任何内容映射到特定类型。

此外,密钥没有正确比较,所以我找到正确密钥的方法确实是黑客。

我目前的代码是这样的。

- (NSDictionary*) getMetaDictionary:(AVAsset*)asset
{

    for (NSString *format in [asset availableMetadataFormats]) {
        for (AVMetadataItem *item in [asset metadataForFormat:format]) {

        if (item.key && [item.keySpace isEqualToString:@"itsk"]) {


                NSUInteger akey = NSSwapInt([(NSNumber *)[item key] unsignedIntValue]);
                NSString *keyString = [NSString stringWithFormat:@"%.4s",&akey];

                NSLog(@"key: %@ - value: %@", keyString, ([keyString isEqualToString:@"covr"]?@"nope":item.value));

                if ([keyString isEqualToString:@"©gen"])
                {
                    NSLog(@"Genre: %@", item.value);
                }

                if ([keyString isEqualToString:@"gnre"])
                {
                    NSData* genData = [[NSData alloc] initWithData:((NSData*)item.value)];

                    NSString* genreString = [[NSString alloc] initWithData:genData encoding:NSASCIIStringEncoding];
                    NSLog(@"Genre from data: %@", genreString);
                }

        }
    }
}

这会生成以下输出:

 key: ©nam - value: Smokebelch II (Beatless Mix)
 key: ©ART - value: The Sabres Of Paradise
 key: ©wrt - value: Jose Padilla
 key: ©alb - value: Café Del Mar - the Best of (Disc 1)
 key: gnre - value: <0063>

我的理解是'gnre'包含该类型的id。你怎么得到这个ID?如何将其映射到实际ID。

请提供任何帮助或建议吗?

1 个答案:

答案 0 :(得分:0)

可在此处找到ID3标签的类型列表: http://id3.org/id3v2.3.0

查看附录(第8节)。 我不确定Apple如何维护他们的标签数据库,但我强烈认为它已根据我所包含的链接进行了更新。