Перекрытие звуков - PullRequest
       1

Перекрытие звуков

0 голосов
/ 25 августа 2011

Почему моя музыка перекрывается? Есть ли способ играть в нее один за другим?

- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableArray *array = [NSMutableArray array];
[array insertObject: [[NSBundle mainBundle] pathForResource:@"Master of Puppets" ofType:@"mp3"] atIndex:0];
[array insertObject: [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"] atIndex:1];
[array insertObject: [[NSBundle mainBundle] pathForResource:@"Start" ofType:@"caf"] atIndex:2];
[array insertObject: [[NSBundle mainBundle] pathForResource:@"thx" ofType:@"m4v"] atIndex:3];
[array insertObject: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"aif"] atIndex:4];

for (int i=0; i < [array count]; i++)
{
theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[array objectAtIndex:i]] error:NULL]; 
theAudio.delegate = self;
[theAudio prepareToPlay];
[theAudio play];       
}

}

в .ч:

@interface STAMP_AudioViewController : UIViewController <AVAudioPlayerDelegate>{
AVAudioPlayer* theAudio;
}

@end

1 Ответ

3 голосов
/ 25 августа 2011

Реализация делегата audioPlayerDidFinishPlaying от AVAudioPlayerDelegate и запуск оттуда второй песни ...

NSMutableArray *array ;
int index = 0;

- (void)viewDidLoad
{
  [super viewDidLoad];
  NSMutableArray *array = [NSMutableArray array];
  [array insertObject: [[NSBundle mainBundle] pathForResource:@"Master of Puppets" ofType:@"mp3"] atIndex:0];
  [array insertObject: [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"] atIndex:1];
  [array insertObject: [[NSBundle mainBundle] pathForResource:@"Start" ofType:@"caf"] atIndex:2];
  [array insertObject: [[NSBundle mainBundle] pathForResource:@"thx" ofType:@"m4v"] atIndex:3];
  [array insertObject: [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"aif"] atIndex:4];

  theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[array  objectAtIndex:index]] error:NULL]; 
  theAudio.delegate = self;
  [theAudio prepareToPlay];
  [theAudio play]; 

  index++;      
}

Теперь проигрыватель воспроизводит первую песню .. И указанный ниже делегат сработает после того, как песня будет завершена ... затем воспроизведите вторую песню.

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
  [theAudio release];

  if(index > 4)//your array highest index
    return;

  theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[array  objectAtIndex:index]] error:NULL]; 
  theAudio.delegate = self;
  [theAudio prepareToPlay];
  [theAudio play];

  index++;
}

Эта логика должна работать .. Я не могу найти какую-либо функцию в AVAudioPlayer для изменения песни после инициализации. Так что нам нужно создать новый объект .. :(

...