2013-12-06 3 views
0

Я пытаюсь воспроизвести два разных файла в очереди. Один из них - интро-трек, а другой - основной трек.Как использовать AudioServicesRemoveSystemSoundCompletion Обратный звонок

Мой метод для настройки воспроизведения музыки

-(void)musicPlayBack:(CFStringRef)soundName{ 

    CFBundleRef mainBundle = CFBundleGetMainBundle(); 
    CFURLRef soundFileURLRef; 
    soundFileURLRef = CFBundleCopyResourceURL(mainBundle 
               , (CFStringRef) soundName, CFSTR ("mp3"), NULL); 
    SystemSoundID soundID; 
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
    AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, FinishedSoundPlayback, NULL); 
    AudioServicesPlaySystemSound(soundID); 

} 

-(void)playIntro:(NSString *)introTrackName{ 
    NSArray *introTracks = [NSArray arrayWithObjects:@"heybaby",@"dumbson",@"heybadass", 
          @"heydarling",@"heyhoney",@"madam",@"sir", nil]; 
    [self musicPlayBack:(__bridge CFStringRef)([introTracks objectAtIndex:2])]; 
} 

-(void)playNotification:(NSString *)notificationTrackName{ 

    [self musicPlayBack:(__bridge CFStringRef)(notificationTrackName)]; 
} 

-(void)notifyWithSound:(int)batteryCase{ 
    NSArray *mainSoundTracks = [NSArray arrayWithObjects:@"ten",@"twenty",@"twentyfive",@"thirty", 
           @"fourty",@"fifty",@"sixty",@"seventy",@"seventyfive", 
           @"eigthy",@"ninty",@"hundred",nil]; 
    [self playIntro:@"someRandomIntro"]; 
    while (introFinished==NO) { 
     if (introFinished==YES) { 
      break; 
     } 
    } 
    [self playNotification:[mainSoundTracks objectAtIndex:batteryCase]]; 


} 

Это то, что я есть, прежде чем @implementation

BOOL introFinished = NO; 

static void FinishedSoundPlayback(SystemSoundID mySSID, void* data){ 
    introFinished = YES; 
    AudioServicesRemoveSystemSoundCompletion (mySSID); 
    NSLog(@"completion Callback"); 
} 

Проблема не FinishedSoundPlayback никогда не вызывается.

ответ

0

Вы зарегистрировали системный звук под названием «soundId», и вы ожидаете обратного вызова для «mySSID». Это должно быть одно и то же имя. BTW Я не рекомендую этот API для воспроизведения музыки из-за ее ограничения.

Смежные вопросы