播放iPod Library歌曲

一、简述  

  对于影音娱乐类应用来说播放设备本地音乐是一项比较实用的功能,市面上的音乐播放器大多也都支持该功能。Apple提供两种方式来访问本地音乐库,分别是 MPMediaQuery 和 MPMediaPickerController。MPMediaPickerController 是一个已定制好UI的控件,为了满足自定义需求,通常我们使用 更强大的 MPMediaQuery 来获取本地音乐。

本文提供一个Demo简单展示如何使用 MPMediaQuery 获取本地音乐信息并使用 AVAudioPlayer 播放。如下图:

  

二、代码示例

#import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,AVAudioPlayerDelegate>
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;
@property (nonatomic, strong) MPMediaQuery  *mediaQuery;
@property (nonatomic, strong) UITableView   *mediaTableView;
@property (nonatomic, assign) NSInteger     playingIndex;
@end

@implementation ViewController
- (UITableView *)mediaTableView{
    if (!_mediaTableView) {
        _mediaTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
        _mediaTableView.delegate = self;
        _mediaTableView.dataSource = self;
    }
    return _mediaTableView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.playingIndex = NSIntegerMax;
    self.mediaQuery = [MPMediaQuery songsQuery];
    [self.view addSubview:self.mediaTableView];

    UILabel *header = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds),64.0)];
    header.text = @"iPod Library";
    header.textColor = [UIColor brownColor];
    header.textAlignment = NSTextAlignmentCenter;
    header.font = [UIFont systemFontOfSize:18.0];
    [self.mediaTableView setTableHeaderView:header];

    UIButton *footer = [UIButton buttonWithType:UIButtonTypeCustom];
    footer.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), 32.0);
    [footer setTitle:@"stop" forState:UIControlStateNormal];
    footer.titleLabel.font = [UIFont systemFontOfSize:18.0];
    [footer setTitleColor:[UIColor brownColor] forState:UIControlStateNormal];
    [footer addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];
    [self.mediaTableView setTableFooterView:footer];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Action
/**
 *  播放音频
 *
 *  @param itme <#itme description#>
 */
- (void)playMediaWithItem:(MPMediaItem *) itme{
    self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:itme.assetURL error:nil];
    self.audioPlayer.delegate = self;
    [self.audioPlayer prepareToPlay];
    [self.audioPlayer play];
}

/**
 *  stop
 */
- (void)stop{
    if (self.audioPlayer.playing) {
        [self.audioPlayer stop];
        self.playingIndex = NSIntegerMax;
        [self.mediaTableView reloadData];
    }
}

#pragma mark - UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.mediaQuery.items.count;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 66.0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static  NSString *cellIdentifier = @"ipodMusicCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }
    MPMediaItem *item = self.mediaQuery.items[indexPath.row];
    cell.textLabel.text = item.title;
    cell.textLabel.textColor = [UIColor brownColor];
    cell.detailTextLabel.text = item.artist;
    cell.detailTextLabel.textColor = [UIColor brownColor];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.tintColor = [UIColor brownColor];

    if (indexPath.row == self.playingIndex) {
        cell.textLabel.textColor = [UIColor redColor];
        cell.detailTextLabel.textColor = [UIColor redColor];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        cell.tintColor = [UIColor redColor];
    }
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    MPMediaItem *item = self.mediaQuery.items[indexPath.row];
    [self playMediaWithItem:item];

    self.playingIndex = indexPath.row;
    [self.mediaTableView reloadData];
}

#pragma mark - AVAudioPlayerDelegate
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    if (player == self.audioPlayer) {
        self.playingIndex ++; //自动下一曲
        if (self.playingIndex < self.mediaQuery.items.count) {
            [self playMediaWithItem:self.mediaQuery.items[_playingIndex]];
        } else {
            self.playingIndex = 0;
            [self playMediaWithItem:[self.mediaQuery.items firstObject]];
        }
        [self.mediaTableView reloadData];
    }
}
@end
时间: 2024-10-11 07:39:27

播放iPod Library歌曲的相关文章

获取iPod library中的媒体文件

[获取iPod library中的媒体文件] The Media Player framework provides facilities for playing movie, music, audio podcast, and audio book files. This framework also gives your application access to the iPod library, letting you find and play audio-based media it

Music播放器中歌曲是如何获得专辑图片的

