¿Hay alguna forma de hacer que Android emita un sonido de frecuencia arbitraria (es decir, no quiero tener archivos de sonido pregrabados)?
Miré a mi alrededor y ToneGenerator fue lo único que pude encontrar que estaba incluso cerca, pero parece que solo es capaz de emitir los tonos DTMF estándar.
¿Algunas ideas?
Respuestas:
Originalmente encontré este código de ejemplo en un blog, pero tenía algunos errores que generaban sonidos horribles. Corregí los errores y publiqué el código resultante aquí. ¡Parece que funciona bien para mí!
fuente
0.0
a1.0
. Multiplicar por32767
lo convertiría en el rango de punto fijo de 16 bits. El AudioTrack espera que el tampón sea poco endian formato. Por lo tanto, las dos siguientes líneas simplemente convierten el orden de bytes de big endian a little endian.Mejorando el código anterior:
Agregue una rampa de amplitud hacia arriba y hacia abajo para evitar los clics.
Agregue código para determinar cuándo ha terminado de reproducirse la tachuela.
fuente
Envolví las maravillosas soluciones anteriores en un pequeño paquete ordenado que se puede usar más de la caja como un simple timbre configurable. Lo ejecuta en un hilo en segundo plano y tiene métodos de detener y reproducir y un puñado de opciones que puede configurar.
Está en JCenter, por lo que puede agregarlo a su lista de dependencias de esta manera
y lo usas así para un timbre continuo
o un timbre que se reproduce solo una vez y puede configurar la frecuencia y el volumen de esta manera
Publicación de blog extendida aquí sobre esto aquí GitHub aquí
fuente
Dado que hay un error en algunas versiones anteriores de Android que causa una pérdida de memoria al usar MODE_STATIC, modifiqué la respuesta de Xarph anterior para usar MODE_STREAM. Ojalá ayude a algunos.
fuente
Aquí hay otro blog que muestra un sintetizador simple más una interfaz de usuario
http://audioprograming.wordpress.com/2012/10/18/a-simple-synth-in-android-step-by-step-guide-using-the-java-sdk/
También puede estar interesado en csound o pdlib (biblioteca de datos puros) para Android.
fuente
Código modificado basado en la respuesta de Singhaks
fuente
// Puede agregar un valor arbitrario en synth_frequency para cambiar el sonido, por ejemplo, puede agregar una variable aleatoria para obtener el sonido
fuente
Do major (16 notas)
fuente
ver esta biblioteca útil
https://github.com/karlotoy/perfectTune
es fácil de usar
agregue esto a sus dependencias
Y lo usas así:
para detener la melodía:
fuente
Hay varios programas para esto, pero apestan. Medí algunos:
http://www.endolith.com/wordpress/2009/11/24/android-audio-applications/
Así que no hagas lo que hacen ellos. :RE
fuente