ios - 如何在单击新闻歌曲时停止 avaudioplayer 播放上一首歌曲?

标签 ios objective-c iphone avaudioplayer

我创建了一个带有按钮歌曲的 View 。

当我们点击按钮时,它会转到一个包含歌曲列表的表格。 当我们选择一首歌时,它会转到另一个 View 并播放这首歌。 每当播放歌曲时,我们都可以返回主视图或歌曲列表,歌曲将在后台播放,到这里为止一切正常。

但每当我尝试播放歌曲列表中的另一首歌曲时,上一首歌曲不会停止,而是继续与所选歌曲一起播放。

我的目标是在切换到不同 View 时播放歌曲。我已经完成了这一个,但我想要的是每当我从歌曲表中选择另一首歌曲时,它必须停止上一首歌曲并播放所选歌曲。

-(void)playOrPauseButtonPressed:(id)sender

{

[self.view addSubview:today_slokaText];

if(playing==NO)

{

[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;


[playButton setBackgroundImage:[UIImage imageNamed:@"Pause.png"] forState:UIControlStateNormal];

[self.view addSubview:today_slokaText];

 // Here Pause.png is a image showing Pause Buttomn

NSError *err=nil;

if (!audioPlayer)

{

[self loadSongAtIndex: selectedIndex];

playing=YES;

}

audioPlayer.numberOfLoops = 0;

[audioPlayer prepareToPlay];

[audioPlayer play];

audioPlayer.delegate=self;

if(!audioPlayer.playing)

{

[audioPlayer play];

activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

[self.view addSubview:self.activityIndicator];

self.activityIndicator.center = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2);

[self.activityIndicator startAnimating];

[playButton setBackgroundImage:[UIImage imageNamed:@"Pause.png"] forState:UIControlStateNormal];

[bg_Image addSubview:activityIndicator];

}

playing=YES;

}

else if (playing==YES)

{

[self.activityIndicator stopAnimating];

self.activityIndicator.alpha=0.0;

// [bg_Image addSubview:activityIndicator];

[playButton setBackgroundImage:[UIImage imageNamed:@"play12.png"] forState:UIControlStateNormal];

[self.view addSubview:today_slokaText];

[audioPlayer pause];

playing=NO;

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateViewForPlayerState) userInfo:nil repeats:YES];

[self.view addSubview:today_slokaText];

}

}

/********************************************* 从服务加载歌曲 **********************************************/

- (void)loadSongAtIndex:(NSInteger) songIndex

{

audioSession=[AVAudioSession sharedInstance];

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

[[AVAudioSession sharedInstance] setActive: YES error: nil];

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

urlsArray=[[NSMutableArray alloc]initWithObjects:@"http://01_ARDHANAREESWARASTOTRAM.mp3",@"http://02_AshtaLakshmiStotram.mp3",@"http://03_AYIGIRINANDININANDITHAMEDINI.mp3",, nil];

NSString *sourcePath = [urlsArray objectAtIndex:songIndex];

NSURL *audioURL=[NSURL URLWithString:sourcePath];

NSData *data=[NSData dataWithContentsOfURL:audioURL];

audioPlayer = [[AVAudioPlayer alloc] initWithData:data  error:NULL];

audioPlayer.numberOfLoops = 0;

[audioPlayer prepareToPlay];

[audioPlayer play];

audioPlayer.delegate=self;

if(!audioPlayer.playing)

{

[audioPlayer play];

}

if (self.audioPlayer)

{

[self updateViewForPlayerInfo];

[self updateViewForPlayerState];

[self.audioPlayer setDelegate:self];

}


}

最佳答案

每次从表中加载歌曲时,您都在创建音频播放器的实例。这会创建多个实例。因此,每当您播放一首歌曲时,它将在新的音频播放器实例中播放,并且之前的歌曲(具有不同的音频播放器实例)也将继续播放。所以我建议您应该在类级别创建音频播放器,而不是每次都创建实例。这将保存单个实例并为您播放一首歌曲。

关于ios - 如何在单击新闻歌曲时停止 avaudioplayer 播放上一首歌曲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28624401/

相关文章:

iphone - 我可以做一个使用与用户设置不同的语言的 iPhone 应用程序吗?

ios - 如何检查 iOS 中 SSL 证书的安全性?

ios - 核心数据迁移 删除实体数据

ios - UITableView contentOffset 行为异常

ios - UITableView 页眉和页脚高度与 Storyboard 布局不对应

iPhone 应用程序简单计算器 - objective-c 错误

iphone - objective-c 源 locationManager 在自己的类中

objective-c - UINavigationController navigationBarHidden

ios - 检查重复事件,而不在IOS的事件存储中获取所有事件

iphone - 有没有简单的方法或库可以让文本发光?