我的应用如何识别出一首歌完成了?

时间:2013-02-12 16:26:35

标签: iphone xcode avaudioplayer

我正在处理我的第一个应用。它播放mp3歌曲。一切正常,但我需要应用程序识别声音完成,然后将按钮“暂停”图像更改为“播放”图像。我已经可以这样做,但只是按下按钮时,而不是歌曲结束时。

另一个问题是,当歌曲在停止播放后重新开始播放时,它不会继续播放前一个音量设置(有一个滑块)。播放器以最大音量开始播放。我可以更改音量滑块位置,但我无法在重新启动时使应用程序尊重设置音量。

任何帮助将非常感谢! Thnx很多。

3 个答案:

答案 0 :(得分:1)

使用“AVAudioPlayerDelegate协议委托”时,请不要忘记设置委托(例如)如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *path = [[NSBundle mainBundle] pathForResource:@"33fr" ofType:@"mp3"];
    NSURL *fileURL = [NSURL fileURLWithPath:path];
    NSError *error = nil;

    myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];

    if (error) {
         NSLog(@"error = %@", error);
         return;
         }

    [myPlayer setDelegate:self]; <<=== HERE!

}

我在这里上传了示例代码。请检查一下。 - &GT; http://yahoo.jp/box/X7Hxfk

答案 1 :(得分:0)

我没有做过很多Objective-C,但看起来你需要实现一个委托。

我引用:“您实施代理来处理中断(例如来电),并在声音播放完毕后更新用户界面。”

我刚刚在这里阅读AVAudioPlayer类参考: https://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008067

答案 2 :(得分:0)

您可以使用AVAudioPlayerDelegate protocol delegate

  

音频播放器播放完歌曲后(如果是这样的话)   成功),音频PlayerDidFinishPlaying:成功:委托   方法将在音频播放器的委托对象中调用。我们   可以像下面这样实现这个方法(这个方法在   AVAudioPlayerDelegate协议):

 - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player  successfully:(BOOL)flag
{ 
   if (flag)
{   
 NSLog(@"Audio player stopped correctly.");
  } 
else 
{    NSLog(@"Audio player did not stop correctly."); 
 }  
  if ([player isEqual:self.audioPlayer])
{    self.audioPlayer = nil; 
 }
 else
 {    /* This is not the player */  }
  }
<。>在.h文件中添加委托,如下面的代码

@interface yourViewController : UIViewController <AVAudioPlayerDelegate>