从ID3标签获取专辑封面/将函数从Java转换为Objective-C



我有以下问题要问:

如何在iOS应用中编译taglib ?

我有点困惑,因为我把文件夹添加到我的项目中,试图编译它,但它失败了,有1640个错误。

我如何使它成功编译-我问的原因是taglib允许从标签中提取专辑插图。

如果有人知道一个基于Objective-C的专辑艺术品提取类,它会有所帮助-我不知道为什么苹果不在Core Foundation中添加这样做的方法-因为有方法从ID3标签中提取一些数据。

我不明白为什么没有一些 Objective-C的方法。

感谢您的帮助。

编辑:

经过几个小时的尝试,我在这里找到了一个Java函数,似乎做得很好,但我没有一个线索关于如何将其转换为Objective-C(或更不用说c++了),因为它的类型似乎完全不同于那些在Objective-C/c++。

如果有人知道一种方法来转换这个,它将真的帮助,因为这似乎是我最后的选择,因为我已经尝试了很多其他的

- (void)loadArtworksForFileAtPath:(NSString *)path completion:(void (^)(NSArray *))completion
{
    NSURL *u = [NSURL fileURLWithPath:path];
    AVURLAsset *a = [AVURLAsset URLAssetWithURL:u options:nil];
    NSArray *k = [NSArray arrayWithObjects:@"commonMetadata", nil];
    [a loadValuesAsynchronouslyForKeys:k completionHandler: ^{
        NSArray *artworks = [AVMetadataItem metadataItemsFromArray:a.commonMetadata
             withKey:AVMetadataCommonKeyArtwork keySpace:AVMetadataKeySpaceCommon];
         NSMutableArray *artworkImages = [NSMutableArray array];
         for (AVMetadataItem *i in artworks)
         {
             NSString *keySpace = i.keySpace;
             UIImage *im = nil;
             if ([keySpace isEqualToString:AVMetadataKeySpaceID3])
             {
                 NSDictionary *d = [i.value copyWithZone:nil];
                 im = [UIImage imageWithData:[d objectForKey:@"data"]];
             }
             else if ([keySpace isEqualToString:AVMetadataKeySpaceiTunes])
                 im = [UIImage imageWithData:[i.value copyWithZone:nil]];
             if (im)
                 [artworkImages addObject:im];
         }
         completion(artworkImages);
     }];
}

这只是上面的@hatfinch的答案,但修复和现在工作。

- (void)artworksForFileAtPath:(NSString *)path block:(void(^)(NSArray *artworkImages))block
{
    NSURL *url = [NSURL fileURLWithPath:path];
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
    NSArray *keys = [NSArray arrayWithObjects:@"commonMetadata", nil];
    [asset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
         NSArray *artworks = [AVMetadataItem metadataItemsFromArray:asset.commonMetadata
                                                            withKey:AVMetadataCommonKeyArtwork
                                                           keySpace:AVMetadataKeySpaceCommon];
         NSMutableArray *artworkImages = [NSMutableArray array];
         for (AVMetadataItem *item in artworks) {
             NSString *keySpace = item.keySpace;
             if ([keySpace isEqualToString:AVMetadataKeySpaceID3]) {
                 NSDictionary *d = [item.value copyWithZone:nil];
                 [artworkImages addObject:[UIImage imageWithData:[d objectForKey:@"data"]]];
             } else if ([keySpace isEqualToString:AVMetadataKeySpaceiTunes]) {
                 [artworkImages addObject:[UIImage imageWithData:[item.value copyWithZone:nil]]];
             }
         }
         if(block) {
             block(artworkImages);
         }
     }];
}

如果您只是想访问已经存储在设备上的音乐作品i。e从iPod应用程序,然后查看这篇文章,演示如何使用苹果提供的现有框架,特别是MediaPlayer框架。

如果没有,最好提供更多的信息,说明您想要实现的目标,并提供在尝试编译TagLib时遇到的错误示例。

编辑:

另一个解决方案可能是使用嵌入式webview和使用JavaScript库,如这个来加载,解析和获取专辑封面?

您可以使用:https://github.com/EliaCereda/TagLib-ObjC

相关内容

  • 没有找到相关文章

最新更新