Reproducir tono estéreo en Android

Temas similares en esta pregunta incluyen solo tocar tonos en mono donde las frecuencias izquierda y derecha son las mismas.

Mi pregunta es: ¿cómo generar un tono estéreo tal que el canal izquierdo tiene una frecuencia diferente que el canal derecho?

Pensé en la pregrabación de archivos .wav, pero la grabación de muchos archivos .wav y ponerlo en la carpeta res no es una buena idea.

SoundPool encuentro con la clase SoundPool y AudioTrack pero necesito un fragmento que muestre las diferentes frecuencias del canal izquierdo y derecho almacenadas como búfer antes de tocar el tono.

¿O hay otras maneras? Proporcione el fragmento deseado.

4 Solutions collect form web for “Reproducir tono estéreo en Android”

Nunca he intentado esto:

  1. Inicialice sus frecuencias izquierda y derecha
    //playback rate (1.0 = normal playback, range 0.5 to 2.0)
    float lFrequency = 1.0;
    float rFrequency = 1.0;

  2. Inicializar un objeto SoundPool
    SoundPool sp = SoundPool(2, AudioManager.STREAM_MUSIC, 0);

  3. Cargue la pista dos veces ( función de carga )
    int sLeft = sp.load(mContext, R.raw.yourAudioFileId, 1);
    int sRight = sp.load(mContext, R.raw.yourAudioFileId, 1);

  4. Reproducir los 2 sonidos (uno a la izquierda y otro a la derecha) utilizando diferentes rangos ( función de reproducción )
    sp.play (sLeft, 1.0, 0.0, 0, 0, lFrequency);
    sp.play (sRight, 0.0, 1.0, 0, 0, rFrequency);

Desde mi entendimiento, si usa SoundPool, se reproducirá en estéreo sin ninguna configuración especial. De la documentación: "La biblioteca SoundPool utiliza el servicio MediaPlayer para decodificar el audio en un flujo mono o estéreo PCM de 16 bits crudo", siempre y cuando el archivo que esté reproduciendo esté en estéreo para empezar, debería jugar de esa manera.

En lugar de grabar previamente archivos WAV e incrustarlos en su aplicación, en su lugar puede generar el audio WAV de canal dividido en la memoria desde el código y guardarlo como un archivo WAV que podría reproducir con SoundPool o reproducir el audio directamente utilizando AudioTrack (Recomiendo el último).

El audio en sí es sólo una matriz de (normalmente) enteros de 2 bytes. Con estereofonia, las muestras izquierda y derecha se entrelazan en toda la matriz (por lo que la muestra [0] es la primera muestra L, la muestra [1] es la primera muestra R, la muestra [2] es la segunda muestra L etc.). Por lo tanto, cuando su aplicación se inicia, se crearía una matriz por mucho tiempo que necesite (con audio de calidad de CD, su matriz necesitará 88200 elementos por cada segundo de audio), luego llene las muestras con valores calculados para su tono y luego pase la matriz A AudioTrack para jugar.

O guardar el audio como un archivo WAV y reproducirlo con SoundPool (que en realidad podría ser mejor desde el punto de vista de huella de memoria). El formato WAV es muy simple de escribir (la lectura es más complicada): sólo un encabezado de 44 bytes con varias propiedades, y luego los datos de audio en sí.

Creo que he respondido a una pregunta similar Android antes, así que voy a ir a ver si tengo un código básico para hacer esto.

No soy yo, pero un buen código para leer y escribir archivos WAV en java:

http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

Yo usaría otro software para generar un archivo .ogg estéreo (no utilizar archivos WAV, que pesan demasiado), que es un formato de audio muy ligero que funciona bien en Android. Yo uso el Reaper gratis, Audacity es más fácil, cualquiera lo haría. Simplemente cree dos pistas de audio mono, ajuste su panorámica a la derecha completa ya la izquierda. Cargue las muestras y aplique un complemento de cambio de tono para alterar la frecuencia de una de las pistas. También puede generarlos con un sintesizer. A continuación, renderizar todo a un archivo tone.ogg. Tono

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