2016-11-29 9 views
1

SuperpoweredAdvancedAudioPlayerがファイルを開くまで待つための解決策を探しています。私は複数のトラックを同時に演奏したいと思っています。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); 

または私は機能でこれをラップし、このようなものにする:それは、同じ時間で完全に1をプレイを開始しません

[self openPlayers:row] 
    [self playAll]; 

をしかし、私はこの方法でトラックを起動しようとすると、または2つの最後のトラックは.5s-.8sの遅延で始まります(最初の例では2番目の遅延よりも大きい)。オープンが成功するまで待ってからプレーを開始する方法は?私は、超電力で書かれたドキュメンテーションの中でそれに対して何の機能も見つけられませんでした。

答えて

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()メソッドを呼び出していると思います。これらのメソッドを呼び出すと、オーディオ処理コールバックが間に発生し、1つのバッファサイズの遅延が発生することがあります。

解決策は、オーディオ処理コールバックの開始時にplay()メソッドを呼び出しています。

関連する問題