我有以下问题要问:
如何在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