PDA

Ver la versión completa : El mito de la latencia en Android y los EMUs...



Seleuco
18/08/2013, 21:22
He estado este finde implementando el sonido en baja latencia en MAME4droid y he sacado conclusiones muy interesantes respecto al tema.

Google ha mejorado el tema de la latencia a partir de jellly bean (4.1). El caso es que la latencia es dependiente del dispositivo y para tener baja latencia debe ser soportado de manera especifica por la aplicación (programado de manera correcta). Concretamente las aplicaciones deben usar OpenSL (no AudioTracker) y ajustar los buferes del callback de lectura a los valores mas pequeños posibles. Estos valores dependen del dispositivo en cuestión, que es el que marca la latencia.

Los frames (son los samples de una muestra) mínimos del buffer de cada dispositivo se recuperan a partir de una propiedad del AudioManager, PROPERTY_OUTPUT_FRAMES_PER_BUFFER (a partir de 4.1), y en mi Google Nexus (Cyanogen 4.3) es de 144 y en la shield es de 1024. Trabajar con bufferes mas bajos va a suponer perdidas de sonido. También hay que trabajar con el muestro nativo del dispositivo, para que no se meta por el resampler (mixer)... EL muestro nativo también hay que recuperarlo del audio manager...

Por ejemplo, Retroarch tiene mal implementado su sonido de baja latencia porque utiliza un buffer fijo de 2048 que son unos 46 ms de cadencia y cada imagen se pinta en 15 ms, con lo que el sonido va por detrás casi tres frames...

En el Galaxy Nexus se puede mandar audio cada 3ms. El shield cada 24ms. He probado con mame4droid con estos nuevos cambios y el resultado es espectacular en el Galaxy Nexus.

Resumiendo, el tema de la latencia en Android depende del dispositivo en cuestión (Los nexus son pata negra en ester tema) y de que la aplicación saque provecho a los cambios en Jelly Bean (Emulador).

La Shield no va mal en este tema, aunque el Galaxy Nexus es la caña... Evidentemente las consolas chinorris en 4.1, pues supongo que no... Cuando pille una haré alguna prueba...

_Seagal_
18/08/2013, 21:57
¿Pero entonces se deberia programar cada emulador para que cargara unos settings especificos para cada dispositivo que reconozca?

Entre las resoluciones de pantalla, las versiones de android, y adaptar la parte del sonido para cada dispositivo nos podemos volver locos.

red carpet
18/08/2013, 22:10
Primero,darte las gracias Seleuco por currarte cada vez mas este emulador(que hace que me quiera comprar otra consola android mas y ya van unas cuantas).

El tema de la latencia de audio,es para mi uno de los puntos debiles del sistema android,crees que se podra disminuir aun mas de ms en shield,o llegar a ser perfecto?

Gracias.

Seleuco
18/08/2013, 22:41
¿Pero entonces se deberia programar cada emulador para que cargara unos settings especificos para cada dispositivo que reconozca?

Entre las resoluciones de pantalla, las versiones de android, y adaptar la parte del sonido para cada dispositivo nos podemos volver locos.

No. Lo que hay que hacer es preguntarle al audio manager cual es el buffer idoneo.

-----Actualizado-----


Primero,darte las gracias Seleuco por currarte cada vez mas este emulador(que hace que me quiera comprar otra consola android mas y ya van unas cuantas).

El tema de la latencia de audio,es para mi uno de los puntos debiles del sistema android,crees que se podra disminuir aun mas de ms en shield,o llegar a ser perfecto?

Gracias.

En la shield esta en unos parámetros muy razonables.


El problema de la latencia y los distintos fabricantes es que inversamente proporcional a los sistemas de ahorro de energía. Por ejemplo para tener muy buena latencia, necesitas que el planificador de tareas cambie más rápido las tareas. Eso supone más consumo de energía. Es por eso que el fabricante le puede tentar más tunear para ahorrar energía, que para que los emuladores tengan poca latencia (o las aplicaciones de audio). En cualquier caso la gente de Google con los cambios en el api y en el kernel van en la buena dirección.

Skelton
18/08/2013, 23:01
Seleuco, pues yo justo en Retroarch la latencia de sonido ni la percibo y si lo hago en otros emus. En tu ultima version de mame casi ni lo noto tampoco. Y mi consola es chinorris (JXD s5110B) con jellybean. En otros emus si se aprecia algo, ePSXE sobre todo y en los ultimos de Broglia ya no lo noto.
Por cierto aprovecho para preguntarte ya que veo que tu ultima version del mame tiene soporte para la shield. El segundo analógico se puede usar en la shield para algo? Es que si es asi, queria saber si hay alguna manera de implementarlo en otros dispositivos (como la misma s5110B que tiene analogicos de verdad). Si necesitas alguna informacion especifica de la s5110B puedes preguntarme lo que necesites.

