Cómo programar un secuenciador de música simple para Android (Java)

Lo que quiero hacer:

Me gustaría programar un secuenciador de música muy simple para Android. Pero nunca he trabajado con audio en Android o en Java, respectivamente.

Qué debería hacer la aplicación:

  • Reproducir muestras (archivos WAVE / OGG)
  • Reproducir varios canales de audio simultáneamente (por ejemplo, la trompeta y la flauta deben tocar simultáneamente, un máximo de 10 instrumentos)
  • Cambiar el tono de las muestras (por ejemplo, el archivo WAVE de la trompeta debe ser reproducido en tono normal (c4) y tono inferior / alto (e2 / g6) y así sucesivamente)

Esto es lo que la aplicación debe ser capaz de hacer en general.

¿Qué componentes necesito? Un reproductor de medios normal (AudioManager?) No funcionará, ¿verdad?

Ya hay algunas aplicaciones que hacen lo que estoy pensando:

  • FingerBeat para iOS
  • FL Studio Mobile para iOS
  • Uloops Studio para Android

¡Gracias de antemano por tu ayuda!

Hay secuenciador de ritmo de código abierto muy simple para Android llamado SoundFuse . Tienen una descripción y capturas de pantalla en la página.

Aquí está el repositorio github.

No tienes un requisito simple, sino tres requisitos muy diferentes.

  1. Reproducción de WAV debe ser apoyado fuera de la caja por el JRE con la ayuda de las clases en javax.sound.sampled, que jsut requiere algún código para cablearlo (no muy seguro acerca de android).

  2. Reproducir OGG no está soportado fuera de la caja. Hay una implementación de código abierto para OGG llamada jOrbis, consulte su sitio web . Una vez más esto puede requerir algún código de cableado para conectarse a su aplicación.

  3. Para un secuenciador, sólo puede utilizar MIDI. Una vez más debe ser apoyado por el JRE, y si no está en su plataforma, puede utilizar Gervill – un secuenciador MIDI Java puro ( sitio web del proyecto ).

  4. También hay un ModPlayer que puede jugar buen viejo Soundtracker y algunos otros. Esto también puede ser abusado como un secuenciador de algún tipo si conoce el Soundtracker o Screamtracker módulo formato (formato antiguo, pero las descripciones están todavía disponibles en la red). El jugador con la fuente se puede encontrar aquí . Los formatos Tracker no son tan antiguos por cierto, algunos de los motores de juego de hoy todavía hacer uso de ellos.

  5. Si realmente quieres, puedes preparar tu propio Sequencer, todas las cosas básicas si hay en javax.sound.sampled. Sólo requiere algunos conocimientos básicos sobre el sonido digital y una gran cantidad de código de cableado.

No hay una sola solución para todas sus necesidades, usted tendrá que coser su propio conjunto de los bloques de construcción libremente disponibles.

No podré dar una respuesta completa, pero te señalaré en la dirección correcta.

Android soporta la decodificación .wav y .ogg. De acuerdo con: http://developer.android.com/guide/appendix/media-formats.html

No tengo ninguna experiencia en audio, pero su mejor apuesta parece ser la clase SoundPool, que le permite ajustar el tono y el volumen y parece ser capaz de reproducir varios sonidos simultáneamente: "Tenga en cuenta que llamar a play () puede causar Otro sonido para detener la reproducción si se excede el número máximo de secuencias activas. " http://developer.android.com/reference/android/media/SoundPool.html

También hay una clase MediaPlayer, pero esto es para un uso más simple. No creo que permita el control de cabeceo.

Hice algo similar para mi aplicación (tocando trombones de muestra). Después de mucha experimentación, encontré que la mejor solución era usar AudioTrack. Echa un vistazo a mi código fuente: http://code.google.com/p/trombonino/source/browse/trunk/src/com/trombonino

Especialmente

http://code.google.com/p/trombonino/source/browse/trunk/src/com/trombonino/Trombone.java http://code.google.com/p/trombonino/source/browse/trunk/src /com/trombonino/WavFile.java

Tendrá problemas con su tiempo en el sistema Android. Para evitar que el hilo del secuenciador sea interrumpido por la recolección de basura, probablemente necesite escribir el secuenciador en nativo usando el ndk.

Reproducción de los sonidos es probablemente mejor hacer utilizando el ndk también.

Echa un vistazo a https://code.google.com/p/high-performance-audio/

En el ejemplo de Soundfuse anterior, el secuenciador utiliza SystemClock.sleep () que nunca es una buena idea. Compruebe ¿Por qué usar System.Threading.Thread.Sleep () es una mala práctica? .

Realizado esta pregunta es realmente viejo, pero va a responder de todos modos ya que ninguna respuesta menciona el NDK.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.