首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS -从RemoteIO AudioUnit录制

iOS -从RemoteIO AudioUnit录制
EN

Stack Overflow用户
提问于 2012-10-25 16:58:40
回答 1查看 1.3K关注 0票数 0

我正在尝试从remoteIO录制,这是我的回调。不过我有个问题。代码永远不会进入if (*ioActionFlags == kAudioUnitRenderAction_PostRender)

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

码头。

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-29 10:16:43

这里有几个问题。

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

也就是说,在这种情况下,我认为你根本不需要检查这个标志。该标志的描述为:

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

这使得该标志听起来像是只在AUGraph呈现通知中使用,以指示回调是在呈现完成之前还是之后发生的(与您无关,因为它看起来像是从RemoteIO获得回调)。

所以基本上,你不需要在你的案例中检查那个标志。不过,您应该检查一下AudioUnitRender调用是否返回了noErr

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13065052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档