- (void)viewDidLoad
{
[super viewDidLoad];
self.automaticallyAdjustsScrollViewInsets = YES;
// 初始化数组
self.allMusicArray = [[NSMutableArray alloc] init];
self.allMPMediaItemArray = [[NSMutableArray alloc] init];
// 创建并配置MusicPlayer
_player = [[AVPlayer alloc] init];
// 音频会话设置样式
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
[session setActive:YES error:nil];
self.player = [[AVPlayer alloc] init];
if (self.player == NULL) {
NSLog(@"fail to play audio");
return;
}
[self.player setVolume:1];
// 得到设备里面的音乐
[NSThread detachNewThreadSelector:@selector(getAllMusic) toTarget:self withObject:nil];
}#pragma mark - 获取设备ipod库音乐
- (void)getAllMusic
{
// 从ipod库中读出音乐
MPMediaQuery *everthing = [[MPMediaQueryalloc] init];
// 读取条件(谓语)
MPMediaPropertyPredicate *albumNamePredicate = [MPMediaPropertyPredicatepredicateWithValue:[NSNumbernumberWithInt:MPMediaTypeMusic]forProperty:MPMediaItemPropertyMediaType];
[everthingaddFilterPredicate:albumNamePredicate];
//
NSLog(@"logging items from a generic query...%@\n",everthing);
NSArray *itemsFromGenericQuery = [everthing items];
for (MPMediaItem *songin itemsFromGenericQuery) {
MusicModel *model = [[MusicModelalloc] init];
model.songName = [songvalueForProperty:MPMediaItemPropertyTitle];// 歌曲名称
NSLog(@"%@",model.songName);
model.albumTitle = [songvalueForProperty:MPMediaItemPropertyAlbumTitle];// 专辑名称
model.artistName = [songvalueForProperty:MPMediaItemPropertyArtist];// 艺术家
MPMediaItemArtwork *artwork = [songvalueForProperty:MPMediaItemPropertyArtwork];// 音乐专辑封面
UIImage *artworkImage = [artwork imageWithSize:CGSizeMake(60, 60)]; // 得到专辑图片,大小60*60
NSLog(@"-- %@",artworkImage);
if (artworkImage != nil) {
model.artworImage = artworkImage;// 专辑图片
}else{
model.artworImage = [UIImageimageNamed:@"artWorkImage.png"];
}
[self.allMusicArrayaddObject:model];
[self.allMPMediaItemArrayaddObject:song];
}
[self.tableViewreloadData];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
returnself.allMusicArray.count;
NSLog(@"%ld",self.allMusicArray.count);
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:@"musicCell"forIndexPath:indexPath];
MusicModel *model = [self.allMusicArrayobjectAtIndex:indexPath.row];
UIImageView *artworkImageView = (UIImageView *)[cellviewWithTag:100];
artworkImageView.image = model.artworImage;// 显示专辑图片
UILabel *songNamelabel = (UILabel *)[cellviewWithTag:101];
songNamelabel.text = model.songName;// 显示歌曲的名称
NSLog(@"%@",model.songName);
UILabel *artistNameLabel = (UILabel *)[cellviewWithTag:102];
artistNameLabel.text = model.artistName;// 显示艺术家
UILabel *albumTitileLabel = (UILabel *)[cellviewWithTag:103];
albumTitileLabel.text = model.albumTitle;// 显示专辑名称
return cell;
}
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
MPMediaItem *nowPalyingItem = [self.allMPMediaItemArrayobjectAtIndex:indexPath.row];
NSURL *mediaURL = [nowPalyingItemvalueForProperty:MPMediaItemPropertyAssetURL];
AVPlayerItem *currentAVPalyerItem = [AVPlayerItemplayerItemWithURL:mediaURL];
self.player = [AVPlayerplayerWithPlayerItem:currentAVPalyerItem];
[self.playerplay];
}
#pragma mark - 摇一摇,加速计
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
NSLog(@"%s开始晃动",__FUNCTION__);
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
NSLog(@"%s",__FUNCTION__);
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
NSLog(@"%s晃动结束",__FUNCTION__);
// 摇一摇换曲
NSInteger index =arc4random()%[self.allMPMediaItemArraycount];
NSLog(@"%ld",index);
MPMediaItem *nowPlayingItem = [self.allMPMediaItemArrayobjectAtIndex:index];
NSURL *mediaURL = [nowPlayingItemvalueForProperty:MPMediaItemPropertyAssetURL];
AVPlayerItem *currentAVPLayerItem = [AVPlayerItemplayerItemWithURL:mediaURL];
self.player = [AVPlayerplayerWithPlayerItem:currentAVPLayerItem];
[self.playerplay];
}