Usando mpmusicplayerController, configurando musicplayer.currentplaybacktime para procurar, mas leva em segundo lugar para entrar em vigor

StackOverflow https://stackoverflow.com/questions/2379165

Pergunta

Eu tenho um Uislider atuando como lavador. À medida que o polegar é arrastado, executo o seguinte:

- (void) _seekTo:(double)playbackTime {
     mPlayer.currentPlaybackTime = playbackTime;
}

Isso funciona bem, a música procura a frente. Ao liberar o polegar, reinicio o NSTIMER para enviar atualizações de tempo para manter o Uislider em sincronia. O problema é que, ao liberar o polegar, os primeiros pedidos de chamadas contêm o valor de tempo anterior. Isso faz com que o polegar volte à sua posição original antes de retornar ao novo valor. Muito desagradável.

Alguém tem alguma experiência com esse comportamento e uma maneira de corrigir? Posso fornecer um projeto de amostra se você quiser demonstrar essa anomalia.

Foi útil?

Solução

Talvez seja porque já existem dados decodificados no buffer quando você começa a procurar. Você procura um minuto à frente, mas há alguns milissegundos de áudio no buffer e, quando esses baldes jogam, o jogador relata sua posição no arquivo como atual. Somente então vêm os novos baldes da posição atualizada e o marcador começa a se comportar. (Apenas uma teoria.)

Você não poderia simplesmente filtrar os dados intermediários manualmente? Você sabe o quanto pulou usando o controle deslizante, então talvez possa armazenar a nova posição em uma variável e ignorar as atualizações do jogador até que elas se aproximem confortavelmente da nova posição do slider. (Espero que faça sentido.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top