2010-08-08 5 views
0

Je suis aux prises avec un lecteur audio AudioQueue que j'ai implémenté. J'ai d'abord pensé qu'il tronquait le 1er 1/2 de l'audio qu'il jouait mais lors du chargement de fichiers plus volumineux je remarque des écarts tous les 1/2 seconde. Je l'ai exécuté en débogage et j'ai confirmé que je charge correctement la file d'attente avec l'audio. (Il n'y a pas de grosses régions nulles chargées dans la file d'attente.) Il joue sans problème (pas de trous) sur le simulateur mais sur l'appareil, j'ai des trous comme s'il manquait un morceau d'audio. Dans mon application, je décompresse puis extrait l'audio d'un objet mémoire NSMutableData. Je nourris ces données dans la file d'attente audio. J'ai une implémentation correspondante dans la même application qui joue l'audio wave et cet exemple fonctionne sans problème sur les clips audio longs et courts. Je compare l'implémentation de l'onde à l'autre qui fait la décompression. la seule différence entre les deux est la façon dont je découvre les méta-données audio et où je reçois les échantillons audio pour la mise en file d'attente. Dans l'implémentation de l'onde, j'utilise AudioFileGetProperty et AudioFileReadPackets pour obtenir ces données. Dans l'autre cas, je dérive les données avant la main en utilisant des ivars mis en cache chargés pendant les rappels de mon décompresseur. Les métadonnées correspondent à la fois pour les implémentations compressées et en mode wave. J'ai exécuté le code dans des instruments et je ne vois rien prendre plus de 1ms dans ma logique de livraison/mise en file d'attente de paquets audio pendant la lecture. Je suis complètement perdu. Veuillez parler si vous avez une idée de la façon de résoudre la situation.AudioQueue lacunes dans la lecture

Répondre

0

J'ai finalement résolu ce problème. J'ai trouvé que si je sautais les 44 premiers octets (la taille exacte d'un en-tête d'onde) de l'audio alors il joue correctement sur l'appareil. Il paie correctement sur la sim indépendamment de si je saute 44 ou non. Étrange et je ne sais pas pourquoi mais c'est ainsi que ça fonctionne.

Questions connexes