tiene reproducir por macbook mac conectar auriculares apple altavoz ios iphone objective-c avfoundation avaudiosession

reproducir - Cómo configurar la aplicación iOS para usar audio usb para entrada y salida a altavoces internos



macbook tiene bluetooth (2)

Creo que solo se puede lograr la entrada a través del dispositivo USB y la salida a través de los altavoces cuando el dispositivo USB no tiene componente de salida de audio.

No puedo encontrar ninguna documentación que diga exactamente esto, pero mi razonamiento es el siguiente:

La mezcla y la combinación de dispositivos de audio se realiza a través de la versión generalizada de AVAudioSessionCategoryPlayAndRecord , la llamada categoría de múltiples rutas ( AVAudioSessionCategoryMultiRoute ) y su documentación en AVAudioSession.h dice que

  1. La entrada está limitada al último puerto de entrada.
  2. AVAudioSessionPortBuiltInSpeaker solo se puede usar cuando no hay otras salidas elegibles conectadas

El punto 1 no es un problema, pero el punto 2 no permite el escenario del adaptador 2.

NB Esto permitiría que los adaptadores 1 y 2 funcionen con entrada USB y salida de línea o auriculares. ¿Eso sería de alguna utilidad para usted?

Tengo 2 marcas diferentes de adaptadores de guitarra que se conectan a mi iPhone mediante el conector Lightning.

Cuando el adaptador 1 está enchufado, el dispositivo se convierte en un micrófono de audio USB y reproduce el sonido a través de los altavoces de mi iPhone, ya que el adaptador no contiene un conector para auriculares.

Cuando el adaptador 2 está enchufado, el dispositivo se convierte en un micrófono de audio USB pero reproduce el sonido a través de la toma de auriculares del adaptador.

Estoy tratando de escribir una aplicación que funcione con el adaptador 2, pero en lugar de enviar el sonido a la toma de auriculares del adaptador, quiero enrutarlo a través de los altavoces del iPhone.

El código a continuación debería funcionar, pero lo que estoy descubriendo es que llamar a AVAudioSessionPortOverride con la opción AVAudioSessionPortOverrideSpeaker y la categoría de sesión de audio es AVAudioSessionCategoryPlayAndRecord hace que el audio use el altavoz incorporado y el micrófono independientemente de otras configuraciones, básicamente ignorando setPreferredInput

No puedo entender cómo el adaptador 1 se las arregla para tomar la entrada del audio USB y la salida al altavoz, pero mi aplicación no puede debido a las restricciones anteriores. Alguien sabe de una solución?

AVAudioSession* session = [AVAudioSession sharedInstance]; //Set the audioSession category. Needs to be Record or PlayAndRecord to use audioRouteOverride: [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil]; //set the audioSession override [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; //activate the audio session [session setActive:YES error:nil]; //set input to usb for (AVAudioSessionPortDescription *destPort in session.availableInputs){ if ([destPort.portType isEqualToString:AVAudioSessionPortUSBAudio]) { [setPreferredInput:(AVAudioSessionPortDescription *)inPort error:(nil)outError session setPreferredInput:destPort error:nil]; } }


Esto es un poco largo, pero has intentado ..

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]

.. en lugar de overrideOutputAudioPort: :?