美文网首页音、視頻編解碼iOS程序猿
iOS播放手机本地音乐库的歌曲

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

作者: Mir_Crazy | 来源:发表于2016-12-16 13:44 被阅读867次

    注意:这个本地音乐并不是说将歌曲放到项目中的歌曲文件,而且放在手机本地音乐库(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];//播放列表数组
    
    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出一个自带的界面.一般情况下不会使用到.
    点击歌曲就可以播放了.
    效果图:


    FullSizeRender.jpg

    相关文章

      网友评论

      • zdl:这个iPod音乐库中的音乐是怎么来的 ??? 能添加qq音乐下载的音频文件吗
      • __阳阳:大神, 请教一下, 获取到音乐地址以后怎么将其转换成数据流呢? 我用dataWithContentsOfURL 和 dataWithContentsOfFile 两个方法都不行, 获取的数据流一直是空的

      本文标题:iOS播放手机本地音乐库的歌曲

      本文链接:https://www.haomeiwen.com/subject/utynmttx.html