Odtwarzacz iOS audio remoteIO odtwarzanie podczas nagrywania
Zostałem oskarżony o dodanie VOIP do gry (międzyplatformowej, więc nie mogę tego zrobić za pomocą gamekitu Apple).
Od 3 do 4 dni próbuję zawinąć głowę dookoła urządzenia audio i remoteIO ... Przeoczyłem dziesiątki przykładów i tak dalej, ale za każdym razem stosuje się prosty algorytm do wejścia PCM i odtwarzam go z powrotem na głośniku. Zgodnie z dokumentacją Apple w celu wykonania VOIP powinniśmy użyć kAudioSessionCategory_PlayAndRecord.
UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
sizeof(audioCategory),
&audioCategory);
XThrowIfError(status, "couldn't set audio category");
1) Ale wydaje mi się, że playAndRecord zawsze odtwarza to, co pochodzi z mikrofonu (lub bardziej ekscytująco wywołanie zwrotne PerformThru //aurioTouch), czy się mylę ?
Mam najprostszy zwrot, nie robiąc nic poza 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
}
Z tego wywołania zamierzam wysłać dane do równorzędnego użytkownika (oczywiście nie bezpośrednio, ale dane z niego pochodzą) ...
Nie rozumiem, jak mogę odtwarzać różne dane wyjściowe niż dane wejściowe, z wyjątkiem może z 2 jednostkami, jednym nagraniem, jednym odtwarzaniem, ale wydaje się, że nie jest to to, do czego Apple miało zamiar (nadal akceptując dokumentację).
No i oczywiście nie mogę znaleźć żadnej dokumentacji na ten temat, urządzenie audio jest wciąż dość nieudokumentowane ...
Każdy miałby pomysł na najlepszy sposób, aby to zrobić?