2010-11-19 37 views
0

J'essaie d'utiliser la classe MixerHostAudio d'Apple pour mixer et lire des fichiers audio spécifiés par l'utilisateur.Problème lors de l'utilisation de la classe MixerHostAudio d'Apple pour lire des fichiers audio

Les fichiers de classe peuvent être trouvés ici: http://developer.apple.com/library/ios/#samplecode/MixerHost/Listings/Classes_MixerHostAudio_h.html

Pour faire la classe MixerHostAudio lire les fichiers spécifiés par l'utilisateur, j'instancié la classe avec le NSURL des fichiers. Cela fonctionne très bien pour la première instanciation, mais quand j'ai voulu changer les fichiers audio joués en libérant l'ancienne classe MixerHostAudio et en en affectant un nouveau, l'application se bloque avec "EXC_BAD_ACCESS" secondes après que le son commence à être lu. Après avoir fait du débogage, j'ai remarqué que l'erreur se produisait dans inputRenderCallback, où AudioUnitSampleType (audioDataLeft et audioDataRight) de soundStructPointerArray est nul.

Cela fait partie du code où l'erreur est survenue:

for (UInt32 frameNumber = 0; frameNumber < inNumberFrames; ++frameNumber) { 
    outSamplesChannelLeft[frameNumber]     = dataInLeft[sampleNumber]; 
    if (isStereo) outSamplesChannelRight[frameNumber] = dataInRight[sampleNumber]; 

Y at-il de toute façon pour moi d'instancier plusieurs instances de MixerHostAudio sans avoir une erreur ??

Toute aide est grandement appréciée.

Répondre

0

Il semble que le code ne réinitialise pas toutes les données dans le rappel. Je ne connais pas ce code source, mais vous devez vérifier que toutes les allocations de mémoire sont bien gérées et qu'il n'y a pas de pointeurs périmés. Recherchez particulièrement les variables globales ou statiques qui traînent alors qu'elles ne devraient pas l'être, puisque vous dites en instancier une seconde avant qu'elle ne se bloque.