2009-10-29 11 views
0

Je travaille sur une application de métronome depuis un certain temps maintenant. Suite à l'application de métronome Apple'e, j'ai utilisé une minuterie sur un thread d'arrière-plan (haute priorité) pour jouer les sons du système. Mes résultats sont corrects mais loin d'être parfaits. Certains problèmes auxquels je fais face sont:Pour un tempo cohérent sur iPhone, existe-t-il une meilleure solution que les sons système?

  • l'application ne tient pas vraiment le temps, bien qu'il semble que cela ne
  • je ne peux pas faire grand-chose sur le thread principal alors que le fil de son est en cours d'exécution qu'il obtient vraiment lent
  • Si j'appuie sur le bouton de verrouillage ou sur les boutons de volume de l'appareil, le tempo devient détraqué.
  • sons système ne jouent pas lorsque le téléphone est silencieux

J'ai acheté un métronome sur l'App Store d'hier et a constaté que cette application n'a eu aucune des questions ci-dessus. Il n'utilisait pas les sons du système car l'inhibition de l'iPhone n'arrêtait pas la lecture. Maintenant, je me demande si quelqu'un peut me guider vers un cadre meilleur et plus robuste pour cette tâche?

Répondre

2

Les bibliothèques audio OSX sont appelées "Core Audio". Il existe différentes façons d'interagir avec le matériel audio et les frameworks Core Audio. Il y a OpenAL (comme mentionné dans un autre commentaire) qui est une approche standard multi-plateforme de l'audio, tout comme OpenGL est pour les graphiques. Il y a aussi l'unité audio qui est une interface basée sur le rappel directement au matériel audio qui vous permet de fournir de l'audio PCM brut en temps réel. Les unités audio sont extrêmement limitées dans le temps, donc si vous recherchez un rythme métronomique, les Audio Units peuvent le faire pour vous. Il y a également une couche au-dessus des unités audio connues sous le nom AudioQueue qui vous permet de programmer un flux d'audio pour le jeu en temps réel. L'un des avantages de AudioQueue est qu'il peut décoder automatiquement les formats compressés tels que MP3 ou AAC. Recherche sur "Core Audio Overview" dans les documents pour en savoir plus sur les différents cadres audio pour iPhone.

+0

merci Neil. Il semble que les unités audio (et éventuellement la file d'attente audio) correspondent exactement à ce que je cherchais. – infiniteloop

1

Vous pouvez utiliser OpenAL pour travailler avec le son. Il utilise une API de bas niveau et fonctionne rapidement. Aussi, vous devriez lire AudioSessionProgrammingGuide d'Apple. Vous y trouverez de nombreuses réponses à vos questions éventuelles.

+0

je suis tout à fait intimidée par OpenAL pour le moment, donc je pense que je vais unités de recherche audio en premier. Merci! – infiniteloop

+1

Si vous voulez juste jouer de la musique en arrière-plan sans positionnement, c'est plutôt simple. Vous pouvez lire ce tutoriel. http://benbritten.com/2008/11/06/openal-sound-on-the-iphone/comment-page-1/#comment-292 – Morion

+0

merci! J'ai commencé à suivre le tutoriel. cela semble très bien! – infiniteloop

1

Je vais commencer une flamme ici, donc si vous n'aimez pas ce commentaire. Mais avez-vous réellement regardé la documentation qu'Apple vous fournit? La page "Getting Started with Audio" de la documentation répertorie plusieurs façons de lire l'audio, l'une indique explicitement "Pour lire les sons avec la plus faible latence d'E/S, ou pour fournir une entrée et une sortie audio simultanées, ..." (I je suis probablement une violation de NDA ici peu importe)

au moins pic à la documentation avant de poser une question ici

+0

merci. J'ai déjà vécu plus de "Getting Started with Audio". Je suis débutant et je n'ai pas vraiment compris les cadres audio.Je cherchais juste un pointeur dans la bonne direction en ce qui concerne mon problème. Maintenant que j'ai compris cela, je peux prendre le temps de me familiariser avec les frameworks pertinents (en particulier Audio Units et Audio Queue). – infiniteloop