Seleuco
18/08/2013, 23:54
El tema de la latencia es muy subjetivo. Los 40ms + cte. de retroarch son bajos. Donde puedes tener problemas es si la latencia del dispositivo es por defecto es mala, porque sumas y sumas. Yo si notó las diferencias entre retroarch y la versión con sonido de bajá latencia de mame4droid, que aún no he publicado, a favor de este último. Pero claro, tienes que enfrentar una contra otra.

Si. El segundo analógico se utiliza para los juegos de doble stick, como robot ron y similares. También si pinchas un sixaxis, logitech, o mando de 360 se utiliza. Para utilizar el segundo analógico tengo que detectar y mapear el controlador a partir de su id. También necesito los keycodes de los botones.

dj syto
18/08/2013, 23:56
Yo en el epsxe lo he notado pero solo en juegos musicales porque un retraso minimo te jode el juego.

CristianME
19/08/2013, 01:43
con razón no entendía porque se quejaban tanto de la latencia, me imagino que mi ex Xperia PLAY casi no sufría problemas de latencia.

K-teto
19/08/2013, 03:21
Cojonudisimo lo del sonido, asi da gusto, esperando estoy a que saques la nueva version.
Ahora queda solucionar un problema aun mas grave de android, la latencia pero en el control esta vez.

3XCL4M4t10N
19/08/2013, 03:35
Entonces si existe latencia. ¿Tan complicadisimo es de solucionar esto? Me refiero a nivel de OS.

CristianME
19/08/2013, 03:59
K-teto que dispositivo ocupas?? porque yo tengo un mando bluetooth "ipega" y un xperia ZL, y no tengo ningún problema xD

Skelton
19/08/2013, 09:20
Cojonudisimo lo del sonido, asi da gusto, esperando estoy a que saques la nueva version.
Ahora queda solucionar un problema aun mas grave de android, la latencia pero en el control esta vez.

El input lag cosa del dispositivo tb. Yo en sistemas como s5110B, s7300B o xperia play nunca noté´input lag.

K-teto
19/08/2013, 15:44
K-teto que dispositivo ocupas?? porque yo tengo un mando bluetooth "ipega" y un xperia ZL, y no tengo ningún problema xD

Un Thl W8 con un ipega (y no lo menciono mas que viene el syto a poner el video XDD)
En juegos normales practicamente no se nota, pero en juegos de ritmo o musicales es muy molesto o en juegos que necesitan un control mas preciso.
Lo noto jugando al blazing star de neogeo en el mame4droid, vamos.
Pero no es del emulador, es cosa de android en si.

En la S5110 tambien hay un poco de input lag.

Seleuco
19/08/2013, 16:49
Un Thl W8 con un ipega (y no lo menciono mas que viene el syto a poner el video XDD)
En juegos normales practicamente no se nota, pero en juegos de ritmo o musicales es muy molesto o en juegos que necesitan un control mas preciso.
Lo noto jugando al blazing star de neogeo en el mame4droid, vamos.
Pero no es del emulador, es cosa de android en si.

En la S5110 tambien hay un poco de input lag.

Podría ser del dispositivo en sí. Y más si es Bluetooth. Prueba a utilizar un sixaxis por otg y me cuentas...

eltorobado
25/08/2013, 23:12
con la ultima actualizacion, y seleccionando la opcion OpenSL low-latency audio, se nota mucho la mejoria en varios juegos, que se relentizaban casi todo el tiempo, ahora ya son mas jugables, aun en mi xperia play que es monocore se siente el cambio, y responde mejor en el Galaxy 3 y Asus Trprime, se agradece mucho esos cambios Seleuco:brindis:

A proposito, seria genial que incluyeras in soc de soporte en generar un autoscreenshot cada ves que salgamos de un juego, para asi tener una caratula para cada rom,

Mi Vida es para el MAMe en todas sus Dimensiones

sinplomo
26/08/2013, 17:51
El Galaxy Nexus tiene menor latencia que el Nexus 4... precisamente por el tema de ahorro de energia

ICELORD
26/08/2013, 20:56
Yo ahora uso para jugar un flamante Galaxy Note 2+Adpatador+PAD.PS3 y eso si que es pata negra , también e llegado a la conclusión de que las CPUs de Samsung son las mas efectivas en los emuladores, en especial mame4droid y PPSSPP

Skelton
26/08/2013, 22:00
Hombre, depende que Samsung, es que del 3 para alante son patas negras todos. XD. Yo juego con un Zopo con un mando ipega y no tengo problemas emulando (es un mediatek quad core, nada del otro jueves)

Megacubo
28/08/2013, 20:39
Gran explicación Seleuco.

Por cierto muchisimas gracias por tus emuladores que me han dado horas de diversión, lo unico que podria hacerlos mejor seria el juego en red (netplay) local. Si fuera por internet como el emulador nes together me doy con un canto en los dientes :D