ios 扫描本地音乐_iOS如何获取本地的音乐歌曲mp3的信息数据

今天在做一款音乐播放器的时候需要支持文件共享本地导入音乐,但是导入进去的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;

}

每一次的学习和记录都是成长道路上的一小步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值