等到超级库中的文件加载
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;}
}
}
我正在寻找一些等待 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;}
}
}