2016-11-29 45 views
1

我正在尋找一些解決方案,等待SuperpoweredAdvancedAudioPlayer打開文件。我使用ios objective-c應用程序在哪裏我想同時播放多個軌道。但是,當我嘗試以這種方式啓動的軌道:等到文件加載到Superpowered Library

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何時打開和加載文件,我必須在playerEventCallback中使用SuperpoweredAdvancedPlayerEvent_LoadSuccess。然後球員的同步開始好得多。

這是我的新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()方法。