ошибка в коде аудиоустройства -remoteIO для iphone

У меня есть этот код, чтобы читать образцы буфера, но я получаю странную ошибку компоновщика mach-o, платформа аудиоустройства не может быть загружена, поэтому я ставлю audioTollBox и coreAudio, когда читаю. мой код:

#define kOutputBus 0
#define kInputBus 1
AudioComponentInstance audioUnit;



@implementation remoteIO


//callback function : 

    static OSStatus recordingCallback(void *inRefCon, 
                                      AudioUnitRenderActionFlags *ioActionFlags, 
                                      const AudioTimeStamp *inTimeStamp, 
                                      UInt32 inBusNumber, 
                                      UInt32 inNumberFrames, 
                                      AudioBufferList *ioData)
    {
        AudioBuffer buffer;

        buffer.mNumberChannels = 1;
        buffer.mDataByteSize = inNumberFrames * 2;
        NSLog(@"%ld",inNumberFrames);
        buffer.mData = malloc( inNumberFrames * 2 );


        AudioBufferList bufferList;
        bufferList.mNumberBuffers = 1;
        bufferList.mBuffers[0] = buffer;



        OSStatus status;
        status = AudioUnitRender(audioUnit, 
                                 ioActionFlags, 
                                 inTimeStamp, 
                                 inBusNumber, 
                                 inNumberFrames, 
                                 &bufferList);  
        checkStatus(status);                       //here is the warnning+error
        double *q = (double *)(&bufferList)->mBuffers[0].mData;
        for(int i=0; i < strlen((const char *)(&bufferList)->mBuffers[0].mData); i++)
        {

            NSLog(@"%f",q[i]); 
        }
    }

и метод чтения:

-(void)startListeningWithFrequency:(float)freq;
{
    OSStatus status;

    AudioComponentDescription desc;
    desc.componentType = kAudioUnitType_Output;
    desc.componentSubType = kAudioUnitSubType_RemoteIO;
    desc.componentFlags = 0;
    desc.componentFlagsMask = 0;
    desc.componentManufacturer = kAudioUnitManufacturer_Apple;

    AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc);
    status = AudioComponentInstanceNew( inputComponent, &audioUnit);
    checkStatus(status);

    UInt32 flag = 1;
    status = AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input,kInputBus, &flag, sizeof(flag));
    checkStatus(status);

    AudioStreamBasicDescription audioFormat;
    audioFormat.mSampleRate         = 44100.00;//44100.00;
    audioFormat.mFormatID           = kAudioFormatLinearPCM;
    audioFormat.mFormatFlags        = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
    audioFormat.mFramesPerPacket    = 1;
    audioFormat.mChannelsPerFrame   = 1;
    audioFormat.mBitsPerChannel     = 16;
    audioFormat.mBytesPerPacket     = 2;
    audioFormat.mBytesPerFrame      = 2;

    status = AudioUnitSetProperty(audioUnit,
                                  kAudioUnitProperty_StreamFormat,
                                  kAudioUnitScope_Output,
                                  kInputBus,
                                  &audioFormat, 
                                  sizeof(audioFormat));
    checkStatus(status);

    checkStatus(status);
    AURenderCallbackStruct callbackStruct;
    callbackStruct.inputProc = recordingCallback;
    callbackStruct.inputProcRefCon = self;
    status = AudioUnitSetProperty(audioUnit, 
                                  kAudioOutputUnitProperty_SetInputCallback,
                                  kAudioUnitScope_Global,
                                  kInputBus, &callbackStruct, sizeof(callbackStruct));
    checkStatus(status);

    status = AudioOutputUnitStart(audioUnit);

}

и я получаю эту ошибку и предупреждение:

Undefined symbols for architecture i386:
  "_checkStatus", referenced from:
      _recordingCallback in remoteIO.o
      -[remoteIO startListeningWithFrequency:] in remoteIO.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

что здесь не так, ? благодаря.


person Curnelious    schedule 02.01.2012    source источник
comment
пожалуйста??? кто-нибудь ? я схожу с ума от этого звука!!! Теперь я вижу, что когда я вынимаю ВСЕ строки CheckStatus (статуса), я могу его скомпилировать. что мне не хватает?? я поставил все фреймворки, почему он не может распознать эту штуку checkStatus???   -  person Curnelious    schedule 02.01.2012
comment
теперь я вижу, что слово checkStatus не упоминается во всем документе Apple, даже один раз. ни разу. ни в одном аудио документе нет такой функции. и в каждом аудиогиде, в каждом посте здесь, везде, они все используют эту функцию checkStatus(status), которая не была объявлена ​​ими .. что я здесь пропустил ???   -  person Curnelious    schedule 02.01.2012


Ответы (1)


Вы должны написать свою собственную функцию checkStatus() в зависимости от того, что она делает (например, как она сообщает об ошибке: диалоговое окно, вывод консоли, журнал аналитики, аварийный дамп и т. аудиокод, специфичен для каждого приложения.

person hotpaw2    schedule 02.01.2012
comment
я вынул это из своего кода - нет checkStatus, и это сработало. но мой вопрос в том, какое число я должен получить от образцов? я получаю от -32700 до +32700 .. это нормально? - person Curnelious; 03.01.2012