2012-01-02 2 views
0

버퍼 샘플을 읽으려는이 코드가 있는데, 이상한 mach-o 링커 오류가 발생합니다. audioTollBox 및 coreAudio를 넣을 수있는 오디오 장치 프레임 워크가 없습니다. 나는 읽었다. 내 코드는 다음과 같습니다오디오에서 오류가 발생했습니다. 유닛 코드 -remoteIO for iphone

#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); 

} 

와 내가 얻을 것은이 오류 및 warnning :

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 

무슨 잘못 여기에? 덕분에 .

+0

제발 ??? 누구? 나는이 오디오 것에서 내 마음을 잃고있다 !!! 나는 모든 CheckStatus (상태) 라인을 꺼낼 때 컴파일 할 수 있음을 알 수있다. 내가 뭘 놓치고 있니? 모든 프레임 워크를 넣었습니다. 왜이 checkStatus를 인식하지 못합니까 ??? – Curnelious

+0

checkStatus라는 단어가 사과 사과 전체에서 언급되지 않았 음을 알 수 있습니다. 한번도. 모든 오디오 문서에는 그와 같은 기능이 없습니다. 그리고 모든 오디오 가이드, 모든 게시물 여기, 사방에, 그들은 모두 그들에 의해 선언 wasnt이 checkStatus (상태) 기능을 사용합니다 .. 내가 무엇을 놓치고 여기 ??? – Curnelious

답변

0

checkStatus() 함수가 무엇을하는지 (예 : 대화 상자, 콘솔 출력, 분석 로깅, 크래시 덤프 등 오류를보고하는 방식) 또는 모든 것이 수행되는지 여부 오디오 코드에서 반환 이외의, 각 응용 프로그램에 특정입니다.

+0

나는 checkStatus가 아니라 내 코드에서 꺼냈다. 하지만 제 질문은 샘플에서 얻어야하는 숫자는 무엇입니까? 나는 -32700- +32700 사이에 .. 그거 괜찮 니? – Curnelious