La configuration de kAudioSessionMode en el ejemplo de SpeakHere de Apple causa una gran caída en el volumen. ¿Alguna solución?

He tenido un problema con el audio demasiado bajo en mi propia aplicación cada vez que uso el modo VoiceChat, así que, como testing idiota, descargué el código de muestra de Apple para la progtwigción de la unidad de audio (SpeakHere) y agregué el modo VoiceChat a esa aplicación. Como resultado, el problema también ocurre allí: correr en ese modo hace que todo sea alnetworkingedor del 20% del volumen deseado.

Agregué este código en la línea 267 de SpeakHereController.mm, justo después de establecer la categoría PlayAndRecord:

// set mode -- this results in audio being too soft UInt32 mode = kAudioSessionMode_VoiceChat; error = AudioSessionSetProperty(kAudioSessionProperty_Mode, sizeof(mode), &mode); if (error) printf("couldn't set audio session mode!"); 

Estoy usando el modo VoiceChat con RemoteIO para get la cancelación de eco para el uso del altavoz; Funciona VoiceProcessingIO (tipo de), pero el performance en iPhones más antiguos (3GS) es tan malo que no se puede usar, por eso estoy usando RemoteIO en su lugar. He confirmado que la ruta del altavoz es correcta. Incluso he intentado configurar el modo de medición y boost manualmente la ganancia: no puedo detectar ninguna mejora.

¿Alguna sugerencia para evitar la caída del gran volumen cuando se usan los modos AudioSession?

Resulta que la ruta / stream / audio se usa cuando el modo VoiceChat está configurado para determinar las mejores configuraciones de ganancia, cancelación de eco, etc. Lo que significa que si va a configurar una ruta en particular, debe hacerlo antes de configurar el modo, no después.

Hacerlo en este order solucionó el problema de volumen para mí:

  • establecer PlayAndRecord
  • establecer ruta al altavoz
  • configurar el modo
  • use VoiceProcessingIO en mis unidades de audio
  • mantenga baja la tasa de muestreo del hardware (8k) para mantener un buen performance en dispositivos más antiguos como el 3GS