2010-09-17 29 views
0

J'essaye de jouer un très petit fichier audio - il mesure à peu près 0,05 s, et c'est un fichier .wav non compressé.Tic-tac à conserver en mémoire. AVAudioPlayer? SystemSounds? Core Audio?

Rgiht maintenant, j'utilise AVAudioPlayer pour jouer le son.

J'ai l'intention de jouer le son avec une grande rapidité à côté d'un spinner, à la fois The Price Is Right ou Wheel of Fortune. Si j'instancie le AVAudioPlayer avec un nombre de boucles de 100, il joue en effet le son très rapidement comme je m'y attendais.

Si j'exécute [audioPlayer play] sur chaque 'tick' du spinner, l'audio tombe terriblement derrière. Je suppose que, contrairement à la configuration d'un nombre de boucles élevé, [audioPlayer play] nécessite la configuration complète et le démontage de la mémoire du clip audio pour chaque lecture.

Y a-t-il un moyen de forcer le clip à rester en mémoire pendant une durée plus longue? C'est un son très fréquent, et en tant que tel serait également acceptable avec le maintien pendant toute la durée de l'application.

Répondre

0

Si vous dépendez d'une synchronisation plus précise, vous pouvez essayer d'utiliser l'une des autres API de son. Audio Unit RemoteIO est compliqué, mais permet le timing le plus précis de la lecture des sons non compressés. OpenAL et files d'attente audio sont deux autres options.

+0

Avez-vous des commentaires sur les avantages/inconvénients de ces trois? – MikeyWard

+1

RemoteIO est l'API sous-jacente pour toutes les E/S audio intégrées. Elle offre la latence la plus faible, mais constitue l'API la plus complexe. Les files d'attente audio sont plus faciles à configurer et à utiliser, mais ont une latence plus élevée. OpenAL est une API de plus haut niveau avec plus de fonctionnalités (panoramique 3D, etc.), mais avec un contrôle approprié pour les sons de jeux. – hotpaw2

+0

Merci pour cette info. En ce moment je regarde dans RemoteIO et AudioQueues, et posterai ici celui que j'utilise et pourquoi/comment. – MikeyWard