audioPlayerDidFinishPlaying从不触发
我创build了一个自定义类来处理audio播放。
AudioPlayback.h
#import <Foundation/Foundation.h> #import "AVFoundation/AVAudioPlayer.h" #import <AVFoundation/AVFoundation.h> @interface AudioPlayback : NSObject <AVAudioPlayerDelegate> { AVAudioPlayer *player; BOOL playing; NSTimeInterval duration; } @property (nonatomic, assign) AVAudioPlayer *player; @property (readonly) BOOL playing; @property (readonly) NSTimeInterval duration; -(NSTimeInterval)GetSoundFileDuration:(NSString *) sound_file_name; -(void)PlaySoundFile:(NSString *) sound_file_name; -(void)play; -(void)stop; - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag; @end
然后,在AudioPlayback.h中
#import "AudioPlayback.h" @implementation AudioPlayback @synthesize player; -(id)init { self = [super init]; if (self != nil) { player = [[AVAudioPlayer alloc] init]; [player initWithContentsOfURL:nil error:nil]; player.delegate = self; } return self; } -(void)PlaySoundFile:(NSString *) sound_file_name { NSURL *sound_file = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:sound_file_name ofType:@"mp3"]]; [player initWithContentsOfURL:sound_file error:nil]; [player prepareToPlay]; [player play]; [sound_file release]; } ... - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { NSLog(@"audioPlayerDidFinishPlaying"); }
callback从不触发。 我错过了什么明显的?
我认为“ player.delegate = self
”太早。 您在“ PlaySoundFile
”中再次“ initWithContentsOfURL
”,我认为这会导致问题。
尝试在“ PlaySoundFile
”方法中的“ [player prepareToPlay]
”之前放置“ player.delegate = self
”