2012-09-24 26 views
5

Me han cargado para agregar VOIP a un juego (multiplataforma, por lo que no puedo usar el juego de Apple para hacerlo).ios unidad de audio remoteIO reproducción durante la grabación

Durante 3 o 4 días, estoy tratando de ponerme la cabeza alrededor de la unidad de audio y remoteIO ... He pasado por alto decenas de ejemplos, pero cada vez solo se está aplicando un algoritmo simple al ingrese PCM y reprodúzcalo en el altavoz. De acuerdo con la documentación de Apple para poder hacer VOIP, deberíamos usar kAudioSessionCategory_PlayAndRecord.

UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; 

     status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, 
             sizeof(audioCategory), 
             &audioCategory); 
     XThrowIfError(status, "couldn't set audio category"); 

1) Pero parece (a mí) que playAndRecord siempre va a jugar lo que viene del micrófono (o más excatly la PerformThru devolución de llamada // aurioTouch), me equivoco?

que tienen la devolución de llamada más sencilla, sin hacer nada, pero 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 
} 

Desde que estoy de devolución de llamada que desee enviar datos a los pares (no directamente, por supuesto, pero los datos vendrán de ella) ...

No veo cómo puedo reproducir una salida diferente a la entrada, excepto tal vez con 2 unidades, una grabación, una reproducción, pero no parece ser lo que Apple pretendía (aún en la documentación).

Y, por supuesto, no puedo encontrar ninguna documentación al respecto, la unidad de audio sigue siendo más o menos un-documentado ...

Cualquiera podría tener una idea de lo que sería la mejor manera de hacerlo?

Respuesta

8

No he usado VOIP o kAudioSessionCategory_PlayAndRecord. Pero si desea grabar/transmitir la voz recogida desde el micrófono y reproducir los datos entrantes de los paquetes de red: Here es una buena muestra que incluye tanto el micrófono como la reproducción. Además, si no ha leído este documento de Apple, le recomiendo encarecidamente this.

En resumen: debe crear una instancia de AudioUnits. En él, configure dos devoluciones de llamada: una para micrófono y otra para reproducción. La función del micrófono de devolución de llamada le proporcionará los datos que recogió del micrófono. Luego puede convertir y transmitir a otros dispositivos con cualquier protocolo de red elegido. La función de devolución de llamada de reproducción es donde usted suministra los datos entrantes de otros dispositivos de red para reproducir.

+1

No he fundado esta muestra durante mi búsqueda, ¡me ha ayudado mucho, muchas gracias! – TheSquad

+0

Muchas gracias por la publicación. He estado buscando esto desde hace mucho tiempo. Ahora has resuelto mi problema. Muchas gracias y te deseo un feliz año nuevo. –

+1

Cómo guardó el búfer de audio de la grabadora ,, ¿lo comparte? –

0

Puede ver this ejemplo simple. Describe cómo usar la unidad de IO remota. Después de entender este ejemplo, debe ver PJSIP's audio driver. Esto debería ayudarlo a implementar su propia solución. La mejor de las suertes.

Cuestiones relacionadas