私はキーボードのようなアプリを持っていて、新しい AVAudioPlayer をそれぞれ NSMutableArray に追加して、サウンドをオーバーレイできるようにしています。私の問題は、そのデリゲート関数です
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
短い間隔でキーストロークがある場合は起動されません。たとえば、0.5秒以上の間隔でストロークすると、すべて正常に動作します。理由はありますか?彼のサウンド再生が終了したら、メモリを解放して配列からオブジェクトを削除したいと考えています。
アップデート
.h
@interface .. <AVAudioPlayerDelegate>
{
NSMutableArray *soundObjects;
}
@property (nonatomic,strong) AVAudioPlayer *audioPlayer;
.m
-(void)playSound {
//
// play sound
//
_audioPlayer = [self loadWav:_soundID];
_audioPlayer.delegate = self;
[soundObjects addObject:_audioPlayer];
AVAudioPlayer *temp = [soundObjects objectAtIndex:soundIndex];
soundIndex = [soundObjects count];
[temp play];
}
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
#ifdef DEBUG_SOUND
NSLog(@"FLAG");
soundIndex--;
[soundObjects removeObjectAtIndex:soundIndex];
#endif
}
- (AVAudioPlayer *)loadWav:(NSString *)filename {
NSURL * url = [[NSBundle mainBundle] URLForResource:filename withExtension:@"mp3"];
NSError * error;
AVAudioPlayer * player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if (!player) {
#ifdef DEBUG_MODE
NSLog(@"Error loading %@: %@", url, error.localizedDescription);
#endif
} else {
[player prepareToPlay];
}
return player;
}