2012-09-24 22 views
5

Mi è stato addebitato di aggiungere VOIP in un gioco (multipiattaforma, quindi non è possibile utilizzare il kit di giochi Apple per farlo).ios unità audio remoteIO riproduzione durante la registrazione

Per 3 o 4 giorni, sto provando a farmi girare intorno all'unità audio e al telecomando ... Ho trascurato decine di esempi e simili, ma ogni volta si applica solo un semplice algoritmo al immettere PCM e riprodurlo sull'altoparlante. Secondo la documentazione Apple per fare VOIP dovremmo usare kAudioSessionCategory_PlayAndRecord.

UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; 

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

1) Ma sembra (a me) che playAndRecord sarà sempre giocare quello proveniente dal microfono (o più excatly il PerformThru richiamata // aurioTouch), mi sbaglio?

Ho la richiamata più semplice, non facendo altro che 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 
} 

Da quel richiamata sto intenzione di inviare i dati al peer (non direttamente, naturalmente, ma i dati verranno da esso) ...

Non vedo come posso riprodurre uscite diverse dall'input, tranne forse con 2 unità, una registrazione, una riproduzione, ma non sembra essere ciò che Apple intendeva (continuando ad accodare alla documentazione).

E, naturalmente, non riesco a trovare alcuna documentazione su di esso, unità audio è ancora praticamente un-documentata ...

Chiunque avrebbe avuto un'idea su quello che sarebbe il modo migliore per farlo?

risposta

8

Non ho usato VOIP o kAudioSessionCategory_PlayAndRecord. Ma se vuoi registrare/trasmettere la voce prelevata dal microfono e riprodurre i dati in arrivo dai pacchetti di rete: Here è un buon esempio che includeva sia il microfono che la riproduzione. Inoltre, se non hai letto questo documento da Apple, ti consiglio vivamente lo this.

In breve: è necessario creare un'istanza AudioUnits. In esso, configura due callback: uno per il microfono e uno per la riproduzione. La funzione mic callback fornirà i dati raccolti dal microfono. È quindi possibile convertire e trasmettere ad altri dispositivi con qualsiasi protocollo di rete scelto. La funzione di callback della riproduzione è dove si forniscono i dati in arrivo da altri dispositivi di rete per la riproduzione.

+1

Non ho fondato questo campione durante la mia ricerca, mi ha aiutato molto grazie! – TheSquad

+0

Grazie mille per il post. Ho cercato questo da molto tempo. Ora hai risolto il mio problema. Grazie mille e auguro un felice anno nuovo. –

+1

Come salvare il buffer audio del registratore? Si prega di condividerlo? –

0

È possibile vedere il semplice esempio this. Descrive come usare l'unità IO remota. Dopo aver compreso questo esempio, dovresti guardare PJSIP's audio driver. Questi dovrebbero aiutarti a implementare la tua soluzione. Buona fortuna.

Problemi correlati