今天在做一款音乐播放器的时候需要支持文件共享本地导入音乐,但是导入进去的mp3是只有歌曲名字加格式的,有些甚至歌曲名字都不对只是一个.mp3文件,例如:
但是这时候我们的界面上是需要显示歌曲的信息的,歌手,歌曲名字,专辑,缩略图等等信息,其实这些信息在.mp3里面是可以找到的,但是也不能全找到。估计是这些生成的时候没有加到里面,话不多说直接进入正题。这里以我的用法为例,可根据自己情况灵活变动。
获取到mp3文件(我这里是获取的所有文件放到数组。如不需要可以单个获取)
NSArray *mp3Array = [NSBundle pathsForResourcesOfType:@"mp3" inDirectory:[[NSBundle mainBundle] resourcePath]];遍历数组得到每个文件的路径并得到AVURLAsset的对象
for (NSString *filePath in mp3Array) {
NSURL *url = [NSURL fileURLWithPath:filePath];
NSString *MusicName = [filePath lastPathComponent];
AVURLAsset *mp3Asset = [AVURLAsset URLAssetWithURL:url options:nil];
NSLog(@"%@",mp3Asset);获取文件中数据格式类型
for (NSString *format in [mp3Asset availableMetadataFormats]) {-
获取特定格式类型
for (AVMetadataItem *metadataItem in [mp3Asset metadataForFormat:format]) {
NSLog(@"commonKey = %@",metadataItem.commonKey);if ([metadataItem.commonKey isEqualToString:@"artwork"]) { NSString *mime = [(NSDictionary *)metadataItem.value objectForKey:@"MIME"]; NSData *data = [(NSDictionary *)metadataItem.value objectForKey:@"data"]; UIImageView.image = [UIImage imageWithData:data]; NSLog(@"mime: %@",mime); } else if([metadataItem.commonKey isEqualToString:@"title"]) { NSString *title = (NSString *)metadataItem.value; NSLog(@"title: %@",title); } else if([metadataItem.commonKey isEqualToString:@"artist"]) { NSString *artist = (NSString *)metadataItem.value; NSLog(@"artist: %@",artist); } else if([metadataItem.commonKey isEqualToString:@"albumName"]) { NSString *albumName = (NSString *)metadataItem.value; NSLog(@"albumName: %@",albumName); }
以上就是具体如何获取本地的歌曲信息了。如有不明白可参考这篇内容:
-
下面为大家贴上本人在项目中的实例应用代码:
+ (NSMutableArray *)MusicInfoArray { NSMutableArray *resultArray = [[NSMutableArray alloc] init]; NSArray *mp3Array = [NSBundle pathsForResourcesOfType:@"mp3" inDirectory:[[NSBundle mainBundle] resourcePath]]; for (NSString *filePath in mp3Array) { NSURL *url = [NSURL fileURLWithPath:filePath]; NSString *MusicName = [filePath lastPathComponent]; AVURLAsset *mp3Asset = [AVURLAsset URLAssetWithURL:url options:nil]; NSLog(@"%@",mp3Asset); for (NSString *format in [mp3Asset availableMetadataFormats]) { NSMutableDictionary *infoDict = [[NSMutableDictionary alloc] init]; [infoDict setObject:MusicName forKey:@"MusicName"]; NSLog(@"format type = %@",format); for (AVMetadataItem *metadataItem in [mp3Asset metadataForFormat:format]) { NSLog(@"commonKey = %@",metadataItem.commonKey); if ([metadataItem.commonKey isEqualToString:@"artwork"]) { NSString *mime = [(NSDictionary *)metadataItem.value objectForKey:@"MIME"]; NSLog(@"mime: %@",mime); [infoDict setObject:mime forKey:@"artwork"]; } else if([metadataItem.commonKey isEqualToString:@"title"]) { NSString *title = (NSString *)metadataItem.value; NSLog(@"title: %@",title); [infoDict setObject:title forKey:@"title"]; } else if([metadataItem.commonKey isEqualToString:@"artist"]) { NSString *artist = (NSString *)metadataItem.value; NSLog(@"artist: %@",artist); [infoDict setObject:artist forKey:@"artist"]; } else if([metadataItem.commonKey isEqualToString:@"albumName"]) { NSString *albumName = (NSString *)metadataItem.value; NSLog(@"albumName: %@",albumName); [infoDict setObject:albumName forKey:@"albumName"]; } } [resultArray addObject:infoDict]; } } return resultArray; }
每一次的学习和记录都是成长道路上的一小步。