如何使用AVAudioplayer在ios中播放audioplayer

时间:2014-03-25 06:31:25

标签: ios objective-c

我正在尝试以编程方式创建AVAudioPlayer。如果我播放audioplayer,我会遇到小问题。 我在UITableview中显示12个音频项目。如果我点击相应歌曲将播放的第一个项目。我不应该点击任何传递按钮。我点击后退按钮并点击第二个项目。如果我点击第二个项目,音频视图控制器将显示.I点击播放按钮歌曲显示。在第一首歌和第二首歌同时播放。这是我的问题。请帮助我任何人。

-(void)playOrPauseButtonPressed:(id)sender
{
if(playing==NO)
{
[playButton setBackgroundImage:[UIImage imageNamed:@"Pause.png"] forState:UIControlStateNormal];
// Here Pause.png is a image showing Pause Button.
NSError *err=nil; AVAudioSession *audioSession=[AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
NSLog(@"%@ %d",urlsArray,selectedIndex);
NSString *sourcePath=[urlsArray objectAtIndex:selectedIndex];
NSData *objectData=[NSData dataWithContentsOfURL:[NSURL URLWithString:sourcePath]];
audioPlayer = [[AVAudioPlayer alloc] initWithData:objectData error:&err];
audioPlayer.numberOfLoops = 0;
[audioPlayer prepareToPlay]; audioPlayer.delegate=self; [audioPlayer play]; playing=YES; } else if (playing==YES)
{ [playButton setBackgroundImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
[audioPlayer pause];
playing=NO;
} if (self.audioPlayer)
{ [self updateViewForPlayerInfo];
[self updateViewForPlayerState];
[self.audioPlayer setDelegate:self];
} }

-(void)updateViewForPlayerInfo

{

self.songDuration.text = [NSString stringWithFormat:@"%d:%02d", (int)self.audioPlayer.duration / 60, (int)self.audioPlayer.duration % 60, nil];

NSLog(@"%f", self.audioPlayer.duration);

self.progressBar.maximumValue = self.audioPlayer.duration;

self.volumeSlider.value = self.audioPlayer.volume;

}

-(void)updateViewForPlayerState

{

[self updateCurrentTime];

if (self.updatedTimer)

{

[self.updatedTimer invalidate];

}

if (self.audioPlayer.playing)

{

self.updatedTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateCurrentTime) userInfo:self.audioPlayer repeats:YES];

}

}

-(void)updateCurrentTime

{

//NSLog(@"self.audioPlayer.currentTime = %f", self.audioPlayer.currentTime);

self.currentTime.text = [NSString stringWithFormat:@"%d:%02d", (int)self.audioPlayer.currentTime / 60, (int)self.audioPlayer.currentTime % 60, nil];

self.progressBar.value = self.audioPlayer.currentTime;

}

-(void)volumeSliderMoved:(UISlider *)sender

{

self.audioPlayer.volume=[sender value];

}

3 个答案:

答案 0 :(得分:0)

回去时停止播放器。也许在ViewWillDisappear中或在创建audioplayer的新实例之前,您可以调用

if(self.audioplayer) {
  [self.audioPlayer stop];
  self.audioPlayer = nil;
}

答案 1 :(得分:0)

在创建AVAudioPlayer的新实例之前,使用以下行释放或取消现有的播放器实例

sourcePath=Nil;
[audioPlayer stop];
audioPlayer = Nil;

答案 2 :(得分:0)

在初始化AVAudioPlayer之前,删除之前运行的所有实例。

//YOUR STUFF


NSString *sourcePath=[urlsArray objectAtIndex:selectedIndex];

NSData *objectData=[NSData dataWithContentsOfURL:[NSURL URLWithString:sourcePath]];

for (AVAudioPlayer *a in urlsArray) 
    [a stop];

audioPlayer = [[AVAudioPlayer alloc] initWithData:objectData error:&err];

audioPlayer.numberOfLoops = 0;

//REST STUFF