2011-01-03 1 views
0

J'essaie de faire l'enregistrement en utilisant AudioUnit pour l'application iPhone.EXC_BAD_ACCESS de AudioBuffer

Changements: (début) J'ai ajouté le code suivant

bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer)); 
    bufferList->mNumberBuffers = 1; 
    bufferList->mBuffers[0].mNumberChannels = 2; 
    bufferList->mBuffers[0].mDataByteSize = 1024; 
    bufferList->mBuffers[0].mData = calloc(256, sizeof(uint32_t)); 
Changes: (fin)


static OSStatus recordingCallback(void *inRefCon, 
            AudioUnitRenderActionFlags *ioActionFlags, 
            const AudioTimeStamp *inTimeStamp, 
            UInt32 inBusNumber, 
            UInt32 inNumberFrames, 
            AudioBufferList *ioData) { 
    OSStatus status; 
    status = AudioUnitRender(appdelegate->audioUnit, 
          ioActionFlags, 
          inTimeStamp, 
          inBusNumber, 
          inNumberFrames, 
          appdelegate->bufferList); 
    if(status != 0) 
    NSLog(@"AudioUnitRender status is %d", status); 
    SInt16* samples = (SInt16*)(ioData->mBuffers[0].mData); 
    ..... 
}

fixe: (Je reçois OSStatus -50 code d'erreur) - Parce que je ne l'ai pas initialiser la bufferList.

Je suis EXC_BAD_ACCESS de AudioBuffer (ioData-> mBuffers [0] .mData).

Je ne suis pas sûr de cette erreur. S'il vous plaît aidez-moi à le résoudre.

+0

Dans quoi votre bufferList est-elle initialisée? Les éléments de cette liste sont généralement ceux où les échantillons enregistrés sont placés. – hotpaw2

+0

Je n'ai rien initialisé dans bufferList. Mais je lis les données de ioData. – jfalexvijay

+0

J'ai eu le problème. En fait AudioBufferList (je veux dire ioData) n'a pas de données. C'est pourquoi, c'est donner cette erreur. Mais je ne sais pas comment le réparer. – jfalexvijay

Répondre

0

Vous envoyez un message à un objet désalloué. Dans XCode allez dans Projet -> Modifier un exécutable actif -> Arguments -> Cliquez sur le bouton "plus", ajoutez NSZombieEnabled et définissez sa valeur sur YES. En faisant cela, vous pouvez déboguer votre application et découvrir quel objet désalloué reçoit encore des messages. Mais n'oubliez pas de désactiver cet argument sur votre projet par la suite.

+0

Avez-vous une idée pour résoudre le problème? La question est; AudioBufferList (ioData) n'a pas de données. Donc seulement c'est donner une erreur. – jfalexvijay