2009-09-19 24 views
20

¿Cuáles son mis opciones para reproducir audio simultáneo en un dispositivo Android con la menor cantidad de latencia? ¿Voy a obtener algo medio decente del SDK enlatado, o es demasiado pedir? La documentación afirma que la clase SoundPool es capaz de reproducir múltiples sonidos simultáneamente con un rendimiento relativamente bueno, pero después de ejecutar algunas pruebas en el emulador y en un dispositivo físico parece bastante débil. ¿Hay algún truco o tengo que ir a una API de nivel mucho más bajo para este tipo de cosas? Intenté usar un único grupo de sonido con múltiples muestras cargadas, y probé varios grupos de sonido, cada uno de los cuales administraba una sola muestra. Estoy precargando todo, por lo que cuando intento reproducir no tengo ningún código adicional que se ejecute aparte de la llamada a SoundPool.play().Api de audio de baja latencia para Android?

Respuesta

4

No tengo experiencia en Android, pero he escrito cosas similares para Windows Mobile. Los dispositivos en sí son ciertamente capaces de mezclar múltiples sonidos en tiempo real con una baja latencia (menos de 25 ms), aunque por "múltiple" me refiero a 4 o 5 (y no a 30 a 40). Sin embargo, solo pude lograr esto satisfactoriamente al escribir mi propio código que mezclaba internamente y accedía a la API de reproducción de audio de bajo nivel solo para reproducir la salida final mixta. Las formas de tocar sonidos de alto nivel en .Net Compact Framework son teóricamente capaces de polifonía, pero en la práctica funcionan de forma horrible (muchos problemas técnicos, tartamudeo y distorsión).

Sospecho que el SDK de audio de Android tiene el mismo problema, por lo que puede que tenga que escribir el suyo.

+0

Estoy dispuesto a probar lo que sugirió aquí para la grabación/reproducción de audio de baja latencia. Pero creo que necesito más dirección que la respuesta actual. ¿Podría describir más lo que hizo para WinPhone? –

6

Varias personas están interesadas en audio de baja latencia en Andriod. Estos son los temas que sigo en el tema: temas relacionados

  • Un wave de audio que abarca desde la conferencia I/O de este año.
  • Un Android issue sobre soporte para audio de baja latencia en el NDK.

Este post sugiere que los dispositivos Android tienen controladores de ALSA (capaces de audio de baja latencia) - pero parece que la funcionalidad de baja latencia no está expuesto a aplicaciones a través de la NDK.

No tengo experiencia directa con Android, pero por lo que he leído, la baja latencia (menos de < 10ms o menos) todavía no es una realidad. Por favor, publique cualquier experiencia que indique lo contrario.

6

Android 2.3 ahora es compatible con el acceso nativo a las API de audio (a través de OpenSL) para aplicaciones de baja latencia.

Sin embargo, no todos los dispositivos de hardware tendrán un perfil de características de audio de baja latencia. Por lo tanto, las aplicaciones que requieren dispositivos de filtro shouuld de audio de baja latencia no apoyar en el mercado Android especificando lo siguiente en el manifiesto:

<uses-feature android:name="android.hardware.audio.low_latency"/> 
+0

Tengo un teléfono con 2.2 ahora y una CPU de 1Ghz, y he visto un montón de aplicaciones hacer un trabajo medio decente.Después de investigar un poco, estoy bastante seguro de que están decodificando datos PCM de archivos de audio y escribiéndolos directamente en un AudioTrack, y eso es bastante baja latencia para un secuenciador de audio básico/player – Rich

+0

@Rich: lo he intentado con 2.2 y un teléfono de 1GHz y el tamaño mínimo de buffer que Audiotrack me da es 1400 cuando está en 8kHz, Mono. Eso es 175 ms. Para mi funcionalidad deseada, eso es lento. – AudioDroid

+7

Es un truco de marketing: hacer que alguien piense que está "al corriente con la manzana". Debería haber sido llamado 'latencia media'. No creo que haya demasiados casos de uso que puedan beneficiarse de una latencia de 50 ms. Es demasiado lento para una respuesta de audio adecuada y un requisito innecesario para cualquier otra cosa. –

1

por favor ver mi respuesta a Android: sound API (deterministic, low latency).

La latencia de un dispositivo Android depende menos de la API y más en el hardware y los controladores para ese dispositivo en particular. La habilitación de la reproducción de baja latencia consume más energía y aumenta las posibilidades de problemas técnicos de audio, por lo que muchos fabricantes de equipos originales ampliarán sus almacenamientos intermedios de reproducción de forma intencionada.

Cuestiones relacionadas