ゲームに VOIP を追加するよう請求されました (クロスプラットフォームなので、Apple ゲームキットを使用してそれを行うことはできません)。
ここ3、4日、オーディオユニットとremoteIOに頭を悩ませようとしています...私は何十もの例などを見落としてきましたが、毎回入力PCMに単純なアルゴリズムを適用して再生するだけですスピーカーに戻します。Apple のドキュメントによると、VOIP を行うには kAudioSessionCategory_PlayAndRecord を使用する必要があります。
UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
sizeof(audioCategory),
&audioCategory);
XThrowIfError(status, "couldn't set audio category");
1)しかし、(私には) playAndRecord は常にマイクから来るものを再生するようです (または、より正確には PerformThru コールバック // aurioTouch )、私は間違っていますか?
私は最も単純なコールバックを持っており、AURender 以外は何もしていません
static OSStatus PerformThru(
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
OSStatus err = AudioUnitRender(THIS->rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);
if (err)
printf("PerformThru: error %d\n", (int)err);
return err
}
そのコールバックから、データをピアに送信するつもりです (もちろん直接ではありませんが、データはそこから送信されます)...
2 つのユニット、1 つの録音、1 つの再生を除いて、入力とは異なる出力を再生する方法がわかりませんが、Apple が意図したものではないようです (まだドキュメントに従っています)。
もちろん、それに関するドキュメントは見つかりません。オーディオユニットはまだほとんどドキュメント化されていません...
誰でもそれを行うための最良の方法について考えがあるでしょうか?