今天在做一款音乐播放器的时候需要支持文件共享本地导入音乐,但是导入进去的mp3是只有歌曲名字加格式的,有些甚至歌曲名字都不对只是一个.mp3文件,例如:
本地mp3文件.png
但是这时候我们的界面上是需要显示歌曲的信息的,歌手,歌曲名字,专辑,缩略图等等信息,其实这些信息在.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;
}
每一次的学习和记录都是成长道路上的一小步。