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);
}
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
Ver respuesta de hotpaw2 en http://stackoverflow.com/a/8486682/486845 – simonbs