AVAudioPlayer播放IPod音樂(lè)庫(kù)中的音樂(lè)文件.
1.首先通過(guò)代理存儲(chǔ)音樂(lè)信息
#pragma mark - MPMediaPickerControllerDelegate
- (void)mediaPicker:(nonnull MPMediaPickerController *)mediaPicker didPickMediaItems:(nonnull MPMediaItemCollection *)mediaItemCollection {
MPMusicPlayerController *musicPlayer = [MPMusicPlayerController systemMusicPlayer];
[musicPlayer setQueueWithItemCollection:mediaItemCollection];
MPMediaItem *item = [mediaItemCollection.items firstObject];
// 重點(diǎn):編碼對(duì)象(item)為NSData
NSData *date = [NSKeyedArchiver archivedDataWithRootObject:item];
// 存儲(chǔ)編碼后的NSData到plist文件
[[NSUserDefaults standardUserDefaults] setObject:date forKey:kMusicKey];
[self dismissViewControllerAnimated:YES completion:nil];
// 取出data并播放
[self playerMusic];
}
2.取出音樂(lè)播放
- (void)playerMusic {
// 在任何其他文件都可以取出data進(jìn)行音樂(lè)播放
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kMusicKey];
// 解檔還原item對(duì)象
MPMediaItem *item = [NSKeyedUnarchiver unarchiveObjectWithData:data];
// 取出音樂(lè).注意:MPMediaItemPropertyAssetURL屬性可能為空. 這是因?yàn)閕Phone自帶軟件Music對(duì)音樂(lè)版權(quán)的保護(hù),對(duì)于所有進(jìn)行過(guò) DRM Protection(數(shù)字版權(quán)加密保護(hù))的音樂(lè)都不能被第三方APP獲取并播放.即使這些音樂(lè)已經(jīng)下載到本地.但是還是可以播放本地未進(jìn)行過(guò)數(shù)字版權(quán)加密的音樂(lè).也就是您自己手動(dòng)導(dǎo)入的音樂(lè).
NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL];
NSError *err;
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:assetURL error:&err];
// 播放音樂(lè)
[_audioPlayer play];
}