2010-05-03 16 views
0

Finch utilise OpenAL. Cependant, quand j'ai une instance de Sound, et disons -play, le son est joué. Lorsque j'appelle - jouez plusieurs fois l'une après l'autre de manière rapide, chaque lecture fait arrêter le son actuel et le redémarre.Comment jouer le même son plusieurs fois avec le chevauchement, en utilisant OpenAL ou Finch?

Ce n'est pas ce que je veux. Devrais-je créer plusieurs sources ou tampons pour que cela fonctionne? Ou devrais-je juste instancier plusieurs Sounds avec le même fichier?

Répondre

2

Il existe une classe RevolverSound exactement pour ce cas d'utilisation. Il est très simple, il alloue un certain nombre de Sound instances au préalable et les joue alors en rotation:

- (void) play 
{ 
    [[sounds objectAtIndex:current] play]; 
    current = (current + 1) % [sounds count]; 
} 

Cela signifie qu'il ya une limite stricte des sons qui peuvent jouer en même temps et l'utilisation de la mémoire va avec cette limite . Je n'ai pas trouvé que ce soit un gros problème en pratique, parce que quand il y a cinq sons ou plus qui jouent en même temps, il y a déjà un tel chaos sonore que vous ne remarquerez généralement pas que le premier n'a pas joué jusqu'à la fin avant de recommencer.

+0

ma faute. J'ai mal interprété l'exemple. Vous ne dites pas combien de fois ce "revolver" doit tirer. Cela se chevauche bien. Chose cool. Merci Tomáš! – dontWatchMyProfile

+0

À quel point l'utilisation d'une instance de RevolverSound plutôt que de Sound, est-elle généralement plus importante? Est-ce que ça fait mal si j'utilise toujours RevolverSound pour n'importe quoi, juste pour le cas où je pourrais vouloir se chevaucher? – dontWatchMyProfile