2010-04-10 5 views
2

J'ai essayé d'écrire le plus petit morceau de code pour affiner un problème. Il ne s'agit que de quelques lignes et cela ne fonctionne pas, ce qui montre clairement que j'ai un malentendu fondamental sur l'utilisation de AudioFileReadPackets. J'ai lu les docs et d'autres exemples en ligne, et apparemment je ne comprends pas. Pourriez-vous m'expliquer?Je n'ai tout simplement pas AudioFileReadPackets

Voici ce que ce bloc devrait faire: J'ai déjà ouvert un fichier. Je veux lire juste un paquet - le premier du fichier - et ensuite l'imprimer. Mais il se bloque sur la ligne de AudioFileReadPackets:

AudioFileID mAudioFile2; 
    AudioFileOpenURL (audioFileURL, 0x01, 0, &mAudioFile2); 
    UInt32 *audioData2 = (UInt32 *)malloc(sizeof(UInt32) * 1); 
    AudioFileReadPackets(mAudioFile2, false, NULL, NULL, 0, (UInt32*)1, audioData2); 
    NSLog(@"first packet:%i",audioData2[0]); 

(Pour plus de clarté, je l'ai dépouillé toute la gestion des erreurs.)

Il est la ligne de AFRP qui se bloque sur. (Je comprends que les troisième et quatrième arguments sont utiles, et dans mon "vrai" code, je les utilise, mais ils ne sont pas nécessaires, n'est-ce pas? Alors, dans ce cas, NULL devrait fonctionner, non?) Alors Que se passe-t-il?

Tout guidage serait grandement apprécié.

Merci.

Répondre

4

Je pense que votre problème concerne le nombre d'arguments de paquets. Vous venez de créer un pointeur sur 0x00000001. Le problème est qu'il essaie d'utiliser ceci est une sortie du nombre de paquets réellement lus. Votre tampon audio peut être trop petit aussi. Selon la documentation, il est supposé être la longueur des paquets multipliée par la limite supérieure de la longueur du paquet.

Essayez ceci:

AudioFileID mAudioFile2; 
AudioFileOpenURL (audioFileURL, 0x01, 0, &mAudioFile2); 
UInt32 packetCount = 1; 
void *audioData2 = (void *)malloc(packetCount * maxPacketSize); 
AudioFileReadPackets(mAudioFile2, false, NULL, NULL, 0, &packetCount, audioData2); 
NSLog(@"first packet:%i",audioData2[0]); 

Pas vraiment sûr comment obtenir le MaxPacketSize (jamais travaillé à ce sujet).

Questions connexes