2012-10-25 54 views
0

我试图从remoteIO录音,这里是我的回调。 我有一个问题,虽然...的代码永远不会进入 如果(* ioActionFlags == kAudioUnitRenderAction_PostRender)iOS - 从RemoteIO录音AudioUnit

如何真正停止记录,使得它进入kAudioUnitRenderAction_PostRender?核心音频非常新,所以这可能是一个愚蠢的问题(我有一个很好的感觉;)) 非常感谢。

码头。

static OSStatus RecordingCallback (
           void *       inRefCon, 
           AudioUnitRenderActionFlags * ioActionFlags, 
           const AudioTimeStamp *   inTimeStamp, 
           UInt32       inBusNumber, 
           UInt32       inNumberFrames, 
           AudioBufferList *    ioData) { 
EffectState *effectState = (EffectState*) inRefCon; 

// just copy samples 
UInt32 bus1 = 1; 
CheckError(AudioUnitRender(effectState->rioUnit, 
          ioActionFlags, 
          inTimeStamp, 
          bus1, 
          inNumberFrames, 
          ioData), 
      "Couldn't render from RemoteIO unit"); 

if (*ioActionFlags == kAudioUnitRenderAction_PostRender) 
{ 
    OSStatus result = ExtAudioFileWriteAsync(effectState->outputFile,inNumberFrames,ioData); 
    if(result) printf("ExtAudioFileWriteAsync %ld \n", result); 
} 
return noErr; 
} 

回答

0

这里有几个问题。

首先,您可能打算检查kAudioUnitRenderAction_PostRender是否已设置,对不对?在这种情况下,您应该使用*ioActionFlags & kAudioUnitRenderAction_PostRender而不是*ioActionFlags == kAudioUnitRenderAction_PostRender。前者将检查标志是否被设置,而你正在做的是检查是否只设置该标志(即如果kAudioUnitRenderAction_OutputIsSilence标志也被设置,则*ioActionFlags == kAudioUnitRenderAction_PostRender将是false)。

这就是说,我不认为你需要在这种情况下检查那个标志。该标志的说明如下:

调用渲染通知Proc - 在音频单元的渲染操作之前或之后调用。如果设置了该标志,则渲染操作完成后调用proc。

这使得它听起来像该标志仅用于在AUGraph呈现通知,指示回调是否发生之前或之后进行粉刷完成(你不相关,因为它看起来像你得到来自RemoteIO的回调)。

所以基本上,你不需要检查你的情况下的那个标志。你应该检查,看你的AudioUnitRender电话返回noErr,但。

+0

谢谢..我去检查并报告回来。 – lppier

相关问题