iOS播放手机本地音乐库的歌曲

注意:这个本地音乐并不是说将歌曲放到项目中的歌曲文件,而且放在手机本地音乐库(ipod)的音乐.
因为比较简单,所以就直接上代码了.

使用之前需要添加 - MediaPlayer.framework

导入头文件
#import 

#import 

//获取本地音乐文件,返回歌曲列表

-(NSArray*) findArtistList {

NSMutableArray *artistList = [[NSMutableArray alloc]init];

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

MPMediaQuery *listQuery = [MPMediaQuery playlistsQuery];//播放列表

NSArray *playlist = [listQuery collections];//播放列表数组

for (MPMediaPlaylist * list in playlist) {

NSArray *songs = [list items];//歌曲数组

for (MPMediaItem *song in songs) {

//歌曲名

NSString *title =[song valueForProperty:MPMediaItemPropertyTitle];

//歌手名

NSString *artist =[[song valueForProperty:MPMediaItemPropertyArtist] uppercaseString];

//链接    注意: 如果后面不调用 absoluteString ,播放会崩溃

NSString *url = [[song valueForProperty: MPMediaItemPropertyAssetURL] absoluteString];

//将歌曲保存到字典中, 并将字典转成模型

[dict setObject:title forKey:@"songName"];

[dict setObject:artist forKey:@"singer"];

[dict setObject:url forKey:@"url"];

HFLocalMusicItem *item = [HFLocalMusicItem itemWithDictionary:dict];

if(artist!=nil&&![artistList containsObject:artist]){

[artistList addObject: item];

  }

}

}

return artistList;

}

以上的方法是获取手机本地音乐库中的列表,

将列表添加数据源中

- (NSArray *)musicsList {

if (!_musicsList) {

_musicsList = [self  findArtistList];

[self.tableView reloadData];

}

return _musicsList;

}

将这些数据展示到tablview中,在 tableView的代理方法didSelectRowAtIndexPath中点击播放

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
HFLocalMusicItem *item = self.musicsList[indexPath.row];

self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:item.url] error:nil];

[self.audioPlayer play];
}

注意:播放器一定要强引用.

另外网上还有另外一种方法是使用MPMediaPickerController的,但是这个方法会modal出一个自带的界面.一般情况下不会使用到.
点击歌曲就可以播放了.
效果图:


iOS播放手机本地音乐库的歌曲_第1张图片
FullSizeRender.jpg

你可能感兴趣的:(iOS播放手机本地音乐库的歌曲)