项目中有一个需求是在App中播放用户iPod中的音乐,实现思路如下:
我们一直强调成都网站设计、网站建设对于企业的重要性,如果您也觉得重要,那么就需要我们慎重对待,选择一个安全靠谱的网站建设公司,企业网站我们建议是要么不做,要么就做好,让网站能真正成为企业发展过程中的有力推手。专业网站制作公司不一定是大公司,创新互联作为专业的网络公司选择我们就是放心。
1、获取iPod中的音乐对象
NSNumber *typeNum = [NSNumber numberWithInteger:MPMediaTypeAnyAudio]; MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:typeNum forProperty:MPMediaItemPropertyMediaType]; MPMediaQuery *query = [[MPMediaQuery alloc] init]; [query addFilterPredicate:predicate]; NSArray *items = [query items];
数组 items 中包含了iPod中所有的音乐,音乐都是一个 MPMediaItem 对象,可通过获取该对象的相关属性,获取指定音乐文件的相关信息。比如:
[mediaItemvalueForProperty:MPMediaItemPropertyPlaybackDuration] //获取音乐文件的播放时长;
[mediaItem valueForProperty:MPMediaItemPropertyTitle] //获取音乐文件名称;
[mediaItem valueForProperty:MPMediaItemPropertyAssetURL] //获取音乐文件在iPod中的地址;
可通过查阅官方帮助文档得知获取的文件的相关信息,但是不能获取文件的占用内存大小信息。
PS:当设置 type 为 MPMediaTypeAnyVideo 时,可获取iPod中所有的视频信息。
2、在App中播放iPod中的音乐
播放iPod中的音乐有多种方法,下面介绍两种方法:
方法1:通过获取的 MPMediaItem 对象数组构建MPMediaItemCollection 播放列表对象,通过MPMusicPlayerController 播放器实现播放。这种方法可实现顺序播放、循环播放等功能。
MPMediaItemCollection *mediaItemCollection = [MPMediaItemCollection collectionWithItems:items]; // MPMusicPlayerController 有两种播放器可以选择,一种是application music player,另外一种是iPod music player。 // 第一种播放器是一种内部播放器,当程序对出后停止播放;而第二种播放器则与iPod播放器内的信息相关,退出之后不会停止播放。获取方式如下: // + applicationMusicPlayer // + iPodMusicPlayer MPMusicPlayerController *audioPlayer = [MPMusicPlayerController applicationMusicPlayer]; [audioPlayer beginGeneratingPlaybackNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioPlayerStatedChanged:) name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:audioPlayer]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(nowPlayingItemIsChanged:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:_audioPlayer]; [audioPlayer setQueueWithItemCollection:mediaItemCollection]; [audioPlayer play];
代码中添加的两个通知是监听播放中的一些状态变化的,可供监听的状态可查阅官方帮助文档。
方法2:通过AVAudioPlayer 实现单个音乐文件的播放,这时,需要通过 MPMediaItem 对象获取音乐文件在iPod中的地址。
//设置播放模式 AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; [session setActive:YES error:nil]; AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:musicUrl error:nil]; m_player.delegate = self; [m_player prepareToPlay]; [m_player play];
可通过实现下面的委托方法获取播放过程中的相关状态。
#pragma mark - AVAudioPlayerDelegate - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { NSLog(@"播放结束"); } - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error { NSLog(@"解码失败"); }