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
- La entrada está limitada al último puerto de entrada.
-
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:
:?