获取设备ipod库音乐,摇一摇换歌曲

本文介绍如何使用Objective-C开发一个iOS音乐播放器应用,包括从设备的iPod库读取音乐信息、显示音乐列表和播放音乐等内容。文章还涉及了使用AVFoundation框架处理音频播放、利用MPMediaQuery获取音乐元数据以及UITableView展示音乐信息等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

- (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];

    

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值