2013-01-18 47 views
1

我的回調看起來是這樣的:iOS的核心音頻渲染回調工作在模擬器,而不是設備

static OSStatus renderInput(void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags,       const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) 
{ 
    AudioSampleType *outBuffer = (AudioSampleType *)ioData->mBuffers[0].mData; 
    memset(outBuffer, 0, sizeof(AudioSampleType)*inNumberFrames*kNumChannels);  

    //copy a sine wave into outBuffer 
    double max_aust = pow(2.f, (float)(sizeof(AudioSampleType)*8.0 - 1.f)) - 1.0; 
    for(int i = 0; i < inNumberFrames; i++) { 
     SInt16 val = (SInt16) (gSine2_[(int)phase2_] * max_aust); 
     outBuffer[2*i] = outBuffer[2*i+1] = (AudioSampleType)val; 
     phase2_ += inc2_; 
     if(phase2_ > 1024) phase2_ -= 1024; 
    } 

    return noErr; 
} 

這是一個超級基本呈現回調應該只是扮演一個正弦波。它在模擬器上執行,它不在設備上。實際上,我無法從設備獲取音頻。即使我添加一個printf來檢查緩衝區,它也會顯示outBuffer充滿了正弦波的樣本。

我將會話類型設置爲Ambiet,但我也嘗試過playAndRecord和MediaPlayback。沒有任何運氣。我的首選framesPerBuffer是1024(這是我在模擬器和設備上得到的)。我的採樣率是44100hz。我已經嘗試過48000以防萬一。我也試過改變framesPerBuffer。

是否有任何其他原因導致樣本無法到達設備上的硬件?

更新: 我剛剛發現,如果我將耳機插入設備,聽到的聲音聽起來像是正在剪輯的真正可怕的正弦波。這使我認爲可能該設備期望浮點數而不是有符號整數,但是當我將值更改爲-1時,只有沒有音頻(設備或模擬器,如預期的那樣,因爲引擎設置爲接受signed int,而不是浮點)。

回答

相關問題