我正在处理我的第一个应用。它播放mp3歌曲。一切正常,但我需要应用程序识别声音完成,然后将按钮“暂停”图像更改为“播放”图像。我已经可以这样做,但只是按下按钮时,而不是歌曲结束时。
另一个问题是,当歌曲在停止播放后重新开始播放时,它不会继续播放前一个音量设置(有一个滑块)。播放器以最大音量开始播放。我可以更改音量滑块位置,但我无法在重新启动时使应用程序尊重设置音量。
任何帮助将非常感谢! Thnx很多。
答案 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>