等到超级库中的文件加载

Wait until file load in Superpowered Library

我正在寻找一些等待 SuperpoweredAdvancedAudioPlayer 打开文件的解决方案。我制作了 ios objective-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];

它不会在同一时间完美地开始播放,最后一首或两首曲目以 .5s-.8s 延迟开始(第一个示例中的延迟大于第二个示例中的延迟)。如何等到打开成功再开始播放?我没有在超级文档中找到任何功能。

音频处理发生在音频处理回调中,由音频堆栈在高优先级线程中定期调用。

我猜您是在另一个线程(也许是主线程)中调用 play() 方法。当您调用这些方法时,音频处理回调可能会在两者之间触发,造成一个缓冲区大小的延迟。

解决方案是在音频处理回调开始时调用play()方法。

要检查 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;} 
    }
}