歌曲中自带专辑图片和未带专辑图片获得方法 1.    歌曲中自带专辑图片 解压音乐文件本身自带的压缩图片数据作为专辑封面. 2.    歌曲中不带专辑图片 如果音乐文件本身不存在图片数据,则在本目录寻找AlbumArt.jpg文件: 若AlbumArt.jpg不存在,则寻找以albumart开头.large.jpg结尾的文件: 若albumart开头,large.jpg结尾的文件也不存在,则寻找任何文件名包含albumart的.jpg文件: 若再找不到,则使用文件夹目录下任何.jpg文件: 若以

(算法)随机播放歌曲

题目: 假设张三的mp3里有1000首歌,现在希望设计一种随机算法来随机播放.与普通随机模式不同的是,张三希望每首歌被随机抽到的概率是与一首歌的豆瓣评分(0~10分)成正比的,如朴树的<平凡之路>评分为8.9分,逃跑计划的<夜空中最亮的星>评分为9.5分,则希望听<平凡之路>的概率与<夜空中最亮的星>的概率比为89:95,.现在我们已知这1000首歌的豆瓣评分:    (1)请设计一种随机算法来满足张三的需求.    (2)请写代码实现自己的算法. 思路:

Android开发本地及网络Mp3音乐播放器(十七)已存在歌曲歌词下载

实现功能: 已存在歌曲歌词下载 后续将博文,将实现已下载音乐扫描功能. 因为,没有自己的服务器,所以网络音乐所有相关功能(包含搜索音乐.下载音乐.下载歌词)均无法保证时效性,建议,尽快下载和练习:如果你下载时候,已经因为我采集的服务器更改规则,请给我留言,如果可以解决,我将在有空的时候献上新的源码. 截止到目前的源码下载: http://download.csdn.net/album/detail/3105 (最新的,请下载最后一个,本博文对应版本2.2 :如果需要逐步实现的过程,请下载所有)

IOS 音频播放

iOS音频播放 (一):概述 Audio Playback in iOS (Part 1) : Introduction 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改我也因此对于iOS下的音频播放实现有了一定的研究.写这个系列的博客目的一方面希望能够抛砖引玉,另一方面也是希望能帮助国内其他的iOS开发者和爱好者少走弯路(我自己就遇到了不少的坑=.=). 本篇为<iOS音频播放>系列的第一篇,主要将对iOS下实现音频播放的方法进行概述. 基础 先来简单了解一

iOS音乐播放器相关

iOS音乐播放器框架主要有两大类:AvPlayer.AvaudioPlayer AvPlayer 能播放本地及网络歌曲 AvaudioPlayer 能播放本地歌曲.有相关代理方法(其实也可以播放网络歌曲,只不过该播放器播放网络歌曲是先将歌曲下载下来再进行播放) 下面记录一下相关要用到的方法 1.获取本地歌曲库(ipod路径)歌曲 // 读取本地音乐 MPMediaPropertyPredicate *albumNamePredicate = [MPMediaPropertyPredicate p

用PHP+H5+Boostrap做简单的音乐播放器(进阶版)

前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这个Demo比之前的可以算是进阶呢~v2.0哈哈哈~感觉截图体验很不好呢,所以在美图秀秀上面做了简易的动图,大家感受感受 正文: 老规矩,先上图~感觉有点卡,愿意等的就等等嘛,不愿意等的,往下看,有图片讲解 功能实现: 1.点击音乐列表播放音乐 2.拖动或点击进度条,调节音乐播放进度 3.浮动到音量控

iOS 简单音乐播放器 界面搭建

如图搭建一个音乐播放器界面,具备以下几个简单功能: 1,界面协调,整洁. 2,点击播放,控制进度条. 3.三收藏歌曲,点击收藏,心形收藏标志颜色加深. 4,左右按钮,切换歌曲图片和标题. 5,点击中间图片,隐藏所有按钮,仅显示蓝色背景. 设计的整体思路: 1.在搭建界面的时候,为了整洁和方便后续的功能的添加,需要将整个的界面划分为几个部分: ①:最上面的一行包括:一个返回按钮.一个歌曲名称.一个收藏按钮: ②:第二行:一个slider控件.两侧是当前的歌曲播放进度和歌曲的总时长--两个lable

歌曲列表和频道列表

上回我们实现了一个音乐播放器的基本界面,现在我们给播放器加上歌曲以及频道列表: 实现列表功能实际上就是配置UITableView控件,配置UITableView需要继承数据源协议和委托协议两个协议: 首先拖线创建tableview的属性并继承两个协议: 其中数据源协议里有两个方法是必须实现的: 然后设置table的数据源和代理: 简单三步,歌曲列表就完成啦!- 接着是频道列表. 频道列表的UI如下,配置方法同上,值得一提的是 还可以直接用拖线的方法直接绑定数据源和委托: 新建一个类作为这个vie