2016-11-29 12 views
1

Я искал какое-то решение для ожидания, пока SuperpoweredAdvancedAudioPlayer не откроет файл. Я делаю приложение ios Object-C, где я хочу одновременно воспроизводить несколько треков. Но когда я пытаюсь запустить треки таким образом:Дождитесь загрузки файла в супермощной библиотеке

player1->open([[[NSBundle mainBundle] pathForResource:[[tracksNamesBigArray objectAtIndex:row] objectAtIndex:0]ofType:@"mp3"] fileSystemRepresentation]); 
     player1->play(true); 

    player2->open([[[NSBundle mainBundle] pathForResource:[[tracksNamesBigArray objectAtIndex:row] objectAtIndex:1] ofType:@"mp3"] fileSystemRepresentation]); 
    player2->play(true); 

    player3->open([[[NSBundle mainBundle] pathForResource:[[tracksNamesBigArray objectAtIndex:row] objectAtIndex:2] ofType:@"mp3"] fileSystemRepresentation]); 
    player3->play(true); 

    player4->open([[[NSBundle mainBundle] pathForResource:[[tracksNamesBigArray objectAtIndex:row] objectAtIndex:3] ofType:@"mp3"] fileSystemRepresentation]); 
    player4->play(true); 

или когда я обернуть это в функциях и сделать что-то вроде этого:

[self openPlayers:row] 
    [self playAll]; 

Он не начинает играть совершенно в то же время, один или 2 последних трека начинается с задержки .5s-.8s (в первом примере задержка больше, чем во втором). Как подождать до открытия, а затем начать играть? Я не нашел в ней каких-либо функций для сверхдержавой документации.

ответ

2

Чтобы проверить, открывается ли SuperpoweredAdvancedAudioPlayer и загружает файлы, я должен использовать SuperpoweredAdvancedPlayerEvent_LoadSuccess в playerEventCallback. Тогда синхронизация начала игроков намного лучше.

Это мой новый playerEventCallback:

void playerEventCallback1(void *clientData, SuperpoweredAdvancedAudioPlayerEvent event, void *value) { 
    RootViewController *self = (__bridge RootViewController *)clientData; 
    switch(event){ 
     case SuperpoweredAdvancedAudioPlayerEvent_LoadSuccess:{ 
      RootViewController *self = (__bridge RootViewController *)clientData; 
      NSLog(@"Player1 load success"); 
      self->loadIndicator++; 
      break; 
     } 
     case SuperpoweredAdvancedAudioPlayerEvent_EOF:{ 
      self->player1->pause(); 
      self->player1->setPosition(0, true, false); 
      break;} 
    } 
} 
2

Обработка звука происходит в обратном вызове обработки звука, который периодически вызывается в потоке с высоким приоритетом звуковым стеком.

Я предполагаю, что вы вызываете методы play() в другом потоке, возможно, в основном потоке. Когда вы вызываете эти методы, обратный вызов обработки звука может срабатывать между ними, заставляя задерживать один размер буфера.

Решение вызывает методы play() в начале обратного вызова обработки звука.

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

  • Нет связанных вопросов^_^