2012-09-24 21 views
5

Zostałem obciążony opłatą za dodanie VOIP do gry (na różnych platformach, więc nie można tego zrobić za pomocą gamekitu Apple).Odtwarzanie iio urządzenia audio ios podczas nagrywania

Przez 3 lub 4 dni, staram się owijać głowę wokół jednostki audio i pilota ... Przeoczyłem dziesiątki przykładów i tak, ale za każdym razem, gdy stosuje się tylko prosty algorytm do wejdź na PCM i odtwórz go na głośniku. Zgodnie z dokumentacją Apple, aby wykonać 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) Wydaje się jednak (dla mnie), że playAndRecord zawsze będzie grać to, co pochodzi z mikrofonem (lub bardziej dokładnie taka PerformThru oddzwonienia // aurioTouch), nie mam racji?

Mam najprostszy zwrotnego, nic nie robi, ale 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 
} 

Od tego zwrotnego Mam zamierza wysłać dane do peer (Nie bezpośrednio oczywiście, ale dane będą pochodzić z nim) ...

Nie widzę sposobu, w jaki mogę odtwarzać różne dane wyjściowe niż dane wejściowe, może z wyjątkiem 2 jednostek, jednego nagrania, jednego odtwarzania, ale nie wydaje się, aby było to zamierzone przez firmę Apple (nadal przynależące do dokumentacji).

I oczywiście nie mogę znaleźć żadnej dokumentacji na ten temat, urządzenie audio jest jeszcze dość dużo un udokumentowane ...

ktoś miałby pomysł na jaki byłby najlepszy sposób to zrobić?

Odpowiedz

8

Nie użyłem VOIP ani kAudioSessionCategory_PlayAndRecord. Ale jeśli chcesz nagrywać/przesyłać głos odebrany z mikrofonu i odtwarzać dane przychodzące z pakietów sieciowych: Here to dobra próbka, która zawiera zarówno mikrofon, jak i odtwarzanie. Również jeśli nie czytałeś tego dokumentu od Apple, zdecydowanie polecam this.

W skrócie: Musisz utworzyć instancję AudioUnits. W tym celu skonfiguruj dwa wywołania zwrotne: jeden dla mikrofonu i jeden dla odtwarzania. Funkcja mikrofonu wywołania zwrotnego dostarczy Ci dane pobrane z mikrofonu. Następnie można konwertować i przesyłać do innych urządzeń przy użyciu dowolnego wybranego protokołu sieciowego. Funkcja oddzwaniania do odtwarzania zapewnia przesyłanie danych przychodzących z innych urządzeń sieciowych w celu ich odtworzenia.

+1

Nie założyłem tej próbki podczas moich poszukiwań, bardzo mi to pomogło! – TheSquad

+0

Dziękuję bardzo za post. Szukałem tego od dłuższego czasu. Teraz rozwiązałeś mój problem. Dziękuję bardzo i życzę ci noworocznego szczęśliwego roku. –

+1

Jak zapisać bufor audio nagrywarki ,, Proszę go udostępnić? –

0

Możesz zobaczyć prosty przykład: this. Opisuje sposób użycia zdalnej jednostki IO. Po zrozumieniu tego przykładu powinieneś obejrzeć PJSIP's audio driver. Powinno to pomóc w wdrożeniu własnego rozwiązania. Powodzenia.

Powiązane problemy