Pregunta

Tenemos un juego que está muy cerca de ser lanzado, pero tenemos un problema extremadamente molesto.Uno de nuestros teléfonos de prueba Beta no puede escuchar ninguno de los efectos de sonido del juego.Sin embargo, puede escuchar perfectamente la música de fondo y la música de la pantalla de título.

La música de fondo y la del título se reproducen a través de AVAudioPlayer (son más largas, necesitamos bucles y control de volumen, etc.).Los efectos de sonido simplemente se reproducen con AudioServicesPlaySystemSound (son muy cortos, no necesitamos un control preciso ni saber cuándo terminan, etc).Esto funciona en la mayoría de los iPhone, pero no en este.Todo esto se reproduce con una sesión de audio de AVAudioSessionCategorySoloAmbient.

Entonces tengo dos preguntas:- En primer lugar, ¿es ésta una implementación aceptable?es decir.¿Hay algo que me perdí que dice que no se pueden mezclar estos dos marcos, o una razón por la cual es una mala idea mezclarlos?- Segundo, ¿alguien ha visto algo como esto antes?Si es así, ¿encontró una manera de evitarlo?

Nota de antecedentes adicional:Puedo decir de manera bastante concluyente que en su teléfono, es la combinación de los dos marcos.Pudo escuchar sonidos hasta aproximadamente la misma versión donde agregamos la música de la pantalla de título.Además, si cambio uno de los sonidos para que funcione a través de un AVAudioPlayer, él podrá escucharlo.Desafortunadamente, no puedo simplemente mover los sonidos a AVAudioPlayers porque simplemente no funciona bien y necesito una mejor sincronización.

¿Fue útil?

Solución

Tengo dos aplicaciones en la tienda de aplicaciones que combinan esos dos marcos.AVAudioPlayer para sonidos que requieren inicio y parada y control de volumen y caja de herramientas AudioServices para pequeños pitidos y clics cortos.Lo único que se me ocurre, fuera de mi cabeza, es que el volumen de AVAudioPlayer parece controlarse por separado de los sonidos de AudioServices.Por lo tanto, verifique que el probador no tenga los sonidos apagados (con el interruptor de modo de vibración) o el volumen muy bajo.

Si esto no ayuda, cuéntame más sobre tus sonidos/código y puedo agregar algo de código a mi aplicación para ver si puedo obtener el mismo comportamiento.Por supuesto, parece que la mayoría de sus evaluadores no tienen este problema y probablemente yo tampoco lo veré.

Otros consejos

EDIT 2 :
He determinado la causa del error. Los dos marcos de audio diferentes juegan en dos ajustes de volumen diferentes. No es el volumen principal (eso es lo que aparece una vez que esté en la aplicación, y no tiene un título en él) y el volumen del timbre (eso es lo que aparece cuando estás en la pantalla de inicio sin ninguna aplicación cargada). Las llamadas AVAudioPlayer jueguen con el ajuste del volumen principal. Como yo he dado la categoría a AVAudioSessionCategorySoloAmbient (ver código de abajo), esto es el control de volumen que se ajusta si se utiliza el control de volumen dentro de la aplicación. Los SystemSounds, sin embargo, se reproducen en el volumen del timbre. Esto no llegará hasta dentro de la aplicación, y como tal no permite al usuario ajustar sus ajustes durante el juego.

Es fácil ver la posible confusión para el usuario: Digamos que tienen su timbre se establece en bajo, o incluso fuera. Empiezan a jugar el juego. Oyen la música de la pantalla del título (AVAudioPlayer) y son capaces de subir el volumen o hacia abajo y responde normalmente. Luego empiezan el juego y los efectos de sonido juegan (SystemSounds), y oyen nada, porque el volumen del timbre es bajo / apagado. En un esfuerzo para escuchar los efectos de sonido, se dan de cabeza el volumen y la música de fondo responde en consecuencia. Por lo tanto, desde este punto de vista, que sin duda parece que los efectos de sonido simplemente no están jugando.

Si usted tiene esta situación similar, tenga su usuario asegurarse de que su volumen de timbre está antes de jugar el juego y su conmutador de silencio está activado (es decir, no silenciado). También puede verificar todo esto al hacer la prueba usted mismo - deje caer el volumen del timbre y golpearse en la aplicación de volumen hacia arriba. Sus SystemSounds debe caer fuera de la mezcla.

Respuesta original : En volver a excavar a través de todos los documentos, he encontrado la respuesta. No estaba activando correctamente la sesión de audio. Anteriormente sólo tenía este código para establecer la categoría:

NSError *setCategoryError = nil; 
BOOL    categoryWasSet    = [[AVAudioSession sharedInstance] 
                              setCategory: AVAudioSessionCategorySoloAmbient 
                              error: &setCategoryError]; 

Pero yo tenía que añadir también el siguiente código para activar explícitamente la sesión de audio:

NSError *activationError  = nil;
BOOL    activationSuccess = [[AVAudioSession sharedInstance]
                              setActive: YES 
                              error: &activationError];

he vuelto a probar con este usuario, y se ha fijado definitivamente el problema. Esperamos que ayuda a cualquier persona que pudiera tener un problema similar.

EDIT: Esto no parece haber resuelto el problema después de todo. Tengo un falso positivo de mi probador, y cuando se examina con más detalle parece que en realidad no oyen la SystemSound genera sonidos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top