Obtenga ilustraciones de álbumes de la label ID3 / Convertir la function de Java a Objective-C

Tengo la siguiente pregunta para preguntar:

¿Cómo comstack taglib con una aplicación de iOS?

Estoy un poco confundido cuando agregué la carpeta a mi proyecto, intenté comstackrlo, pero falló con 1640 errores.

¿Cómo hago que compile correctamente? La razón por la que pregunto es que taglib permite la extracción de obras de arte del álbum de una label.

Si alguien conoce una class de extracción de ilustraciones de álbum basada en Objective-C, sería útil, no sé por qué Apple no agrega una forma de hacerlo en Core Foundation, porque hay methods para extraer algunos datos de una label ID3 .

No puedo ver por qué no hay alguna forma de Objective-C de hacerlo.

Cualquier ayuda apreciada.

EDITAR:

Después de horas y horas de intentar hacer esto, he encontrado una function de Java aquí que parece hacer el trabajo bien, pero no tengo una pista sobre cómo convertirla a Objective-C (ni mucho less C ++ para eso materia), ya que sus types parecen ser completamente diferentes de los que están en Objective-C / C ++.

Si alguien sabe de una forma de convertir esto, realmente sería de ayuda, ya que parece ser mi última opción, ya que he probado a muchos otros.

- (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); }]; } 

Esta es solo la respuesta de @hatfinch arriba, pero arreglada y ahora está funcionando.

 - (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); } }]; } 

Si solo desea acceder a la ilustración de la música que ya está almacenada en el dispositivo, es decir, desde la aplicación iPod , consulte este artículo que muestra cómo hacerlo utilizando los frameworks existentes proporcionados por Apple, específicamente el marco de MediaPlayer.

De lo contrario, puede ser conveniente proporcionar un poco más de información sobre lo que está tratando de lograr y también proporcionar ejemplos de los errores que está recibiendo al tratar de comstackr TagLib.

EDITAR:

Otra solución podría ser utilizar una vista web incrustada y usar una biblioteca de JavaScript como esta para cargar, analizar y recuperar la ilustración del álbum.

Intereting Posts