y at-il un callback de lecture fini avec finch? Similaire à - AudioPlayerDidFinishPlaying dans le truc avaudioplayer? regardant à travers le code je ne pouvais pas trouver quelque chose qui le référencé.fini de jouer callback audio avec finch
Répondre
Il n'y a pas de rappel dans Finch, car OpenAL ne le supporte pas. (Ou du moins il ne le supporte pas quand je regardais dernier.) Vous pouvez faux comme ceci:
- (void) playSoundWithCallback {
[someSound play];
[someDelegate performSelector:@selector(soundDidFinishPlaying:)
withObject:someSound afterDelay:someSound.duration];
}
Je n'ai pas essayé, mais il est un code simple, il devrait fonctionner correctement. Eh bien ... au moins jusqu'à ce que vous commencez à jouer avec la hauteur et donc la vitesse du son :)
@zoul: Je sais que c'est une réponse tardive. Mais j'ai remarqué que la réponse n'est pas correcte. Que faire si je mets le son en pause ou s'il y a une interruption du système. Dans ce cas, vous recevrez un rappel même si le son n'est pas encore terminé. Veuillez lire le paragraphe "4.3.6 Gestion de l'exécution de la source" des spécifications openAL pour une gestion correcte.
Voici un hack avec un correctif de hauteur si vous ne vous souciez pas des interruptions. Open12 change la durée de lecture du son joué lorsque la hauteur n'est pas 1.0. (il ne semble pas possible d'interroger cette nouvelle longueur à partir d'OpenAL, car les paramètres AL renvoient les mêmes valeurs qu'avant)
La hauteur varie entre 0,5 et 2,0f. Donc, si l'on suppose pas à 0,5 est exactement deux fois plus longtemps, et pas à 2.0 est exacty moitié aussi longtemps, nous devrions être en mesure d'utiliser pas comme multiplicateur:
- (void) playSoundWithCallback {
[someSound play];
[someDelegate performSelector:@selector(soundDidFinishPlaying:)
withObject:someSound afterDelay: someSound.duration * (1.0/someSound.pitch) ];
}
Je n'ai pas creusé trop profondément dans Finch/OpenAL, mais il pourrait y avoir un moyen d'interroger pour voir si un son joue ou non? Ce serait un peu plus compliqué, mais fonctionnerait même si le terrain change. – Adam