2011-12-09 14 views
5

Deseo transmitir voz de un iPhone a otro. Establecí la conexión entre dos iPhones usando TCP y pude grabar voz en el iPhone y reproducirla usando Audio Queue Services. También he logrado enviar datos entre los dos iPhones. Lo hago enviando paquetes NSData.Audio grabado utilizando Audio Queue Services a los datos

Mi próximo paso es enviar los datos de audio al otro iPhone mientras se está grabando. Creo que debería hacer esto en el AudioInputCallback. Mi AudioQueueBufferRef se llama inBuffer y parece que quiero convertir el inBuffer->mAudioData a NSData y luego enviar el NSData al otro dispositivo y luego descomprimirlo.

¿Alguien sabe si esta sería la manera de hacerlo y cómo puedo convertir mi inBuffer->mAudioData a NSData? Otros enfoques también son bienvenidos.

Este es mi método de devolución de llamada en la que creo que debería "agarrar" los datos y enviarlo a otro iPhone:

void AudioInputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumberPacketDescriptions, const AudioStreamPacketDescription *inPacketDescs) 
{ 
    RecordState *recordState = (RecordState *)inUserData; 
    if(!recordState->recording) 
     return; 

    OSStatus status = AudioFileWritePackets(recordState->audioFile, 
              false, 
              inBuffer->mAudioDataByteSize, 
              inPacketDescs, 
              recordState->currentPacket, 
              &inNumberPacketDescriptions, 
              inBuffer->mAudioData); 
    if(status == 0) 
    { 
     recordState->currentPacket += inNumberPacketDescriptions; 
    } 

    AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL); 
} 

Respuesta

2

Es posible que desee considerar la posibilidad de guardar los datos de audio (el ejemplo muestra el audio puntero de muestra y el recuento de bytes) de la devolución de llamada de audio a otra cola o FIFO, y luego tener un subproceso de red separado crear NSData de los bytes de audio y enviarlo.

+0

Gracias por su respuesta. No estoy seguro de por qué debería usar otra cola. ¿Puedes elaborar eso? ¿Y no tiene algún código de muestra para convertir los datos a NSData? – simonbs

+0

Ver respuesta de hotpaw2 en http://stackoverflow.com/a/8486682/486845 – simonbs

Cuestiones relacionadas