我正在开发我的第一个应用程序。它播放一首 mp3 歌曲。一切正常,但我需要应用程序识别声音完成,然后将按钮“暂停”图像更改为“播放”图像。我已经可以做到这一点,但只是在按下按钮时,而不是在歌曲结束时。
另一个问题是,当歌曲在停止->播放后重新开始时,它不会以之前的音量设置继续播放(有一个滑块)。播放器以最大音量启动。我可以更改音量滑块的位置,但我无法让应用程序在重新启动时尊重设置的音量。
任何帮助将不胜感激!非常感谢。
我正在开发我的第一个应用程序。它播放一首 mp3 歌曲。一切正常,但我需要应用程序识别声音完成,然后将按钮“暂停”图像更改为“播放”图像。我已经可以做到这一点,但只是在按下按钮时,而不是在歌曲结束时。
另一个问题是,当歌曲在停止->播放后重新开始时,它不会以之前的音量设置继续播放(有一个滑块)。播放器以最大音量启动。我可以更改音量滑块的位置,但我无法让应用程序在重新启动时尊重设置的音量。
任何帮助将不胜感激!非常感谢。
使用“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!
}
我在这里上传了示例代码。请检查一下。-> http://yahoo.jp/box/X7Hxfk
我没有做太多的 Objective-C,但看起来你需要实现一个委托。
我引用:“您实现了一个委托来处理中断(例如来电)并在声音播放完毕时更新用户界面。”
我只是在这里阅读 AVAudioPlayer 类参考: https ://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008067
你可以使用AVAudioPlayerDelegate protocol delegate
音频播放器播放完歌曲后(如果播放成功),将在音频播放器的委托对象中调用音频 PlayerDidFinishPlaying:successfully: 委托方法。我们可以像下面这样实现这个方法(这个方法在 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>