0

remoteIO から記録しようとしていますが、これが私のコールバックです。問題があります... コードは if (*ioActionFlags == kAudioUnitRenderAction_PostRender) に入りません

kAudioUnitRenderAction_PostRender に入るように実際に録音を停止するにはどうすればよいですか? Core Audio には非常に新しいので、これはばかげた質問かもしれません (私は良い感じです ;)) どうもありがとう。

橋脚。

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;
}
4

1 に答える 1

0

ここにはいくつかの問題があります。

まず、おそらく kAudioUnitRenderAction_PostRender が設定されているかどうかを確認するつもりですよね? その場合、*ioActionFlags & kAudioUnitRenderAction_PostRender代わりに を使用する必要があり*ioActionFlags == kAudioUnitRenderAction_PostRenderます。前者はフラグが設定されているかどうかを確認しますが、あなたがしているのはそのフラグのみが設定されているかどうかを確認することです (つまり、kAudioUnitRenderAction_OutputIsSilenceフラグも設定されている場合は に*ioActionFlags == kAudioUnitRenderAction_PostRenderなりますfalse)。

とはいえ、この場合、そのフラグをまったくチェックする必要はないと思います。そのフラグの説明は次のとおりです。

レンダリング通知 Proc で呼び出されます - オーディオ ユニットのレンダリング操作の前または後に呼び出されます。このフラグが設定されている場合、レンダリング操作が完了した後にプロシージャが呼び出されています。

そのフラグは、レンダリングが完了する前または後にコールバックが発生しているかどうかを示すために、AUGraph レンダリング通知でのみ使用されるように聞こえます (RemoteIO からコールバックを取得しているように見えるため、あなたには関係ありません)。

基本的に、あなたのケースではそのフラグをチェックする必要はありません。ただし、呼び出しが返されたかどうかを確認する必要あります。AudioUnitRendernoErr

于 2012-10-29T02:16:42.983 に答える