注意:這個本地音樂并不是說將歌曲放到項目中的歌曲文件,而且放在手機本地音樂庫(ipod)的音樂.
因為比較簡單,所以就直接上代碼了.
使用之前需要添加 - MediaPlayer.framework
導入頭文件
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>
//獲取本地音樂文件,返回歌曲列表
-(NSArray*) findArtistList {
NSMutableArray *artistList = [[NSMutableArray alloc]init];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
MPMediaQuery *listQuery = [MPMediaQuery playlistsQuery];//播放列表
NSArray *playlist = [listQuery collections];//播放列表數(shù)組
for (MPMediaPlaylist * list in playlist) {
NSArray *songs = [list items];//歌曲數(shù)組
for (MPMediaItem *song in songs) {
//歌曲名
NSString *title =[song valueForProperty:MPMediaItemPropertyTitle];
//歌手名
NSString *artist =[[song valueForProperty:MPMediaItemPropertyArtist] uppercaseString];
//鏈接 注意: 如果后面不調(diào)用 absoluteString ,播放會崩潰
NSString *url = [[song valueForProperty: MPMediaItemPropertyAssetURL] absoluteString];
//將歌曲保存到字典中, 并將字典轉(zhuǎn)成模型
[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;
}
以上的方法是獲取手機本地音樂庫中的列表,
將列表添加數(shù)據(jù)源中
- (NSArray *)musicsList {
if (!_musicsList) {
_musicsList = [self findArtistList];
[self.tableView reloadData];
}
return _musicsList;
}
將這些數(shù)據(jù)展示到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];
}
注意:播放器一定要強引用.
另外網(wǎng)上還有另外一種方法是使用MPMediaPickerController的,但是這個方法會modal出一個自帶的界面.一般情況下不會使用到.
點擊歌曲就可以播放了.
效果圖:

FullSizeRender.jpg