Завершение звука в iphone - PullRequest
0 голосов
/ 16 июня 2011

Можно ли принудительно завершить воспроизведение аудиофайла, прежде чем приступить к коду?В приведенном ниже примере я хотел бы, чтобы аудиофайл воспроизводился столько раз, сколько у меня есть элементов в массиве.текущий он заканчивает цикл, играя только один раз.Я использую AVAudioPlayer в структуре AVFoundation.

for (int i = 0; i<[Array count]; i++) {
    if ([Array objectAtIndex:i] == @"Red") {
        NSLog(@"red");
        [self.player play];
    }
    if ([Array objectAtIndex:i] == @"Blue") {
        NSLog(@"blue");
        [self.player play];
    }
    if ([Array objectAtIndex:i] == @"Green") {
        NSLog(@"green");
        [self.player play];
    }
    if ([Array objectAtIndex:i] == @"Yellow") {
        NSLog(@"yellow");
        [self.player play];
    }
}

Я также использую метод audioPlayerDidFinishPlaying, чтобы проверить, завершается ли он пять раз, но он достигает этого метода только один раз.

-(void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL) completed{
    if ((completed) == YES){
        NSLog(@"audio finish");
        return;
    }
}

Можно ли удерживать цикл for на месте во время воспроизведения звука?

теоретически консоль должна выглядеть так:

1 Ответ

1 голос
/ 17 июня 2011

Может быть, вы можете указать AudioPlayer для воспроизведения, когда вы получите уведомление о завершении воспроизведения, например:

int arrayIndex = 0
NSArray* array;  //initialized somewhere..


-(void)myFunction
{
  if(arrayIndex < [array length])
  {
    NSArray* colors = [NSArray arrayWithObjects:@"Red",@"Blue",@"Green",@"Yellow",nil];
    if( [colors indexOf:[array objectAtIndex:arrayIndex]] != NSNotFound )
    {
      NSLog( [array objectAtIndex:arrayIndex] );
      [self.player play];
    }
    arrayIndex++;
  }else{
    NSLog(@"audio finish");
  }
}

-(void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)     completed{
    if ((completed) == YES){
      [self myFunction];
    }
}

-(void)start_it_up
{
  arrayIndex = 0;
  [self myFunction];
} 
...